diff --git a/MainScene.tscn b/MainScene.tscn index 32d1d4c..5d150d6 100644 --- a/MainScene.tscn +++ b/MainScene.tscn @@ -1,16 +1,17 @@ -[gd_scene load_steps=6 format=2] +[gd_scene load_steps=7 format=2] [ext_resource path="res://scenes/UI.tscn" type="PackedScene" id=1] [ext_resource path="res://scenes/floors/Floor1.tscn" type="PackedScene" id=2] [ext_resource path="res://scripts/BgmAudioPlayer.gd" type="Script" id=3] [ext_resource path="res://images/mota_tileset.tres" type="TileSet" id=4] [ext_resource path="res://sounds/bgm.ogg" type="AudioStream" id=5] +[ext_resource path="res://scripts/GameInit.gd" type="Script" id=6] [node name="Main" type="Node2D"] +script = ExtResource( 6 ) [node name="BgmAudioPlayer" type="AudioStreamPlayer2D" parent="."] stream = ExtResource( 5 ) -volume_db = -20.0 script = ExtResource( 3 ) [node name="BackgroundTileMap" type="TileMap" parent="."] diff --git a/images/mota_tileset.tres b/images/mota_tileset.tres index 08f24a5..e31c59b 100644 --- a/images/mota_tileset.tres +++ b/images/mota_tileset.tres @@ -2,7 +2,7 @@ [ext_resource path="res://images/mota.png" type="Texture" id=1] -[sub_resource type="NavigationPolygon" id=2] +[sub_resource type="NavigationPolygon" id=1] vertices = PoolVector2Array( 12.8379, -3.70605, 12.9995, 7.7608, 11.8689, 13.575, -5.4122, 14.7056, -5.4122, 18.5817, 11.7074, 18.2587, 12.3534, 36.5088, 18.4906, 36.5088, 17.1986, 19.0662, 39.8093, 18.7432, 38.1943, 11.7985, 18.4906, 12.606, 18.4906, -4.02911 ) polygons = [ PoolIntArray( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ) ] @@ -43,7 +43,7 @@ polygons = [ PoolIntArray( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ) ] 2/tile_mode = 0 2/occluder_offset = Vector2( 0, 0 ) 2/navigation_offset = Vector2( 0, 0 ) -2/navigation = SubResource( 2 ) +2/navigation = SubResource( 1 ) 2/shape_offset = Vector2( 0, 0 ) 2/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) 2/shape_one_way = false diff --git a/project.godot b/project.godot index e495e40..698efe6 100644 --- a/project.godot +++ b/project.godot @@ -35,6 +35,11 @@ _global_script_classes=[ { "path": "res://scripts/ElixirsSprite.gd" }, { "base": "Sprite", +"class": "GemSprite", +"language": "GDScript", +"path": "res://scripts/GemSprite.gd" +}, { +"base": "Sprite", "class": "KeySprite", "language": "GDScript", "path": "res://scripts/KeySprite.gd" @@ -63,6 +68,11 @@ _global_script_classes=[ { "class": "SaveGameButton", "language": "GDScript", "path": "res://scripts/SaveGameButton.gd" +}, { +"base": "Sprite", +"class": "StairsSprite", +"language": "GDScript", +"path": "res://scripts/StairsSprite.gd" } ] _global_script_class_icons={ "ArrayTween": "", @@ -70,12 +80,14 @@ _global_script_class_icons={ "DoorSprite": "", "DoorStaticBody2D": "", "ElixirsSprite": "", +"GemSprite": "", "KeySprite": "", "MonsterSprite": "", "NavigationTileMap": "", "PlayerKinematicBody2D": "", "PlayerSprite": "", -"SaveGameButton": "" +"SaveGameButton": "", +"StairsSprite": "" } [application] @@ -88,6 +100,10 @@ config/custom_user_dir_name="mota" boot_splash/image="res://images/logo.png" config/icon="res://settings/icon.png" +[audio] + +default_bus_layout="" + [autoload] GameFloorManager="*res://scripts/GameFloorManager.gd" diff --git a/scenes/Doore.tscn b/scenes/Door.tscn similarity index 100% rename from scenes/Doore.tscn rename to scenes/Door.tscn diff --git a/scenes/Gem.tscn b/scenes/Gem.tscn new file mode 100644 index 0000000..b255c5a --- /dev/null +++ b/scenes/Gem.tscn @@ -0,0 +1,19 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://images/mota.png" type="Texture" id=1] +[ext_resource path="res://scripts/GemSprite.gd" type="Script" id=2] + +[sub_resource type="RectangleShape2D" id=1] + +[node name="GemSprite" type="Sprite"] +position = Vector2( 368, 336 ) +texture = ExtResource( 1 ) +region_enabled = true +region_rect = Rect2( 128, 384, 32, 32 ) +script = ExtResource( 2 ) + +[node name="Area2D" type="Area2D" parent="."] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] +shape = SubResource( 1 ) +[connection signal="body_entered" from="Area2D" to="." method="_on_Area2D_body_entered"] diff --git a/scenes/Stairs.tscn b/scenes/Stairs.tscn new file mode 100644 index 0000000..a2f0a80 --- /dev/null +++ b/scenes/Stairs.tscn @@ -0,0 +1,21 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://images/mota.png" type="Texture" id=1] +[ext_resource path="res://scripts/StairsSprite.gd" type="Script" id=2] + +[sub_resource type="RectangleShape2D" id=1] + +[node name="StairsSprite" type="Sprite" groups=[ +"stairs", +]] +position = Vector2( 176, 48 ) +texture = ExtResource( 1 ) +region_enabled = true +region_rect = Rect2( 96, 512, 32, 32 ) +script = ExtResource( 2 ) + +[node name="Area2D" type="Area2D" parent="."] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] +shape = SubResource( 1 ) +[connection signal="body_entered" from="Area2D" to="." method="_on_Area2D_body_entered"] diff --git a/scenes/floors/Floor1.tscn b/scenes/floors/Floor1.tscn index 5f71635..54c7fe1 100644 --- a/scenes/floors/Floor1.tscn +++ b/scenes/floors/Floor1.tscn @@ -1,8 +1,13 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=9 format=2] [ext_resource path="res://images/mota_tileset.tres" type="TileSet" id=1] +[ext_resource path="res://scenes/Door.tscn" type="PackedScene" id=2] [ext_resource path="res://scripts/NavigationTileMap.gd" type="Script" id=3] -[ext_resource path="res://scenes/Player.tscn" type="PackedScene" id=5] +[ext_resource path="res://scenes/Key.tscn" type="PackedScene" id=4] +[ext_resource path="res://scenes/Elixirs.tscn" type="PackedScene" id=6] +[ext_resource path="res://scenes/Monster.tscn" type="PackedScene" id=7] +[ext_resource path="res://scenes/Gem.tscn" type="PackedScene" id=8] +[ext_resource path="res://scenes/Stairs.tscn" type="PackedScene" id=9] [node name="Floor1" type="Node2D"] @@ -16,5 +21,119 @@ script = ExtResource( 3 ) [node name="Item" type="Node2D" parent="."] -[node name="PlayerKinematicBody2D" parent="." instance=ExtResource( 5 )] -position = Vector2( 336, 368 ) +[node name="ElixirsSprite" parent="Item" instance=ExtResource( 6 )] +position = Vector2( 176, 368 ) +elixirs_value = 50 + +[node name="ElixirsSprite2" parent="Item" instance=ExtResource( 6 )] +position = Vector2( 176, 336 ) +elixirs_value = 50 + +[node name="ElixirsSprite5" parent="Item" instance=ExtResource( 6 )] +position = Vector2( 176, 112 ) +elixirs_value = 50 + +[node name="ElixirsSprite3" parent="Item" instance=ExtResource( 6 )] +position = Vector2( 400, 144 ) +elixirs_value = 50 + +[node name="ElixirsSprite4" parent="Item" instance=ExtResource( 6 )] +position = Vector2( 464, 368 ) +region_rect = Rect2( 128, 416, 32, 32 ) +elixirs_color = 1 +elixirs_value = 200 + +[node name="DoorSprite" parent="Item" instance=ExtResource( 2 )] +position = Vector2( 336, 304 ) + +[node name="DoorSprite2" parent="Item" instance=ExtResource( 2 )] +position = Vector2( 208, 272 ) + +[node name="DoorSprite3" parent="Item" instance=ExtResource( 2 )] +position = Vector2( 208, 176 ) + +[node name="DoorSprite4" parent="Item" instance=ExtResource( 2 )] +position = Vector2( 272, 112 ) + +[node name="DoorSprite5" parent="Item" instance=ExtResource( 2 )] +position = Vector2( 336, 208 ) + +[node name="DoorSprite6" parent="Item" instance=ExtResource( 2 )] +position = Vector2( 432, 176 ) + +[node name="DoorSprite7" parent="Item" instance=ExtResource( 2 )] +position = Vector2( 464, 304 ) + +[node name="KeySprite" parent="Item" instance=ExtResource( 4 )] +position = Vector2( 240, 368 ) + +[node name="KeySprite2" parent="Item" instance=ExtResource( 4 )] +position = Vector2( 240, 336 ) + +[node name="KeySprite5" parent="Item" instance=ExtResource( 4 )] +position = Vector2( 304, 336 ) + +[node name="KeySprite3" parent="Item" instance=ExtResource( 4 )] +position = Vector2( 176, 240 ) + +[node name="KeySprite4" parent="Item" instance=ExtResource( 4 )] +position = Vector2( 400, 112 ) + +[node name="MonsterSprite" parent="Item" instance=ExtResource( 7 )] +position = Vector2( 208, 144 ) +animation = "skeleton" +frame = 1 + +[node name="MonsterSprite9" parent="Item" instance=ExtResource( 7 )] +position = Vector2( 272, 48 ) +animation = "redSlime" +frame = 1 + +[node name="MonsterSprite10" parent="Item" instance=ExtResource( 7 )] +position = Vector2( 240, 48 ) +animation = "greenSlime" + +[node name="MonsterSprite11" parent="Item" instance=ExtResource( 7 )] +position = Vector2( 304, 48 ) +animation = "greenSlime" +frame = 1 + +[node name="MonsterSprite2" parent="Item" instance=ExtResource( 7 )] +position = Vector2( 208, 240 ) +animation = "skeletonSoilder" +frame = 1 + +[node name="MonsterSprite3" parent="Item" instance=ExtResource( 7 )] +position = Vector2( 464, 336 ) +frame = 1 + +[node name="MonsterSprite6" parent="Item" instance=ExtResource( 7 )] +position = Vector2( 368, 208 ) + +[node name="MonsterSprite7" parent="Item" instance=ExtResource( 7 )] +position = Vector2( 432, 208 ) + +[node name="MonsterSprite8" parent="Item" instance=ExtResource( 7 )] +position = Vector2( 400, 208 ) +animation = "bluePriest" + +[node name="MonsterSprite4" parent="Item" instance=ExtResource( 7 )] +position = Vector2( 432, 368 ) +animation = "greenSlime" +frame = 1 + +[node name="MonsterSprite5" parent="Item" instance=ExtResource( 7 )] +position = Vector2( 496, 368 ) +animation = "greenSlime" +frame = 1 + +[node name="GemSprite" parent="Item" instance=ExtResource( 8 )] +position = Vector2( 368, 112 ) +region_rect = Rect2( 96, 384, 32, 32 ) +gem_color = 1 + +[node name="GemSprite2" parent="Item" instance=ExtResource( 8 )] +position = Vector2( 368, 144 ) + +[node name="StairsSprite" parent="Item" instance=ExtResource( 9 )] +player_init_position = Vector2( 208, 48 ) diff --git a/scenes/floors/Floor2.tscn b/scenes/floors/Floor2.tscn new file mode 100644 index 0000000..9c57f2a --- /dev/null +++ b/scenes/floors/Floor2.tscn @@ -0,0 +1,103 @@ +[gd_scene load_steps=8 format=2] + +[ext_resource path="res://scripts/NavigationTileMap.gd" type="Script" id=1] +[ext_resource path="res://images/mota_tileset.tres" type="TileSet" id=2] +[ext_resource path="res://scenes/Stairs.tscn" type="PackedScene" id=3] +[ext_resource path="res://scenes/Monster.tscn" type="PackedScene" id=4] +[ext_resource path="res://scenes/Door.tscn" type="PackedScene" id=5] +[ext_resource path="res://scenes/Elixirs.tscn" type="PackedScene" id=6] +[ext_resource path="res://scenes/Key.tscn" type="PackedScene" id=7] + +[node name="Floor2" type="Node2D"] + +[node name="NavigationTileMap" type="TileMap" parent="."] +tile_set = ExtResource( 2 ) +cell_size = Vector2( 32, 32 ) +format = 1 +tile_data = PoolIntArray( 65541, 2, 0, 65542, 2, 0, 65543, 2, 0, 65544, 2, 0, 65545, 2, 0, 65546, 2, 0, 65547, 2, 0, 65548, 2, 0, 65549, 2, 0, 65550, 2, 0, 65551, 2, 0, 131077, 2, 0, 131078, 2, 0, 131081, 2, 0, 131082, 2, 0, 131083, 2, 0, 131084, 2, 0, 131085, 2, 0, 196613, 2, 0, 196619, 2, 0, 262149, 2, 0, 262151, 2, 0, 262152, 2, 0, 262154, 2, 0, 262155, 2, 0, 262156, 2, 0, 262158, 2, 0, 262159, 2, 0, 327685, 2, 0, 327687, 2, 0, 327688, 2, 0, 327689, 2, 0, 327690, 2, 0, 327691, 2, 0, 327692, 2, 0, 327693, 2, 0, 327694, 2, 0, 327695, 2, 0, 393221, 2, 0, 393226, 2, 0, 393227, 2, 0, 393228, 2, 0, 458757, 2, 0, 458758, 2, 0, 458759, 2, 0, 458760, 2, 0, 458762, 2, 0, 458763, 2, 0, 458764, 2, 0, 458766, 2, 0, 458767, 2, 0, 524293, 2, 0, 524295, 2, 0, 524296, 2, 0, 524297, 2, 0, 524298, 2, 0, 524299, 2, 0, 524300, 2, 0, 524301, 2, 0, 524302, 2, 0, 524303, 2, 0, 589829, 2, 0, 589834, 2, 0, 589835, 2, 0, 589836, 2, 0, 655365, 2, 0, 655367, 2, 0, 655368, 2, 0, 655370, 2, 0, 655371, 2, 0, 655372, 2, 0, 655374, 2, 0, 655375, 2, 0, 720901, 2, 0, 720903, 2, 0, 720904, 2, 0, 720905, 2, 0, 720906, 2, 0, 720907, 2, 0, 720908, 2, 0, 720909, 2, 0, 720910, 2, 0, 720911, 2, 0 ) +script = ExtResource( 1 ) + +[node name="Item" type="Node2D" parent="."] + +[node name="MonsterSprite" parent="Item" instance=ExtResource( 4 )] +position = Vector2( 336, 80 ) +animation = "blueGuard" + +[node name="MonsterSprite2" parent="Item" instance=ExtResource( 4 )] +position = Vector2( 400, 80 ) +animation = "blueGuard" + +[node name="KeySprite" parent="Item" instance=ExtResource( 7 )] +position = Vector2( 240, 176 ) + +[node name="KeySprite3" parent="Item" instance=ExtResource( 7 )] +position = Vector2( 272, 176 ) + +[node name="KeySprite2" parent="Item" instance=ExtResource( 7 )] +position = Vector2( 240, 144 ) + +[node name="DoorSprite" parent="Item" instance=ExtResource( 5 )] +position = Vector2( 304, 176 ) +region_rect = Rect2( 288, 480, 32, 32 ) +door_type = 3 + +[node name="ElixirsSprite" parent="Item" instance=ExtResource( 6 )] +position = Vector2( 240, 368 ) +region_rect = Rect2( 128, 416, 32, 32 ) +elixirs_color = 1 + +[node name="ElixirsSprite3" parent="Item" instance=ExtResource( 6 )] +position = Vector2( 240, 336 ) +region_rect = Rect2( 128, 416, 32, 32 ) +elixirs_color = 1 + +[node name="ElixirsSprite2" parent="Item" instance=ExtResource( 6 )] +position = Vector2( 272, 368 ) +region_rect = Rect2( 128, 416, 32, 32 ) +elixirs_color = 1 + +[node name="DoorSprite2" parent="Item" instance=ExtResource( 5 )] +position = Vector2( 304, 272 ) +region_rect = Rect2( 288, 480, 32, 32 ) +door_type = 3 +enabled = false + +[node name="DoorSprite8" parent="Item" instance=ExtResource( 5 )] +position = Vector2( 240, 48 ) +region_rect = Rect2( 224, 480, 32, 32 ) +door_type = 1 + +[node name="DoorSprite7" parent="Item" instance=ExtResource( 5 )] +position = Vector2( 208, 240 ) +region_rect = Rect2( 0, 512, 32, 32 ) +door_type = 4 +enabled = false + +[node name="DoorSprite3" parent="Item" instance=ExtResource( 5 )] +position = Vector2( 304, 368 ) +region_rect = Rect2( 288, 480, 32, 32 ) +door_type = 3 + +[node name="DoorSprite4" parent="Item" instance=ExtResource( 5 )] +position = Vector2( 432, 368 ) +region_rect = Rect2( 288, 480, 32, 32 ) +door_type = 3 + +[node name="DoorSprite5" parent="Item" instance=ExtResource( 5 )] +position = Vector2( 432, 272 ) +region_rect = Rect2( 288, 480, 32, 32 ) +door_type = 3 + +[node name="DoorSprite6" parent="Item" instance=ExtResource( 5 )] +position = Vector2( 432, 176 ) +region_rect = Rect2( 288, 480, 32, 32 ) +door_type = 3 + +[node name="StairsSprite" parent="Item" instance=ExtResource( 3 )] +region_rect = Rect2( 64, 512, 32, 32 ) +stairs_type = 1 +player_init_position = Vector2( 176, 80 ) + +[node name="StairsSprite2" parent="Item" instance=ExtResource( 3 )] +position = Vector2( 176, 368 ) +player_init_position = Vector2( 176, 336 ) diff --git a/scripts/AffectAudioPlayer.gd b/scripts/AffectAudioPlayer.gd index 7a462d0..03e757b 100644 --- a/scripts/AffectAudioPlayer.gd +++ b/scripts/AffectAudioPlayer.gd @@ -27,3 +27,10 @@ func play_door(): func play_item(): stream = item play() + +func play_attack(): + if playing: + return + pitch_scale = 1.5 + stream = attack + play() diff --git a/scripts/DoorSprite.gd b/scripts/DoorSprite.gd index f3b7e34..cd6479a 100644 --- a/scripts/DoorSprite.gd +++ b/scripts/DoorSprite.gd @@ -4,10 +4,13 @@ extends Sprite class_name DoorSprite # 门类型 -enum DoorType { Yellow,Blue,Red,Iron } +enum DoorType { Yellow,Blue,Red,Iron,Wall } export(DoorType) var door_type setget set_door_type +# 是否被禁用 +export var enabled : bool = true + # 默认数据初始化 func _init(): self.texture = load("res://images/mota.png") @@ -24,3 +27,5 @@ func set_door_type(value): region_rect = Rect2(256,480,32,32) DoorType.Iron: region_rect = Rect2(288,480,32,32) + DoorType.Wall: + region_rect = Rect2(0,512,32,32) diff --git a/scripts/DoorStaticBody2D.gd b/scripts/DoorStaticBody2D.gd index 0485b1f..4d3dd3b 100644 --- a/scripts/DoorStaticBody2D.gd +++ b/scripts/DoorStaticBody2D.gd @@ -5,6 +5,8 @@ class_name DoorStaticBody2D onready var door_sprite : DoorSprite = get_parent() func on_player_touched(player): + if not door_sprite.enabled: + return match door_sprite.door_type: DoorSprite.DoorType.Yellow: if GameArchiveManager.player_info.yellow_key <= 0: diff --git a/scripts/GameArchiveManager.gd b/scripts/GameArchiveManager.gd index eeb58a5..8076f82 100644 --- a/scripts/GameArchiveManager.gd +++ b/scripts/GameArchiveManager.gd @@ -18,10 +18,6 @@ var player_info = { "def" : 10, #默认金钱 "money" : 0, - # 英雄等级 - "level" : 1, - # 英雄经验 - "experience" : 0, # 当前楼层 "now_floor" : 1, # 去过的最大楼层 @@ -91,16 +87,30 @@ func update_player_position() -> void: # 根据索引加载存档 func load_by_index(index:int) -> void: var archive = get_archives()[index] - self.player_info = archive.player_info #加载楼层 - GameFloorManager.load_by_floor(self.player_info.now_floor) + var next_floor = GameFloorManager.load_by_floor(archive.player_info.now_floor) #设置人物位置 + self.player_info = archive.player_info + GameFloorManager.instance_player(self.player_info.position,next_floor) var player = get_player() player.position = self.player_info.position - #更新楼层UI显示 + #更新UI显示 update_floor_view() update_hp_view() update_key_view() + update_atk_view() + update_def_view() + update_money_view() + +func update_money_view(): + $"/root/Main/UI/MoneySprite/MoneyBackground/MoneyLabel".text = player_info.money as String + +func update_def_view(): + $"/root/Main/UI/DefSprite/DefBackground/DefLabel".text = player_info.def as String + +# 更新共计界面视图 +func update_atk_view(): + $"/root/Main/UI/AtkSprite/AtkBackground/AtkLabel".text = player_info.atk as String # 更新楼层UI显示 func update_floor_view(): diff --git a/scripts/GameFloorManager.gd b/scripts/GameFloorManager.gd index 3ba44e4..f78d5c4 100644 --- a/scripts/GameFloorManager.gd +++ b/scripts/GameFloorManager.gd @@ -3,13 +3,48 @@ extends Node const floor_file_path = "res://scenes/floors/Floor" # 加载指定楼层 -func load_by_floor(f:int) -> void: +func load_by_floor(f:int) -> Node2D: var root = get_tree().get_root().get_node("Main") var next_floor = load("%s%s%s" % [floor_file_path,f,".tscn"]).instance() as Node2D var used_items = GameArchiveManager.get_used_item(f) - root.get_node("Floor%s" % f).free() + root.get_node("Floor%s" % GameArchiveManager.player_info.now_floor).free() root.add_child(next_floor) for used_item in used_items: var node = next_floor.get_node(used_item) if node != null: node.free() + GameArchiveManager.player_info.now_floor = f + return next_floor + +# 加载上一层楼层 +func load_added_floor(): + var f = GameArchiveManager.player_info.now_floor + if f + 1 > 50: + return + var next_floor = load_by_floor(f + 1) + var stairs = get_tree().get_nodes_in_group("stairs") + if stairs.empty(): + return + for s in stairs: + if s.stairs_type == StairsSprite.StairsType.Down: + instance_player(s.player_init_position,next_floor) + return + +# 加载下一次楼层 +func load_reduced_floor(): + var f = GameArchiveManager.player_info.now_floor + if f - 1 < 0: + return + var next_floor = load_by_floor(f - 1) + var stairs = get_tree().get_nodes_in_group("stairs") + if stairs.empty(): + return + for s in stairs: + if s.stairs_type == StairsSprite.StairsType.Up: + instance_player(s.player_init_position,next_floor) + return + +func instance_player(position:Vector2,next_floor:Node2D) -> void: + var player = load("res://scenes/Player.tscn").instance() + player.position = position + next_floor.add_child(player) diff --git a/scripts/GameInit.gd b/scripts/GameInit.gd new file mode 100644 index 0000000..a907245 --- /dev/null +++ b/scripts/GameInit.gd @@ -0,0 +1,5 @@ +extends Node2D + +func _ready(): + GameFloorManager.instance_player(Vector2(336,368),$"/root/Main/Floor1") + pass diff --git a/scripts/GemSprite.gd b/scripts/GemSprite.gd new file mode 100644 index 0000000..3681edc --- /dev/null +++ b/scripts/GemSprite.gd @@ -0,0 +1,36 @@ +tool +extends Sprite + +class_name GemSprite + +# 宝石颜色 +enum GemColor { Blue,Red } + +export(GemColor) var gem_color setget set_gem_color + +# 上升属性值 +export var up_value : int = 1 + +func _init(): + self.texture = load("res://images/mota.png") + self.region_enabled = true + +func set_gem_color(value): + gem_color = value + match value: + GemColor.Blue: + region_rect = Rect2(128,384,32,32) + GemColor.Red: + region_rect = Rect2(96,384,32,32) + +func _on_Area2D_body_entered(body): + match gem_color: + GemColor.Blue: + GameArchiveManager.player_info.def += up_value + GameArchiveManager.update_def_view() + GemColor.Red: + GameArchiveManager.player_info.atk += up_value + GameArchiveManager.update_atk_view() + AffectAudioPlayer.play_item() + queue_free() + GameArchiveManager.add_used_item(get_path()) diff --git a/scripts/KeySprite.gd b/scripts/KeySprite.gd index 59956c7..9b7fb37 100644 --- a/scripts/KeySprite.gd +++ b/scripts/KeySprite.gd @@ -31,16 +31,13 @@ func _on_Area2D_body_entered(body): match key_type: KeyType.Yellow: GameArchiveManager.player_info.yellow_key += 1 - $"/root/Main/UI/KeyBackground/YellowKeyCountLabel".text = GameArchiveManager.player_info.yellow_key as String KeyType.Blue: GameArchiveManager.player_info.blue_key += 1 - $"/root/Main/UI/KeyBackground/BlueKeyCountLabel".text = GameArchiveManager.player_info.blue_key as String KeyType.Red: GameArchiveManager.player_info.red_key += 1 - $"/root/Main/UI/KeyBackground/RedKeyCountLabel".text = GameArchiveManager.player_info.red_key as String KeyType.Green: GameArchiveManager.player_info.green_key += 1 - $"/root/Main/UI/KeyBackground/GreenKeyCountLabel".text = GameArchiveManager.player_info.green_key as String + GameArchiveManager.update_key_view() queue_free() GameArchiveManager.add_used_item(get_path()) AffectAudioPlayer.play_item() diff --git a/scripts/MonsterSprite.gd b/scripts/MonsterSprite.gd index 3dc7329..2ced912 100644 --- a/scripts/MonsterSprite.gd +++ b/scripts/MonsterSprite.gd @@ -15,12 +15,17 @@ func _on_Area2D_body_entered(body): # 打斗动画播放完成回调 func _on_AtkSprite_animation_finished(): + AffectAudioPlayer.play_attack() var atk_sprite =$AtkSprite atk_sprite.playing = false var player_info = GameArchiveManager.player_info monster_info.hp -= get_hurt(player_info.atk - monster_info.def) if monster_info.hp <= 0: - dead() + #怪物死亡计算 + GameArchiveManager.add_used_item(get_path()) + player_info.money += monster_info.money + GameArchiveManager.update_money_view() + queue_free() return player_info.hp -= get_hurt(monster_info.atk - player_info.def) GameArchiveManager.update_hp_view() @@ -29,10 +34,6 @@ func _on_AtkSprite_animation_finished(): else: atk_sprite.playing = true -func dead(): - GameArchiveManager.add_used_item(get_path()) - queue_free() - # 计算伤害 func get_hurt(hurt:int) -> int: if hurt > 0: diff --git a/scripts/StairsSprite.gd b/scripts/StairsSprite.gd new file mode 100644 index 0000000..140c6d9 --- /dev/null +++ b/scripts/StairsSprite.gd @@ -0,0 +1,30 @@ +tool +extends Sprite + +# 楼梯 +class_name StairsSprite + +enum StairsType { Up,Down } + +export(StairsType) var stairs_type = StairsType.Up setget set_stairs_type + +export var player_init_position : Vector2 + +func _init(): + self.texture = load("res://images/mota.png") + self.region_enabled = true + +func set_stairs_type(value): + stairs_type = value + match value: + StairsType.Up: + region_rect = Rect2(96,512,32,32) + StairsType.Down: + region_rect = Rect2(64,512,32,32) + +func _on_Area2D_body_entered(body): + if stairs_type == StairsType.Up: + GameFloorManager.call_deferred("load_added_floor") + if stairs_type == StairsType.Down: + GameFloorManager.call_deferred("load_reduced_floor") +