mirror of
https://github.com/Rundll86/Dog-Lynx-And-HCN.git
synced 2026-05-28 15:01:53 +08:00
feat(游戏模式): 添加游戏模式选择功能并优化UI状态管理
实现游戏模式选择功能,包括无尽波次、Boss Rush和割草模式 添加游戏模式与波次数据的映射关系 优化UI状态管理,新增selectingFeed状态控制UI元素显示 重构Starter面板布局,添加游戏模式选项 为EnergyBlock添加掉落物品配置
This commit is contained in:
@@ -8,7 +8,11 @@ extends FullscreenPanelBase
|
||||
@onready var title2: Label = $%title2
|
||||
|
||||
func _ready():
|
||||
startBtn.pressed.connect(func(): UIState.closeCurrentPanel())
|
||||
startBtn.pressed.connect(
|
||||
func():
|
||||
UIState.closeCurrentPanel()
|
||||
StarterPanel.selectingFeed = false
|
||||
)
|
||||
|
||||
func beforeOpen(_args: Array = []):
|
||||
clearFeeds()
|
||||
|
||||
@@ -2,24 +2,29 @@
|
||||
extends FullscreenPanelBase
|
||||
class_name StarterPanel
|
||||
|
||||
@onready var diffEdit: HSlider = $"%diffEdit"
|
||||
@onready var startSingleplayerBtn: Button = $"%startSingleplayerBtn"
|
||||
@onready var startMultiplayerBtn: Button = $"%startMultiplayerBtn"
|
||||
@onready var levelShow: Label = $"%levelShow"
|
||||
@onready var hostInput: LineEdit = $"%hostInput"
|
||||
@onready var portInput: LineEdit = $"%portInput"
|
||||
@onready var launchBtn: Button = $"%launchBtn"
|
||||
@onready var connectBtn: Button = $"%connectBtn"
|
||||
@onready var maxPlayerInput: LineEdit = $"%maxPlayerInput"
|
||||
@onready var connectionState: Label = $"%connectionState"
|
||||
@onready var disconnectBtn: Button = $"%disconnectBtn"
|
||||
@onready var playerNameInput: LineEdit = $"%playerNameInput"
|
||||
@onready var diffEdit: HSlider = $%diffEdit
|
||||
@onready var playerNameInput: LineEdit = $%playerNameInput
|
||||
@onready var gamemodeOption: OptionButton = $%gamemodeOption
|
||||
|
||||
@onready var startSingleplayerBtn: Button = $%startSingleplayerBtn
|
||||
@onready var startMultiplayerBtn: Button = $%startMultiplayerBtn
|
||||
@onready var levelShow: Label = $%levelShow
|
||||
@onready var hostInput: LineEdit = $%hostInput
|
||||
@onready var portInput: LineEdit = $%portInput
|
||||
@onready var launchBtn: Button = $%launchBtn
|
||||
@onready var connectBtn: Button = $%connectBtn
|
||||
@onready var maxPlayerInput: LineEdit = $%maxPlayerInput
|
||||
@onready var connectionState: Label = $%connectionState
|
||||
@onready var disconnectBtn: Button = $%disconnectBtn
|
||||
@onready var serverConfig: VBoxContainer = $%serverConfig
|
||||
@onready var players: VBoxContainer = $%players
|
||||
@onready var playersList: VBoxContainer = $%list
|
||||
|
||||
var historyStack
|
||||
@onready var serverConfig: VBoxContainer = $"%serverConfig"
|
||||
@onready var players: VBoxContainer = $"%players"
|
||||
@onready var playersList: VBoxContainer = $"%list"
|
||||
|
||||
static var buildingShader: bool = true
|
||||
static var selectingFeed: bool = true
|
||||
static var GAMEMODE_MAP_WAVE = [Wave.WAVE_NORMAL, Wave.WAVE_BOSSRUSH, Wave.WAVE_MOWING]
|
||||
|
||||
@rpc("any_peer")
|
||||
func mutexPlayer(player: String):
|
||||
@@ -66,6 +71,7 @@ func startMultiplayerGame():
|
||||
func startSingleplayerGame():
|
||||
MultiplayerState.isMultiplayer = false
|
||||
MultiplayerState.playerName = playerNameInput.text
|
||||
Wave.usingWaveData = GAMEMODE_MAP_WAVE[gamemodeOption.selected]
|
||||
UIState.player = EntityBase.generatePlayer(playerNameInput.text)
|
||||
WorldManager.rootNode.spawnWave(Vector2.ZERO)
|
||||
UIState.setPanel("CompilingTip")
|
||||
|
||||
+12
-21
@@ -22,6 +22,8 @@ func duplicate() -> Wave:
|
||||
wave.per = per
|
||||
return wave
|
||||
|
||||
static var GAME_BOSSES = ["Chick", "Deepsea", "KukeMC", "CyberCat", "Kernyr", "EnergyBlock", "Bear"]
|
||||
|
||||
static var WAVE_NORMAL = [
|
||||
Wave.create("Hen", 1, 3, false, 2, INF, 1),
|
||||
Wave.create("Cat", 1, 5, false, 0, INF, 1),
|
||||
@@ -31,19 +33,7 @@ static var WAVE_NORMAL = [
|
||||
Wave.create("KukeMC", 0, 0, true, 19, INF, 20),
|
||||
Wave.create("Bear", 0, 0, true, 29, INF, 23),
|
||||
]
|
||||
static var WAVE_TESTBOSS = [
|
||||
Wave.create("Deepsea", 0, 0, true, 0, INF, 6),
|
||||
Wave.create("Kernyr", 0, 0, true, 1, INF, 6),
|
||||
Wave.create("CyberCat", 0, 0, true, 2, INF, 6),
|
||||
Wave.create("Chick", 0, 0, true, 3, INF, 6),
|
||||
Wave.create("KukeMC", 0, 0, true, 4, INF, 6),
|
||||
Wave.create("Bear", 0, 0, true, 5, INF, 6),
|
||||
]
|
||||
static var WAVE_JUSTJOKE = [
|
||||
Wave.create("Kernyr", 0, 0, true, 0, INF, 1),
|
||||
Wave.create("CyberCat", 0, 0, true, 0, INF, 1),
|
||||
Wave.create("Deepsea", 0, 0, true, 0, INF, 1)
|
||||
]
|
||||
static var WAVE_BOSSRUSH = ArrayTool.betterMap(GAME_BOSSES, func(x: String, i: int, _arr: Array): return Wave.create(x, 0, 0, true, i, INF, len(GAME_BOSSES)))
|
||||
static var WAVE_MOWING = [
|
||||
Wave.create("Hen", 15, 30, false, 0, INF, 1),
|
||||
Wave.create("Cat", 15, 30, false, 0, INF, 1),
|
||||
@@ -51,16 +41,17 @@ static var WAVE_MOWING = [
|
||||
Wave.create("MTY", 0, 2, false, 0, INF, 1),
|
||||
Wave.create("EnergyBlock", 0, 1, true, 0, INF, 1),
|
||||
]
|
||||
static var WAVE_TESTMOB = [
|
||||
Wave.create("EnergyBlock", 1, 1, true, 0, INF, 1),
|
||||
# Wave.create("MTY", 1, 1, false, 0, INF, 1),
|
||||
static var WAVE_TESTBOSS = [
|
||||
Wave.create("EnergyBlock", 0, 0, true, 0, INF, 1),
|
||||
]
|
||||
static var WAVE_TESTMOB = []
|
||||
static var WAVE_EMPTY = []
|
||||
|
||||
static var waveReleaseConfig = [WAVE_TESTBOSS, 1]
|
||||
static var waveDebugConfig = [WAVE_TESTMOB, 1]
|
||||
|
||||
static var current: int = startWith(waveReleaseConfig[1]) if WorldManager.isRelease() else startWith(waveDebugConfig[1])
|
||||
static var data = waveReleaseConfig[0] if WorldManager.isRelease() else waveDebugConfig[0]
|
||||
static var usingWaveData = waveReleaseConfig[0] if WorldManager.isRelease() else waveDebugConfig[0]
|
||||
|
||||
static func create(
|
||||
entity_: String,
|
||||
@@ -81,7 +72,7 @@ static func create(
|
||||
wave.per = per_
|
||||
return wave
|
||||
static func hasBoss() -> bool:
|
||||
for wave in data:
|
||||
for wave in usingWaveData:
|
||||
if canSpawn(wave):
|
||||
if wave.isBoss:
|
||||
return true
|
||||
@@ -98,7 +89,7 @@ static func entityCountOf(wave: Wave) -> int:
|
||||
static func getNextBossInfo() -> Array:
|
||||
var nextBossName = ""
|
||||
var minWavesLeft = INF
|
||||
for wave in data:
|
||||
for wave in usingWaveData:
|
||||
if wave.isBoss:
|
||||
var wavesLeft = wave.from - current
|
||||
if wavesLeft > 0 and wavesLeft < minWavesLeft:
|
||||
@@ -109,8 +100,8 @@ static func getNextBossInfo() -> Array:
|
||||
return []
|
||||
static func spawn(center: Vector2) -> Array:
|
||||
var result: Array = []
|
||||
for i in range(len(data)):
|
||||
var wave: Wave = data[i]
|
||||
for i in range(len(usingWaveData)):
|
||||
var wave: Wave = usingWaveData[i]
|
||||
for j in range(entityCountOf(wave)):
|
||||
var currentWave = wave.duplicate()
|
||||
currentWave.entityPosition = MathTool.sampleInRing(400, 800) + center
|
||||
|
||||
Reference in New Issue
Block a user