1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-06-12 14:47:13 +08:00

feat: 添加游戏启动界面和着色器效果

- 新增启动界面背景和logo
- 实现顶部和底部阴影着色器
- 添加难度选择滑块和角色名输入框
- 优化多人游戏按钮交互
- 修复编译提示面板的动画效果
- 更新UI主题样式
This commit is contained in:
2026-05-03 11:09:12 +08:00
parent 9966fd0b58
commit 44699d4302
28 changed files with 841 additions and 191 deletions
+5
View File
@@ -0,0 +1,5 @@
shader_type canvas_item;
uniform float prog:hint_range(0.0, 1.0, 0.1)=0;
void fragment() {
COLOR.a*=(1.0-UV.y)/prog;
}
+1
View File
@@ -0,0 +1 @@
uid://csx5am14p4ai0
+2 -1
View File
@@ -4,10 +4,11 @@ extends FullscreenPanelBase
func afterOpen(_args: Array = []):
if WorldManager.isRelease():
for key in ComponentManager.effects:
var effect = EffectController.create(ComponentManager.getEffect(key), Vector2.ZERO, self)
var effect = EffectController.create(ComponentManager.getEffect(key), Vector2.ZERO, self )
effect.modulate.a = 0.01
(effect.sounds.get_node("spawn") as AudioStreamPlayer2D).volume_db = - INF
effect.shot()
await TickTool.millseconds(3000)
await TickTool.frame()
UIState.setPanel("SelectInitialFeed")
StarterPanel.buildingShader = false
+8 -4
View File
@@ -1,5 +1,6 @@
@tool
extends FullscreenPanelBase
class_name StarterPanel
@onready var diffEdit: HSlider = $"%diffEdit"
@onready var startSingleplayerBtn: Button = $"%startSingleplayerBtn"
@@ -18,6 +19,8 @@ var historyStack
@onready var players: VBoxContainer = $"%players"
@onready var playersList: VBoxContainer = $"%list"
static var buildingShader: bool = true
@rpc("any_peer")
func mutexPlayer(player: String):
if multiplayer.is_server():
@@ -63,7 +66,7 @@ func startMultiplayerGame():
func startSingleplayerGame():
MultiplayerState.isMultiplayer = false
MultiplayerState.playerName = playerNameInput.text
EntityBase.generatePlayer(playerNameInput.text)
UIState.player = EntityBase.generatePlayer(playerNameInput.text)
WorldManager.rootNode.spawnWave(Vector2.ZERO)
UIState.setPanel("CompilingTip")
@@ -87,8 +90,9 @@ func _ready():
)
startMultiplayerBtn.pressed.connect(
func():
startMultiplayerGame.rpc()
startMultiplayerGame()
# startMultiplayerGame.rpc()
# startMultiplayerGame()
UIState.showTip("敬请期待!", TipBox.MessageType.ERROR)
)
maxPlayerInput.text_changed.connect(
func(text):
@@ -127,7 +131,7 @@ func setState(state: MultiplayerState.ConnectionState):
connectionState.text = "状态:%s" % MultiplayerState.stateTextMap[state]
connectionState.modulate = MultiplayerState.stateColorMap[state]
disconnectBtn.disabled = not MultiplayerState.isConnected()
startMultiplayerBtn.disabled = not MultiplayerState.isConnected() || !multiplayer.is_server()
# startMultiplayerBtn.disabled = not MultiplayerState.isConnected() || !multiplayer.is_server()
serverConfig.visible = MultiplayerState.state == MultiplayerState.ConnectionState.CONNECTED_HOST
players.visible = MultiplayerState.isConnected()
func addPlayerName(playerName: String):
+1 -1
View File
@@ -2,7 +2,7 @@
extends Control
class_name FullscreenPanelBase
@onready var animator = $"%animator"
@onready var animator: AnimationPlayer = $"%animator"
func hidePanel():
beforeClose()
+1
View File
@@ -19,6 +19,7 @@ func _physics_process(_delta):
offset += ((get_global_mouse_position() - UIState.player.position).clampf(-100, 100) - offset) * 0.15
static func shake(millseconds: float, intensity: float = 10, steper: Callable = func(currentValue, _totalValue, _restPercent): return currentValue):
if StarterPanel.buildingShader: return
var startTime = WorldManager.getTime()
instance.shakeIntensity = intensity
await TickTool.until(