diff --git a/DungeonShooting_Godot/src/framework/map/DungeonRoomTemplate.cs b/DungeonShooting_Godot/src/framework/map/DungeonRoomTemplate.cs index 36cde46..649704a 100644 --- a/DungeonShooting_Godot/src/framework/map/DungeonRoomTemplate.cs +++ b/DungeonShooting_Godot/src/framework/map/DungeonRoomTemplate.cs @@ -27,7 +27,7 @@ /// /// 是否启用编辑模式 /// - [Export(PropertyHint.None, "是否启用编辑模式")] + [Export] public bool EnableEdit = false; #if TOOLS diff --git a/DungeonShooting_Godot/src/framework/map/RoomInfo.cs b/DungeonShooting_Godot/src/framework/map/RoomInfo.cs index c96b5f0..a0437b1 100644 --- a/DungeonShooting_Godot/src/framework/map/RoomInfo.cs +++ b/DungeonShooting_Godot/src/framework/map/RoomInfo.cs @@ -64,6 +64,7 @@ public bool IsSeclusion { get; private set; } = false; private bool _waveStart = false; + private int _currWaveIndex = 0; private int _currWaveNumber = 0; /// @@ -124,7 +125,7 @@ /// public void BeReady() { - //没有标记, 不需要关门 + //没有标记, 啥都不要做 if (ActivityMarks.Count == 0) { return; @@ -149,13 +150,15 @@ /// /// 执行下一轮标记 /// - public void NextWave() + private void NextWave() { if (!_waveStart) { - + _waveStart = true; + _currWaveIndex = 0; + _currWaveNumber = ActivityMarks[0].WaveNumber; } - + //根据标记生成对象 foreach (var mark in ActivityMarks) { diff --git a/DungeonShooting_Godot/src/framework/map/mark/ActivityMark.cs b/DungeonShooting_Godot/src/framework/map/mark/ActivityMark.cs index d41dc9f..0ea9181 100644 --- a/DungeonShooting_Godot/src/framework/map/mark/ActivityMark.cs +++ b/DungeonShooting_Godot/src/framework/map/mark/ActivityMark.cs @@ -43,6 +43,11 @@ /// protected Color DrawColor = new Color(0.4F, 0.56078434F, 0.8784314F); + //是否已经开始 + private bool _isStart = false; + private float _timer = 0; + private RoomInfo _tempRoom; + /// /// 获取物体Id /// @@ -51,18 +56,50 @@ return ActivityIdPrefix.GetNameByPrefixType(Type) + ItemId; } + public override void _Process(double delta) + { + if (_isStart && DelayTime > 0) + { + _timer += (float)delta; + if (_timer >= DelayTime) + { + Doing(_tempRoom); + _tempRoom = null; + _isStart = false; + } + } + } + /// /// 标记准备好了 /// public void BeReady(RoomInfo roomInfo) { - OnBeReady(roomInfo); + _isStart = true; + if (DelayTime <= 0) + { + Doing(roomInfo); + _isStart = false; + } + else + { + _timer = 0; + _tempRoom = roomInfo; + } + } + + /// + /// 是否已经结束 + /// + public bool IsOver() + { + return !_isStart; } /// /// 调用该函数表示该标记可以生成物体了, 使用标记创建实例必须调用 CreateInstance(id) /// - public virtual void OnBeReady(RoomInfo roomInfo) + public virtual void Doing(RoomInfo roomInfo) { CreateInstance(GetItemId()); Visible = false; diff --git a/DungeonShooting_Godot/src/framework/map/mark/EnemyMark.cs b/DungeonShooting_Godot/src/framework/map/mark/EnemyMark.cs index 6175083..10309cd 100644 --- a/DungeonShooting_Godot/src/framework/map/mark/EnemyMark.cs +++ b/DungeonShooting_Godot/src/framework/map/mark/EnemyMark.cs @@ -55,7 +55,7 @@ Layer = RoomLayerEnum.YSortLayer; } - public override void OnBeReady(RoomInfo roomInfo) + public override void Doing(RoomInfo roomInfo) { var pos = GlobalPosition; //创建敌人 diff --git a/DungeonShooting_Godot/src/framework/map/mark/WeaponMark.cs b/DungeonShooting_Godot/src/framework/map/mark/WeaponMark.cs index 4bd95da..915b6c1 100644 --- a/DungeonShooting_Godot/src/framework/map/mark/WeaponMark.cs +++ b/DungeonShooting_Godot/src/framework/map/mark/WeaponMark.cs @@ -26,7 +26,7 @@ Layer = RoomLayerEnum.NormalLayer; } - public override void OnBeReady(RoomInfo roomInfo) + public override void Doing(RoomInfo roomInfo) { //创建武器 var instance = ActivityObject.Create(GetItemId());