diff --git a/DungeonShooting_Godot/prefab/ui/RoomMap.tscn b/DungeonShooting_Godot/prefab/ui/RoomMap.tscn index 35e273b..3972340 100644 --- a/DungeonShooting_Godot/prefab/ui/RoomMap.tscn +++ b/DungeonShooting_Godot/prefab/ui/RoomMap.tscn @@ -29,10 +29,10 @@ anchors_preset = 1 anchor_left = 1.0 anchor_right = 1.0 -offset_left = -257.0 +offset_left = -275.0 offset_top = 20.0 -offset_right = -198.0 -offset_bottom = 79.0 +offset_right = -211.0 +offset_bottom = 84.0 grow_horizontal = 0 scale = Vector2(4, 4) texture = ExtResource("2_m52os") @@ -57,8 +57,9 @@ expand_mode = 1 [node name="Root" type="Node2D" parent="MapBar/DrawContainer"] +scale = Vector2(1.5, 1.5) [node name="Mark" type="Sprite2D" parent="MapBar/DrawContainer"] -position = Vector2(28, 28) +position = Vector2(32, 32) scale = Vector2(0.5, 0.5) texture = ExtResource("4_6wquw") diff --git a/DungeonShooting_Godot/prefab/weapon/Weapon0008.tscn b/DungeonShooting_Godot/prefab/weapon/Weapon0008.tscn index afa2bfc..9f257dd 100644 --- a/DungeonShooting_Godot/prefab/weapon/Weapon0008.tscn +++ b/DungeonShooting_Godot/prefab/weapon/Weapon0008.tscn @@ -3,6 +3,7 @@ [ext_resource type="Script" path="res://src/game/activity/weapon/gun/Gun.cs" id="1_l63x2"] [ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="1_mhoa7"] [ext_resource type="SpriteFrames" uid="uid://b2wpy40adyjs6" path="res://resource/spriteFrames/weapon/Weapon0008.tres" id="2_s0xbw"] +[ext_resource type="Animation" uid="uid://v3dltmdstqad" path="res://resource/animation/weapon/Weapon_floodlight.res" id="4_p833u"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_cbiyh"] resource_local_to_scene = true @@ -16,7 +17,7 @@ shader_parameter/outline_use_blend = true shader_parameter/grey = 0.0 -[sub_resource type="ShaderMaterial" id="ShaderMaterial_o36tv"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_6odx4"] resource_local_to_scene = true shader = ExtResource("1_mhoa7") shader_parameter/blend = Color(1, 1, 1, 1) @@ -36,19 +37,19 @@ tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true -tracks/0/path = NodePath("AnimatedSprite:material:shader_parameter/schedule") +tracks/0/path = NodePath(".:rotation") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 0, -"values": [0] +"values": [0.0] } tracks/1/type = "value" tracks/1/imported = false tracks/1/enabled = true -tracks/1/path = NodePath(".:rotation") +tracks/1/path = NodePath("AnimatedSprite:material:shader_parameter/schedule") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { @@ -58,23 +59,6 @@ "values": [0.0] } -[sub_resource type="Animation" id="Animation_3piau"] -resource_name = "floodlight" -length = 3.0 -loop_mode = 1 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("AnimatedSprite:material:shader_parameter/schedule") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0, 2.3, 2.6, 2.7, 3), -"transitions": PackedFloat32Array(1, 1, 1, 1, 1), -"update": 0, -"values": [0, 0, 0.5, 0.5, 0] -} - [sub_resource type="Animation" id="Animation_8xqs8"] resource_name = "reloading" length = 1.3 @@ -94,7 +78,7 @@ [sub_resource type="AnimationLibrary" id="AnimationLibrary_trkjd"] _data = { "RESET": SubResource("Animation_x136i"), -"floodlight": SubResource("Animation_3piau"), +"floodlight": ExtResource("4_p833u"), "reloading": SubResource("Animation_8xqs8") } @@ -115,7 +99,7 @@ [node name="AnimatedSprite" type="AnimatedSprite2D" parent="."] modulate = Color(1.9, 1.9, 1.9, 1) -material = SubResource("ShaderMaterial_o36tv") +material = SubResource("ShaderMaterial_6odx4") sprite_frames = ExtResource("2_s0xbw") animation = &"reloading" diff --git a/DungeonShooting_Godot/prefab/weapon/Weapon0009.tscn b/DungeonShooting_Godot/prefab/weapon/Weapon0009.tscn index 4d99a15..75c740e 100644 --- a/DungeonShooting_Godot/prefab/weapon/Weapon0009.tscn +++ b/DungeonShooting_Godot/prefab/weapon/Weapon0009.tscn @@ -3,6 +3,7 @@ [ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="1_6fbtx"] [ext_resource type="Script" path="res://src/game/activity/weapon/gun/Gun.cs" id="1_eprgt"] [ext_resource type="SpriteFrames" uid="uid://c0xwj3kpk02ua" path="res://resource/spriteFrames/weapon/Weapon0009.tres" id="2_4kxpd"] +[ext_resource type="Animation" uid="uid://v3dltmdstqad" path="res://resource/animation/weapon/Weapon_floodlight.res" id="4_o2wqt"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_cbiyh"] resource_local_to_scene = true @@ -36,67 +37,50 @@ tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true -tracks/0/path = NodePath("AnimatedSprite:material:shader_parameter/schedule") +tracks/0/path = NodePath(".:rotation") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 0, -"values": [0] +"values": [0.0] } tracks/1/type = "value" tracks/1/imported = false tracks/1/enabled = true -tracks/1/path = NodePath(".:rotation") +tracks/1/path = NodePath("AnimatedSprite:animation") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), -"update": 0, -"values": [0.0] +"update": 1, +"values": [&"reloading_frame"] } tracks/2/type = "value" tracks/2/imported = false tracks/2/enabled = true -tracks/2/path = NodePath("AnimatedSprite:animation") +tracks/2/path = NodePath("AnimatedSprite:frame") tracks/2/interp = 1 tracks/2/loop_wrap = true tracks/2/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 1, -"values": [&"reloading_frame"] +"values": [0] } tracks/3/type = "value" tracks/3/imported = false tracks/3/enabled = true -tracks/3/path = NodePath("AnimatedSprite:frame") +tracks/3/path = NodePath("AnimatedSprite:material:shader_parameter/schedule") tracks/3/interp = 1 tracks/3/loop_wrap = true tracks/3/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), -"update": 1, -"values": [0] -} - -[sub_resource type="Animation" id="Animation_3piau"] -resource_name = "floodlight" -length = 3.0 -loop_mode = 1 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("AnimatedSprite:material:shader_parameter/schedule") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0, 2.3, 2.6, 2.7, 3), -"transitions": PackedFloat32Array(1, 1, 1, 1, 1), "update": 0, -"values": [0, 0, 0.5, 0.5, 0] +"values": [0.0] } [sub_resource type="Animation" id="Animation_juv2q"] @@ -143,7 +127,7 @@ [sub_resource type="AnimationLibrary" id="AnimationLibrary_trkjd"] _data = { "RESET": SubResource("Animation_x136i"), -"floodlight": SubResource("Animation_3piau"), +"floodlight": ExtResource("4_o2wqt"), "reloading": SubResource("Animation_juv2q") } diff --git a/DungeonShooting_Godot/prefab/weapon/WeaponTemplate.tscn b/DungeonShooting_Godot/prefab/weapon/WeaponTemplate.tscn index de4ac87..1de1148 100644 --- a/DungeonShooting_Godot/prefab/weapon/WeaponTemplate.tscn +++ b/DungeonShooting_Godot/prefab/weapon/WeaponTemplate.tscn @@ -1,5 +1,7 @@ [gd_scene load_steps=4 format=3 uid="uid://cxltmhhp4rbyk"] +[ext_resource type="Animation" uid="uid://v3dltmdstqad" path="res://resource/animation/weapon/Weapon_floodlight.res" id="1_eorlf"] + [sub_resource type="Animation" id="Animation_x136i"] length = 0.001 tracks/0/type = "value" @@ -15,27 +17,10 @@ "values": [0.0] } -[sub_resource type="Animation" id="Animation_1y7bx"] -resource_name = "floodlight" -length = 3.0 -loop_mode = 1 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("AnimatedSprite:material:shader_parameter/schedule") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0, 2.3, 2.6, 2.7, 3), -"transitions": PackedFloat32Array(1, 1, 1, 1, 1), -"update": 0, -"values": [0.0, 0.0, 0.8, 0.8, 0.0] -} - [sub_resource type="AnimationLibrary" id="AnimationLibrary_trkjd"] _data = { "RESET": SubResource("Animation_x136i"), -"floodlight": SubResource("Animation_1y7bx") +"floodlight": ExtResource("1_eorlf") } [node name="WeaponTemplate" type="CharacterBody2D"] diff --git a/DungeonShooting_Godot/resource/animation/weapon/Weapon_floodlight.res b/DungeonShooting_Godot/resource/animation/weapon/Weapon_floodlight.res new file mode 100644 index 0000000..494a4f8 --- /dev/null +++ b/DungeonShooting_Godot/resource/animation/weapon/Weapon_floodlight.res Binary files differ diff --git a/DungeonShooting_Godot/src/game/ui/roomMap/RoomMapPanel.cs b/DungeonShooting_Godot/src/game/ui/roomMap/RoomMapPanel.cs index 46781e0..ad63085 100644 --- a/DungeonShooting_Godot/src/game/ui/roomMap/RoomMapPanel.cs +++ b/DungeonShooting_Godot/src/game/ui/roomMap/RoomMapPanel.cs @@ -8,7 +8,7 @@ { private EventFactory _factory = EventManager.CreateEventFactory(); private List _needRefresh = new List(); - private List _enemyList = new List(); + private List _enemySpriteList = new List(); private Stack _spriteStack = new Stack(); public override void OnCreateUi() @@ -41,11 +41,58 @@ //更新敌人位置 if (World.Current != null) { - foreach (var enemy in World.Current.Enemy_InstanceList) + var enemyList = World.Current.Enemy_InstanceList; + if (enemyList.Count == 0) //没有敌人 { - if (!enemy.IsDestroyed && !enemy.IsDie) + foreach (var sprite in _enemySpriteList) { - + S_Root.RemoveChild(sprite); + _spriteStack.Push(sprite); + } + _enemySpriteList.Clear(); + } + else //更新位置 + { + var count = 0; //绘制数量 + for (var i = 0; i < enemyList.Count; i++) + { + var enemy = enemyList[i]; + if (!enemy.IsDestroyed && !enemy.IsDie && enemy.AffiliationArea != null && enemy.AffiliationArea.RoomInfo.RoomFogMask.IsExplored) + { + count++; + Sprite2D sprite; + if (i >= _enemySpriteList.Count) + { + if (_spriteStack.Count > 0) + { + sprite = _spriteStack.Pop(); + } + else + { + sprite = new Sprite2D(); + sprite.Texture = ResourceManager.LoadTexture2D(ResourcePath.resource_sprite_ui_commonIcon_Block_png); + sprite.Modulate = new Color(1, 0, 0); + } + _enemySpriteList.Add(sprite); + S_Root.AddChild(sprite); + } + else + { + sprite = _enemySpriteList[i]; + } + //更新标记位置 + sprite.Position = enemy.Position / 16; + } + } + + //回收多余的标记 + while (_enemySpriteList.Count > count) + { + var index = _enemySpriteList.Count - 1; + var sprite = _enemySpriteList[index]; + S_Root.RemoveChild(sprite); + _spriteStack.Push(sprite); + _enemySpriteList.RemoveAt(index); } } }