diff --git a/components/Characters/EnergyBlock.tscn b/components/Characters/EnergyBlock.tscn index 9eb9939..dc00051 100644 --- a/components/Characters/EnergyBlock.tscn +++ b/components/Characters/EnergyBlock.tscn @@ -28,6 +28,9 @@ size = Vector2(112, 112) [node name="EnergyBlock" unique_id=247617339 instance=ExtResource("1_n2ng1")] script = ExtResource("2_h3ykr") displayName = "稻草人" +drops = Array[int]([0, 1]) +dropCounts = Array[Vector2]([Vector2(20, 40), Vector2(30, 60)]) +appleCount = Vector2i(2, 4) [node name="texture" parent="." index="3"] sprite_frames = SubResource("SpriteFrames_8do1r") diff --git a/components/Scenes/FullscreenPanels/Starter.tscn b/components/Scenes/FullscreenPanels/Starter.tscn index f187de4..f26ee68 100644 --- a/components/Scenes/FullscreenPanels/Starter.tscn +++ b/components/Scenes/FullscreenPanels/Starter.tscn @@ -197,39 +197,59 @@ theme_override_constants/separation = 30 layout_mode = 2 theme_override_constants/separation = 20 -[node name="diffs" type="HBoxContainer" parent="content/wrapper/wrapper/start/starter/singleplayer" index="0" unique_id=526058063] +[node name="playConfig" type="VBoxContainer" parent="content/wrapper/wrapper/start/starter/singleplayer" index="0" unique_id=1132195820] +layout_mode = 2 +theme_override_constants/separation = 6 + +[node name="diffs" type="HBoxContainer" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig" index="0" unique_id=526058063] layout_mode = 2 alignment = 1 -[node name="tip" type="Label" parent="content/wrapper/wrapper/start/starter/singleplayer/diffs" index="0" unique_id=1507689450] +[node name="tip" type="Label" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig/diffs" index="0" unique_id=1507689450] layout_mode = 2 text = "选择难度:" -[node name="diffEdit" type="HSlider" parent="content/wrapper/wrapper/start/starter/singleplayer/diffs" index="1" unique_id=1308866785] +[node name="diffEdit" type="HSlider" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig/diffs" index="1" unique_id=1308866785] unique_name_in_owner = true custom_minimum_size = Vector2(100, 0) layout_mode = 2 size_flags_vertical = 4 max_value = 0.0 -[node name="levelShow" type="Label" parent="content/wrapper/wrapper/start/starter/singleplayer/diffs" index="2" unique_id=1102279314] +[node name="levelShow" type="Label" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig/diffs" index="2" unique_id=1102279314] unique_name_in_owner = true layout_mode = 2 text = "0 ∈ [0, 0]" -[node name="start" type="VBoxContainer" parent="content/wrapper/wrapper/start/starter/singleplayer" index="1" unique_id=1119283819] -layout_mode = 2 -theme_override_constants/separation = 10 -alignment = 1 - -[node name="player" type="HBoxContainer" parent="content/wrapper/wrapper/start/starter/singleplayer/start" index="0" unique_id=656225175] +[node name="gamemode" type="HBoxContainer" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig" index="1" unique_id=1396041711] layout_mode = 2 -[node name="tip" type="Label" parent="content/wrapper/wrapper/start/starter/singleplayer/start/player" index="0" unique_id=1899542373] +[node name="tip" type="Label" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig/gamemode" index="0" unique_id=1975146551] +layout_mode = 2 +text = "游戏模式:" + +[node name="gamemodeOption" type="OptionButton" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig/gamemode" index="1" unique_id=620219949] +unique_name_in_owner = true +layout_mode = 2 +theme = ExtResource("4_lfxcn") +selected = 0 +allow_reselect = true +item_count = 3 +popup/item_0/text = "无尽波次" +popup/item_0/id = 0 +popup/item_1/text = "Boss Rush" +popup/item_1/id = 1 +popup/item_2/text = "割草" +popup/item_2/id = 2 + +[node name="player" type="HBoxContainer" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig" index="2" unique_id=656225175] +layout_mode = 2 + +[node name="tip" type="Label" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig/player" index="0" unique_id=1899542373] layout_mode = 2 text = "角色名:" -[node name="playerNameInput" type="LineEdit" parent="content/wrapper/wrapper/start/starter/singleplayer/start/player" index="1" unique_id=1401004968] +[node name="playerNameInput" type="LineEdit" parent="content/wrapper/wrapper/start/starter/singleplayer/playConfig/player" index="1" unique_id=1401004968] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 @@ -242,14 +262,19 @@ expand_to_text_length = true select_all_on_focus = true virtual_keyboard_type = 7 -[node name="startSingleplayerBtn" type="Button" parent="content/wrapper/wrapper/start/starter/singleplayer/start" index="1" unique_id=935895475] +[node name="start" type="VBoxContainer" parent="content/wrapper/wrapper/start/starter/singleplayer" index="1" unique_id=1119283819] +layout_mode = 2 +theme_override_constants/separation = 10 +alignment = 1 + +[node name="startSingleplayerBtn" type="Button" parent="content/wrapper/wrapper/start/starter/singleplayer/start" index="0" unique_id=935895475] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 4 theme = ExtResource("4_lfxcn") text = "单人游戏" -[node name="startMultiplayerBtn" type="Button" parent="content/wrapper/wrapper/start/starter/singleplayer/start" index="2" unique_id=1874616219] +[node name="startMultiplayerBtn" type="Button" parent="content/wrapper/wrapper/start/starter/singleplayer/start" index="1" unique_id=1874616219] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 4 diff --git a/components/Scenes/UI.tscn b/components/Scenes/UI.tscn index ade1e84..329eec1 100644 --- a/components/Scenes/UI.tscn +++ b/components/Scenes/UI.tscn @@ -134,7 +134,8 @@ grow_vertical = 2 unique_name_in_owner = true layout_mode = 1 -[node name="items" type="PanelContainer" parent="root" unique_id=889148256] +[node name="itemsContainer" type="PanelContainer" parent="root" unique_id=889148256] +unique_name_in_owner = true z_index = 1 z_as_relative = false layout_mode = 1 @@ -150,36 +151,37 @@ grow_vertical = 0 theme_override_styles/panel = SubResource("StyleBoxFlat_k2y4g") metadata/_edit_lock_ = true -[node name="items" type="HBoxContainer" parent="root/items" unique_id=1102895760] +[node name="items" type="HBoxContainer" parent="root/itemsContainer" unique_id=1102895760] unique_name_in_owner = true layout_mode = 2 alignment = 1 -[node name="baseball" parent="root/items/items" unique_id=222901100 instance=ExtResource("3_o2oi4")] +[node name="baseball" parent="root/itemsContainer/items" unique_id=222901100 instance=ExtResource("3_o2oi4")] unique_name_in_owner = true layout_mode = 2 -[node name="basketball" parent="root/items/items" unique_id=1586914104 instance=ExtResource("3_o2oi4")] +[node name="basketball" parent="root/itemsContainer/items" unique_id=1586914104 instance=ExtResource("3_o2oi4")] unique_name_in_owner = true layout_mode = 2 type = 1 -[node name="apple" parent="root/items/items" unique_id=895524937 instance=ExtResource("3_o2oi4")] +[node name="apple" parent="root/itemsContainer/items" unique_id=895524937 instance=ExtResource("3_o2oi4")] unique_name_in_owner = true layout_mode = 2 type = 2 -[node name="beachball" parent="root/items/items" unique_id=23220525 instance=ExtResource("3_o2oi4")] +[node name="beachball" parent="root/itemsContainer/items" unique_id=23220525 instance=ExtResource("3_o2oi4")] unique_name_in_owner = true layout_mode = 2 type = 3 -[node name="soul" parent="root/items/items" unique_id=1287636941 instance=ExtResource("3_o2oi4")] +[node name="soul" parent="root/itemsContainer/items" unique_id=1287636941 instance=ExtResource("3_o2oi4")] unique_name_in_owner = true layout_mode = 2 type = 4 -[node name="energy" type="PanelContainer" parent="root" unique_id=1886165069] +[node name="energyContainer" type="PanelContainer" parent="root" unique_id=1886165069] +unique_name_in_owner = true z_index = 1 z_as_relative = false layout_mode = 1 @@ -195,39 +197,39 @@ grow_horizontal = 2 grow_vertical = 0 theme_override_styles/panel = ExtResource("5_3hym1") -[node name="wrapper" type="VBoxContainer" parent="root/energy" unique_id=1356612647] +[node name="wrapper" type="VBoxContainer" parent="root/energyContainer" unique_id=1356612647] layout_mode = 2 theme_override_constants/separation = 10 -[node name="skills" type="PanelContainer" parent="root/energy/wrapper" unique_id=1694782078] +[node name="skills" type="PanelContainer" parent="root/energyContainer/wrapper" unique_id=1694782078] layout_mode = 2 theme_override_styles/panel = SubResource("StyleBoxEmpty_12otr") -[node name="skillContainer" type="HBoxContainer" parent="root/energy/wrapper/skills" unique_id=51208875] +[node name="skillContainer" type="HBoxContainer" parent="root/energyContainer/wrapper/skills" unique_id=51208875] unique_name_in_owner = true layout_mode = 2 theme_override_constants/separation = 10 alignment = 1 -[node name="SkillIconBase" parent="root/energy/wrapper/skills/skillContainer" unique_id=1090815103 instance=ExtResource("5_k2y4g")] +[node name="SkillIconBase" parent="root/energyContainer/wrapper/skills/skillContainer" unique_id=1090815103 instance=ExtResource("5_k2y4g")] layout_mode = 2 -[node name="SkillIconBase2" parent="root/energy/wrapper/skills/skillContainer" unique_id=592440106 instance=ExtResource("5_k2y4g")] +[node name="SkillIconBase2" parent="root/energyContainer/wrapper/skills/skillContainer" unique_id=592440106 instance=ExtResource("5_k2y4g")] layout_mode = 2 -[node name="SkillIconBase3" parent="root/energy/wrapper/skills/skillContainer" unique_id=1424612490 instance=ExtResource("5_k2y4g")] +[node name="SkillIconBase3" parent="root/energyContainer/wrapper/skills/skillContainer" unique_id=1424612490 instance=ExtResource("5_k2y4g")] layout_mode = 2 -[node name="container" type="HBoxContainer" parent="root/energy/wrapper" unique_id=1689009576] +[node name="container" type="HBoxContainer" parent="root/energyContainer/wrapper" unique_id=1689009576] layout_mode = 2 theme_override_constants/separation = 10 alignment = 1 -[node name="energy" type="HBoxContainer" parent="root/energy/wrapper/container" unique_id=1568060205] +[node name="energy" type="HBoxContainer" parent="root/energyContainer/wrapper/container" unique_id=1568060205] layout_mode = 2 alignment = 1 -[node name="icon" type="TextureRect" parent="root/energy/wrapper/container/energy" unique_id=920175670] +[node name="icon" type="TextureRect" parent="root/energyContainer/wrapper/container/energy" unique_id=920175670] custom_minimum_size = Vector2(16, 16) layout_mode = 2 size_flags_horizontal = 4 @@ -235,7 +237,7 @@ size_flags_vertical = 4 texture = ExtResource("7_2om12") expand_mode = 1 -[node name="percent" parent="root/energy/wrapper/container" unique_id=1940891290 instance=ExtResource("6_oy0yg")] +[node name="percent" parent="root/energyContainer/wrapper/container" unique_id=1940891290 instance=ExtResource("6_oy0yg")] unique_name_in_owner = true custom_minimum_size = Vector2(200, 0) layout_mode = 2 diff --git a/scripts/Contents/Panels/SelectIntialFeed.gd b/scripts/Contents/Panels/SelectIntialFeed.gd index 739f4ce..5f27787 100644 --- a/scripts/Contents/Panels/SelectIntialFeed.gd +++ b/scripts/Contents/Panels/SelectIntialFeed.gd @@ -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() diff --git a/scripts/Contents/Panels/Starter.gd b/scripts/Contents/Panels/Starter.gd index fc297ba..dae674f 100644 --- a/scripts/Contents/Panels/Starter.gd +++ b/scripts/Contents/Panels/Starter.gd @@ -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") diff --git a/scripts/Contents/Wave.gd b/scripts/Contents/Wave.gd index 7b547e4..f0b3496 100644 --- a/scripts/Contents/Wave.gd +++ b/scripts/Contents/Wave.gd @@ -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 diff --git a/scripts/Statemachine/EntityBase.gd b/scripts/Statemachine/EntityBase.gd index 56aeb10..f0b6cd5 100644 --- a/scripts/Statemachine/EntityBase.gd +++ b/scripts/Statemachine/EntityBase.gd @@ -136,7 +136,6 @@ func _ready(): for i in weaponStore.get_children(): i.free() weaponStore.add_child(ComponentManager.getWeapon("PurpleCrystal").instantiate()) - weaponStore.add_child(MathTool.randomChoiceFrom(ComponentManager.weapons.values()).instantiate()) for i in weaponStore.get_children(): i.hide() weapons.append(i) diff --git a/scripts/Statemachine/UIState.gd b/scripts/Statemachine/UIState.gd index 795b6df..4b49cb2 100644 --- a/scripts/Statemachine/UIState.gd +++ b/scripts/Statemachine/UIState.gd @@ -12,6 +12,8 @@ static var energyPercent: ColorBar static var itemCollect: VBoxContainer static var skillIconContainer: HBoxContainer static var tips: VBoxContainer +static var itemsContainer: Control +static var energyContainer: Control func _ready(): bossbar = $%bossbar @@ -23,6 +25,8 @@ func _ready(): items = $%items fields = $%fields fieldsAnimator = $%fieldsAnimator + itemsContainer = $%itemsContainer + energyContainer = $%energyContainer await get_tree().process_frame for panel in ComponentManager.panels: panel = ComponentManager.getPanel(panel).instantiate() as FullscreenPanelBase @@ -32,10 +36,17 @@ func _ready(): func _process(_delta): bossbar.visible = !!bossbar.entity func _physics_process(_delta): - if is_instance_valid(player): + if is_instance_valid(player) && !StarterPanel.selectingFeed: for i in items.get_children(): var item = i as ItemShow item.count = player.inventory.get(item.type) + bossbar.visible = true + itemsContainer.visible = true + energyContainer.visible = true + else: + bossbar.visible = false + itemsContainer.visible = false + energyContainer.visible = false if currentPanel: WorldManager.rootNode.process_mode = Node.PROCESS_MODE_DISABLED else: diff --git a/scripts/Tools/ArrayTool.gd b/scripts/Tools/ArrayTool.gd index 5927f5a..bd3c22f 100644 --- a/scripts/Tools/ArrayTool.gd +++ b/scripts/Tools/ArrayTool.gd @@ -19,3 +19,8 @@ static func parseEncodedObject(arr: Array) -> Array: else: result.append(item) return result +static func betterMap(arr: Array, executor: Callable) -> Array: + var result = [] + for index in len(arr): + result.append(executor.call(arr[index], index, arr)) + return result diff --git a/themes/main.tres b/themes/main.tres index 6221a90..ea36c54 100644 --- a/themes/main.tres +++ b/themes/main.tres @@ -159,5 +159,7 @@ LineEdit/icons/clear = SubResource("DPITexture_7d6gw") LineEdit/styles/focus = SubResource("StyleBoxEmpty_wc0q8") LineEdit/styles/normal = SubResource("StyleBoxFlat_kx4sy") LineEdit/styles/read_only = SubResource("StyleBoxFlat_k5u3e") +OptionButton/constants/arrow_margin = 8 +OptionButton/icons/arrow = ExtResource("1_0avsd") ProgressBar/styles/background = SubResource("StyleBoxFlat_a507o") ProgressBar/styles/fill = SubResource("StyleBoxFlat_ef7vq")