Merge branch 'main' of http://10.27.16.144:3000/kawagiri/TH1
This commit is contained in:
commit
6b8eb03283
File diff suppressed because it is too large
Load Diff
@ -24,7 +24,7 @@ namespace NodeCanvas.Tasks.Actions
|
||||
{
|
||||
get { return string.Format($"评分策略为 {CalculateTypes[0]}"); }
|
||||
}
|
||||
|
||||
|
||||
protected override void OnExecute()
|
||||
{
|
||||
// 直接从Blackboard获取AICalculatorData
|
||||
3
My project/Assets/Scripts/FSMNodeCanvas.meta
Normal file
3
My project/Assets/Scripts/FSMNodeCanvas.meta
Normal file
@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 46072d5970f6458b94306b0607d49a88
|
||||
timeCreated: 1751359768
|
||||
3
My project/Assets/Scripts/FSMNodeCanvas/Action.meta
Normal file
3
My project/Assets/Scripts/FSMNodeCanvas/Action.meta
Normal file
@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4e8d7d5a710d46259e05462669ed730b
|
||||
timeCreated: 1751359826
|
||||
@ -0,0 +1,69 @@
|
||||
/*
|
||||
* @Author: 白哉
|
||||
* @Description:
|
||||
* @Date: 2025年07月01日 星期二 17:07:13
|
||||
* @Modify:
|
||||
*/
|
||||
|
||||
|
||||
using Logic.Timeline;
|
||||
using NodeCanvas.Framework;
|
||||
using ParadoxNotion.Design;
|
||||
using UnityEngine;
|
||||
|
||||
|
||||
namespace FSMNodeCanvas.Action
|
||||
{
|
||||
[Category("FSMAction")]
|
||||
public class FSMAttackAction : ActionTask
|
||||
{
|
||||
public float Duration;
|
||||
private float _startTime;
|
||||
|
||||
|
||||
protected override string info
|
||||
{
|
||||
get { return string.Format($"原地攻击"); }
|
||||
}
|
||||
|
||||
protected override void OnUpdate()
|
||||
{
|
||||
if (Time.time > _startTime + Duration)
|
||||
{
|
||||
var data = blackboard.GetVariable<FSMData>("Data");
|
||||
if (data?.value == null)
|
||||
{
|
||||
EndAction(true);
|
||||
return;
|
||||
}
|
||||
|
||||
EndAction(true);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnExecute()
|
||||
{
|
||||
_startTime = Time.time;
|
||||
var data = blackboard.GetVariable<FSMData>("Data");
|
||||
if (data?.value == null) return;
|
||||
|
||||
data.value.OriginPlayer.TurnNoAttack = 0;
|
||||
data.value.OriginPlayer.CurAttackPlayers.Add(data.value.TargetPlayer.Id);
|
||||
data.value.TargetPlayer.CurAttackPlayers.Add(data.value.OriginPlayer.Id);
|
||||
|
||||
//设置unit1 attackendermark和相关参数
|
||||
data.value.Origin.AttackRenderMark = true;
|
||||
data.value.Origin.AttackRenderMarkAttackAnimType = data.value.Origin.GetAttackRange() switch
|
||||
{
|
||||
1 => AttackAnimType.Melee, 2 => AttackAnimType.Arrow, 3 => AttackAnimType.Bomb,
|
||||
_ => AttackAnimType.None
|
||||
};
|
||||
data.value.Origin.AttackRenderMarkTargetPos = Table.Instance.GridToWorld(data.value.TargetGrid,"isUnit");
|
||||
data.value.Origin.AttackRenderMarkNeedBack = true;
|
||||
|
||||
|
||||
// 播动画
|
||||
// 移动逻辑
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b67f4cc92e5342f0930b5f6e3b6b584e
|
||||
timeCreated: 1751367674
|
||||
@ -0,0 +1,40 @@
|
||||
/*
|
||||
* @Author: 白哉
|
||||
* @Description:
|
||||
* @Date: 2025年07月01日 星期二 17:07:13
|
||||
* @Modify:
|
||||
*/
|
||||
|
||||
|
||||
using NodeCanvas.Framework;
|
||||
using ParadoxNotion.Design;
|
||||
using UnityEngine;
|
||||
|
||||
|
||||
namespace FSMNodeCanvas.Action
|
||||
{
|
||||
[Category("FSMAction")]
|
||||
public class FSMAttackBackAction : ActionTask
|
||||
{
|
||||
public float Duration;
|
||||
private float _startTime;
|
||||
|
||||
|
||||
protected override string info
|
||||
{
|
||||
get { return string.Format($"移动攻击"); }
|
||||
}
|
||||
|
||||
protected override void OnUpdate()
|
||||
{
|
||||
if (Time.time > _startTime + Duration) EndAction(true);
|
||||
}
|
||||
|
||||
protected override void OnExecute()
|
||||
{
|
||||
_startTime = Time.time;
|
||||
// 播动画
|
||||
// 移动逻辑
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bfb8c3bd250c4e1fa0be358df1478fe0
|
||||
timeCreated: 1751367745
|
||||
@ -0,0 +1,64 @@
|
||||
/*
|
||||
* @Author: 白哉
|
||||
* @Description:
|
||||
* @Date: 2025年07月01日 星期二 17:07:13
|
||||
* @Modify:
|
||||
*/
|
||||
|
||||
|
||||
using Logic;
|
||||
using Logic.Timeline;
|
||||
using NodeCanvas.Framework;
|
||||
using ParadoxNotion.Design;
|
||||
using UnityEngine;
|
||||
|
||||
|
||||
namespace FSMNodeCanvas.Action
|
||||
{
|
||||
[Category("FSMAction")]
|
||||
public class FSMMoveAttackAction : ActionTask
|
||||
{
|
||||
public float Duration;
|
||||
private float _startTime;
|
||||
|
||||
|
||||
protected override string info
|
||||
{
|
||||
get { return string.Format($"移动攻击"); }
|
||||
}
|
||||
|
||||
protected override void OnUpdate()
|
||||
{
|
||||
if (Time.time > _startTime + Duration)
|
||||
{
|
||||
var data = blackboard.GetVariable<FSMData>("Data");
|
||||
if (data?.value == null) return;
|
||||
|
||||
data.value.OriginPlayer.TurnNoAttack = 0;
|
||||
data.value.OriginPlayer.CurAttackPlayers.Add(data.value.TargetPlayer.Id);
|
||||
data.value.TargetPlayer.CurAttackPlayers.Add(data.value.OriginPlayer.Id);
|
||||
EndAction(true);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnExecute()
|
||||
{
|
||||
_startTime = Time.time;
|
||||
var data = blackboard.GetVariable<FSMData>("Data");
|
||||
if (data?.value == null) return;
|
||||
|
||||
//设置unit1 attackendermark和相关参数
|
||||
data.value.Origin.AttackRenderMark = true;
|
||||
data.value.Origin.AttackRenderMarkAttackAnimType = data.value.Origin.GetAttackRange() switch
|
||||
{
|
||||
1 => AttackAnimType.Melee, 2 => AttackAnimType.Arrow, 3 => AttackAnimType.Bomb,
|
||||
_ => AttackAnimType.None
|
||||
};
|
||||
data.value.Origin.AttackRenderMarkTargetPos = Table.Instance.GridToWorld(data.value.TargetGrid,"isUnit");
|
||||
data.value.Origin.AttackRenderMarkNeedBack = true;
|
||||
|
||||
// 播动画
|
||||
// 移动逻辑
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 655c5e08e0b74257a8bbe8c1667e9b3d
|
||||
timeCreated: 1751362805
|
||||
@ -0,0 +1,39 @@
|
||||
/*
|
||||
* @Author: 白哉
|
||||
* @Description:
|
||||
* @Date: 2025年07月01日 星期二 17:07:13
|
||||
* @Modify:
|
||||
*/
|
||||
|
||||
|
||||
using NodeCanvas.Framework;
|
||||
using ParadoxNotion.Design;
|
||||
using UnityEngine;
|
||||
|
||||
|
||||
namespace FSMNodeCanvas.Action
|
||||
{
|
||||
[Category("FSMAction")]
|
||||
public class FSMMoveAction : ActionTask
|
||||
{
|
||||
public float Duration;
|
||||
private float _startTime;
|
||||
|
||||
protected override string info
|
||||
{
|
||||
get { return string.Format($"移动击杀"); }
|
||||
}
|
||||
|
||||
protected override void OnUpdate()
|
||||
{
|
||||
if (Time.time > _startTime + Duration) EndAction(true);
|
||||
}
|
||||
|
||||
protected override void OnExecute()
|
||||
{
|
||||
_startTime = Time.time;
|
||||
// 播动画
|
||||
// 移动逻辑
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9aec0b4eb4d24d63a8253fdd5a0613ea
|
||||
timeCreated: 1751361309
|
||||
3
My project/Assets/Scripts/FSMNodeCanvas/Condition.meta
Normal file
3
My project/Assets/Scripts/FSMNodeCanvas/Condition.meta
Normal file
@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 84a571f336c74537bccba9bad6f2ea5b
|
||||
timeCreated: 1751359812
|
||||
@ -0,0 +1,34 @@
|
||||
/*
|
||||
* @Author: 白哉
|
||||
* @Description:
|
||||
* @Date: 2025年07月01日 星期二 17:07:13
|
||||
* @Modify:
|
||||
*/
|
||||
|
||||
|
||||
using Logic.Timeline;
|
||||
using NodeCanvas.Framework;
|
||||
using ParadoxNotion.Design;
|
||||
|
||||
|
||||
namespace FSMNodeCanvas.Action
|
||||
{
|
||||
[Category("FSMCondition")]
|
||||
public class FSMCanKillCondition : ConditionTask
|
||||
{
|
||||
protected override string info {
|
||||
get { return "能否杀死"; }
|
||||
}
|
||||
|
||||
protected override bool OnCheck()
|
||||
{
|
||||
var data = blackboard.GetVariable<FSMData>("Data");
|
||||
if (data?.value == null) return false;
|
||||
|
||||
int dmg = Table.Instance.CalcDamage(data.value.Map, data.value.Origin, data.value.Target);
|
||||
if (dmg < data.value.Target.Health) return false;
|
||||
if (!data.value.Target.CanBeKilled(data.value.Map)) return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 00906759e0744bcab9330d63a5da7517
|
||||
timeCreated: 1751362857
|
||||
3
My project/Assets/Scripts/FSMNodeCanvas/Manager.meta
Normal file
3
My project/Assets/Scripts/FSMNodeCanvas/Manager.meta
Normal file
@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dd2d84be244e4bd0bd57eaf408fd62cc
|
||||
timeCreated: 1751359789
|
||||
27
My project/Assets/Scripts/FSMNodeCanvas/Manager/FSMData.cs
Normal file
27
My project/Assets/Scripts/FSMNodeCanvas/Manager/FSMData.cs
Normal file
@ -0,0 +1,27 @@
|
||||
/*
|
||||
* @Author: 白哉
|
||||
* @Description:
|
||||
* @Date: 2025年07月01日 星期二 16:07:30
|
||||
* @Modify:
|
||||
*/
|
||||
|
||||
|
||||
using RuntimeData;
|
||||
|
||||
|
||||
namespace Logic.Timeline
|
||||
{
|
||||
public class FSMData
|
||||
{
|
||||
// 核心数据
|
||||
public MapData Map;
|
||||
public PlayerData OriginPlayer;
|
||||
public PlayerData TargetPlayer;
|
||||
public UnitData Origin;
|
||||
public UnitData Target;
|
||||
public GridData OriginGrid;
|
||||
public GridData TargetGrid;
|
||||
|
||||
public bool IsFinished;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 14eaba056ed143f78052869973509186
|
||||
timeCreated: 1751360306
|
||||
@ -0,0 +1,50 @@
|
||||
/*
|
||||
* @Author: 白哉
|
||||
* @Description:
|
||||
* @Date: 2025年07月01日 星期二 11:07:48
|
||||
* @Modify:
|
||||
*/
|
||||
|
||||
|
||||
using System.Collections.Generic;
|
||||
using NodeCanvas.Framework;
|
||||
using NodeCanvas.StateMachines;
|
||||
|
||||
|
||||
namespace Logic.Timeline
|
||||
{
|
||||
public enum FSMActionType
|
||||
{
|
||||
Attack,
|
||||
}
|
||||
|
||||
|
||||
public class FSMManager
|
||||
{
|
||||
public static FSMManager Instance = new FSMManager();
|
||||
private FSMManager() { }
|
||||
private Dictionary<FSMActionType, FSMOwner> _ownerDict;
|
||||
|
||||
|
||||
public void ExcuteFSMAction(FSMActionType actionType, FSMData fsmData)
|
||||
{
|
||||
if (!_ownerDict.TryGetValue(actionType, out var owner)) return;
|
||||
if (owner.isRunning) return;
|
||||
var data = owner.blackboard.GetVariable<FSMData>("Data");
|
||||
data.value = fsmData;
|
||||
owner.StartBehaviour();
|
||||
}
|
||||
|
||||
public void Update()
|
||||
{
|
||||
foreach (var kv in _ownerDict)
|
||||
{
|
||||
if (!kv.Value.isRunning) continue;
|
||||
var data = kv.Value.blackboard.GetVariable<FSMData>("Data");
|
||||
if (data == null) continue;
|
||||
if (!data.value.IsFinished) continue;
|
||||
kv.Value.StopBehaviour();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6fbbbb8536eb4ff6a7fc80581b8c4f18
|
||||
timeCreated: 1751359837
|
||||
3
My project/Assets/Scripts/Logic/Event.meta
Normal file
3
My project/Assets/Scripts/Logic/Event.meta
Normal file
@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fb6e090259f44668ad2bcdd1e69106f9
|
||||
timeCreated: 1751370115
|
||||
40
My project/Assets/Scripts/Logic/Event/EventManager.cs
Normal file
40
My project/Assets/Scripts/Logic/Event/EventManager.cs
Normal file
@ -0,0 +1,40 @@
|
||||
/*
|
||||
* @Author: 白哉
|
||||
* @Description:
|
||||
* @Date: 2025年07月01日 星期二 19:07:32
|
||||
* @Modify:
|
||||
*/
|
||||
|
||||
|
||||
using RuntimeData;
|
||||
using TH1Renderer;
|
||||
|
||||
|
||||
namespace Logic.Event
|
||||
{
|
||||
public interface IEventEnter
|
||||
{
|
||||
public void PlayEffectEvent(GridVFXParams para, GridData grid);
|
||||
}
|
||||
|
||||
|
||||
public class ServerEventClient : IEventEnter
|
||||
{
|
||||
public void PlayEffectEvent(GridVFXParams para, GridData grid)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public class EventManager
|
||||
{
|
||||
public static EventManager Instance = new EventManager();
|
||||
public IEventEnter EventEnter;
|
||||
|
||||
public EventManager()
|
||||
{
|
||||
EventEnter = new ServerEventClient();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ccbcadf6f91a42409c44e897dcdad600
|
||||
timeCreated: 1751370135
|
||||
@ -158,6 +158,7 @@ namespace Logic
|
||||
Timer.Instance.Update();
|
||||
AudioManager.Instance.Update();
|
||||
TimelineManager.Instance.Update();
|
||||
FSMManager.Instance.Update();
|
||||
}
|
||||
|
||||
public bool HasArchive()
|
||||
|
||||
207
My project/Assets/Scripts/Logic/Timeline/Fragments.cs
Normal file
207
My project/Assets/Scripts/Logic/Timeline/Fragments.cs
Normal file
@ -0,0 +1,207 @@
|
||||
/*
|
||||
* @Author: 白哉
|
||||
* @Description:
|
||||
* @Date: 2025年07月01日 星期二 14:07:05
|
||||
* @Modify:
|
||||
*/
|
||||
|
||||
|
||||
using RuntimeData;
|
||||
using TH1Renderer;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Logic.Timeline
|
||||
{
|
||||
public class MoveKill : FragmentBase
|
||||
{
|
||||
public MapData Map;
|
||||
public UnitData Origin;
|
||||
public UnitData Target;
|
||||
public GridData OriginGrid;
|
||||
public GridData TargetGrid;
|
||||
public PlayerData OriginPlayer;
|
||||
public PlayerData TargetPlayer;
|
||||
public int Dmg;
|
||||
|
||||
public override void OnStart()
|
||||
{
|
||||
//立刻死亡并播放受伤动画,必须先处理死亡,再处理移动,不然gridToUnit的dict会出错
|
||||
// 这里改成直接结算,包含了死亡,包含了经验增长和权利奇观记录
|
||||
Main.UnitLogic.DamageSettlement(Map, Origin, Target, Dmg, DamageType.ActiveAttack);
|
||||
Origin.AttackRenderMark = false;
|
||||
//移动过去并更新视野
|
||||
Main.UnitLogic.MoveTo(Map, Origin, TargetGrid, MoveType.AttackMove);
|
||||
}
|
||||
|
||||
public override void OnFinished()
|
||||
{
|
||||
var main = GameObject.Find("Main").GetComponent<Main>();
|
||||
main.MapRenderer.ROGridMap[TargetGrid.Id].SetBounceAnim();
|
||||
TargetGrid.VFXRenderMarkHurt = true;
|
||||
var t = new GridVFXRenderMark(GridVFXType.Damage);
|
||||
t.Damage = Dmg;
|
||||
TargetGrid.SetGridVFXRenderMark(t);
|
||||
TargetGrid.VFXRenderMarkDie = true;
|
||||
|
||||
//处理玩家攻击后自动再次点击unit,从而连续处理移动或者攻击的情况,for MapInteraction
|
||||
main.MapInteractionLogic.CheckContinuousAction(Map, OriginPlayer, Origin, TargetGrid);
|
||||
}
|
||||
|
||||
public override void OnUpdate(float progressTime)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public class NotMoveKill : FragmentBase
|
||||
{
|
||||
public MapData Map;
|
||||
public UnitData Origin;
|
||||
public UnitData Target;
|
||||
public GridData OriginGrid;
|
||||
public GridData TargetGrid;
|
||||
public PlayerData OriginPlayer;
|
||||
public PlayerData TargetPlayer;
|
||||
public int Dmg;
|
||||
|
||||
public float AttackTime;
|
||||
public float AttackBackTime;
|
||||
|
||||
|
||||
public override void OnStart()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override void OnFinished()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override void OnUpdate(float progressTime)
|
||||
{
|
||||
if (progressTime >= AttackTime)
|
||||
{
|
||||
AttackTime = float.MaxValue;
|
||||
Main.UnitLogic.DamageSettlement(Map, Origin, Target, Dmg, DamageType.ActiveAttack);
|
||||
Target.RenderMark = true;
|
||||
TargetGrid.VFXRenderMarkHurt = true;
|
||||
var t = new GridVFXRenderMark(GridVFXType.Damage);
|
||||
t.Damage = Dmg;
|
||||
TargetGrid.SetGridVFXRenderMark(t);
|
||||
TargetGrid.VFXRenderMarkDie = true;
|
||||
var main = GameObject.Find("Main").GetComponent<Main>();
|
||||
main.MapRenderer.ROGridMap[TargetGrid.Id].SetBounceAnim();
|
||||
}
|
||||
|
||||
if (progressTime >= AttackBackTime)
|
||||
{
|
||||
AttackBackTime = float.MaxValue;
|
||||
var main = GameObject.Find("Main").GetComponent<Main>();
|
||||
//处理玩家攻击后自动再次点击unit,从而连续处理移动或者攻击的情况,for MapInteraction
|
||||
if (OriginPlayer.Id != Map.PlayerMap.SelfPlayerId) return;
|
||||
if (!main.MapRenderer.CheckUnitHasMoveAttackTarget(Origin.Id)) return;
|
||||
|
||||
Debug.Log("!!!!!");
|
||||
main.MapInteractionLogic.OnTileClicked(Map, TargetGrid);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public class AttackAndCounter : FragmentBase
|
||||
{
|
||||
public MapData Map;
|
||||
public UnitData Origin;
|
||||
public UnitData Target;
|
||||
public GridData OriginGrid;
|
||||
public GridData TargetGrid;
|
||||
public PlayerData OriginPlayer;
|
||||
public PlayerData TargetPlayer;
|
||||
public int Dmg1;
|
||||
public int Dmg2;
|
||||
|
||||
public bool CanCounter;
|
||||
public float AttackAnimTime;
|
||||
public float CounterAttackStart;
|
||||
public float CounterAttackWait;
|
||||
public float CounterAttackBack;
|
||||
|
||||
|
||||
public override void OnStart()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override void OnFinished()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override void OnUpdate(float progressTime)
|
||||
{
|
||||
if (progressTime >= AttackAnimTime)
|
||||
{
|
||||
AttackAnimTime = float.MaxValue;
|
||||
Main.UnitLogic.DamageSettlement(Map, Origin, Target, Dmg1, DamageType.ActiveAttack);
|
||||
Target.RenderMark = true;
|
||||
Target.BounceRenderMark = true;
|
||||
Target.BounceRenderMakrWaitTime = Table.Instance.AnimDataAssets.AttackBounceWaitAnimTime;
|
||||
TargetGrid.VFXRenderMarkHurt = true;
|
||||
var t = new GridVFXRenderMark(GridVFXType.Damage);
|
||||
t.Damage = Dmg1;
|
||||
TargetGrid.SetGridVFXRenderMark(t);
|
||||
}
|
||||
|
||||
if (CanCounter && progressTime >= CounterAttackStart)
|
||||
{
|
||||
CounterAttackStart = float.MaxValue;
|
||||
Target.AttackRenderMark = CanCounter;
|
||||
Target.AttackRenderMarkAttackAnimType = Target.GetAttackRange() switch
|
||||
{
|
||||
1 => AttackAnimType.Melee, 2 => AttackAnimType.Arrow, 3 => AttackAnimType.Bomb,
|
||||
_ => AttackAnimType.None
|
||||
};
|
||||
Target.AttackRenderMarkTargetPos = Table.Instance.GridToWorld(OriginGrid,"isUnit");
|
||||
Target.AttackRenderMarkNeedBack = true;
|
||||
}
|
||||
|
||||
if (CanCounter && progressTime >= CounterAttackWait)
|
||||
{
|
||||
var settlement = Main.UnitLogic.DamageSettlement(Map, Target, Origin, Dmg2, DamageType.CounterAttack);
|
||||
if (settlement.IsKill)
|
||||
{
|
||||
OriginGrid.VFXRenderMarkHurt = true;
|
||||
var t = new GridVFXRenderMark(GridVFXType.Damage);
|
||||
t.Damage = Dmg2;
|
||||
OriginGrid.SetGridVFXRenderMark(t);
|
||||
OriginGrid.VFXRenderMarkFog = true;
|
||||
OriginGrid.VFXRenderMarkDie = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
Origin.RenderMark = true;
|
||||
Origin.BounceRenderMark = true;
|
||||
Origin.BounceRenderMakrWaitTime = Table.Instance.AnimDataAssets.AttackBounceWaitAnimTime;
|
||||
OriginGrid.VFXRenderMarkHurt = true;
|
||||
var t = new GridVFXRenderMark(GridVFXType.Damage);
|
||||
t.Damage = Dmg2;
|
||||
OriginGrid.SetGridVFXRenderMark(t);
|
||||
OriginGrid.VFXRenderMarkFog = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (progressTime >= CounterAttackBack)
|
||||
{
|
||||
var main = GameObject.Find("Main").GetComponent<Main>();
|
||||
//处理玩家攻击后自动再次点击unit,从而连续处理移动或者攻击的情况,for MapInteraction
|
||||
if (OriginPlayer.Id == Map.PlayerMap.SelfPlayerId && Origin.Alive &&
|
||||
main.MapRenderer.CheckUnitHasMoveAttackTarget(Origin.Id))
|
||||
{
|
||||
main.MapInteractionLogic.OnTileClicked(Map, OriginGrid);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -6,18 +6,10 @@
|
||||
*/
|
||||
|
||||
|
||||
using UnityEngine;
|
||||
|
||||
namespace Logic.Timeline
|
||||
{
|
||||
public enum FragmentType
|
||||
{
|
||||
Move,
|
||||
ActiveAttack,
|
||||
CounterAttack,
|
||||
AttackBack,
|
||||
Kill,
|
||||
ActionEvent,
|
||||
}
|
||||
|
||||
public enum FragmentState
|
||||
{
|
||||
Prepare,
|
||||
@ -26,10 +18,16 @@ namespace Logic.Timeline
|
||||
}
|
||||
|
||||
|
||||
public interface IFragment
|
||||
public abstract class FragmentBase
|
||||
{
|
||||
public void OnStart();
|
||||
public void OnFinished();
|
||||
public void OnUpdate(float time);
|
||||
public FragmentState State;
|
||||
public float StartTime;
|
||||
public float Duration;
|
||||
|
||||
public abstract void OnStart();
|
||||
|
||||
public abstract void OnFinished();
|
||||
|
||||
public abstract void OnUpdate(float progressTime);
|
||||
}
|
||||
}
|
||||
@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c35df220d5c2428b9e46c33733f2945f
|
||||
timeCreated: 1751340751
|
||||
@ -1,83 +0,0 @@
|
||||
/*
|
||||
* @Author: 白哉
|
||||
* @Description:
|
||||
* @Date: 2025年07月01日 星期二 11:07:18
|
||||
* @Modify:
|
||||
*/
|
||||
|
||||
|
||||
using RuntimeData;
|
||||
|
||||
|
||||
namespace Logic.Timeline
|
||||
{
|
||||
public abstract class LogicFragmentBase : IFragment
|
||||
{
|
||||
public TimeParam Param;
|
||||
|
||||
public FragmentType Type;
|
||||
public FragmentState State;
|
||||
public float StartTime;
|
||||
public float Duration;
|
||||
|
||||
public abstract bool Check();
|
||||
public abstract void OnStart();
|
||||
public abstract void OnFinished();
|
||||
public abstract void OnUpdate(float time);
|
||||
}
|
||||
|
||||
|
||||
public class ActiveAttackFragment : LogicFragmentBase
|
||||
{
|
||||
public override bool Check()
|
||||
{
|
||||
if (Param?.Map == null) return false;
|
||||
if (Param.Origin == null || Param.Target == null) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public override void OnStart()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override void OnFinished()
|
||||
{
|
||||
var dmg = Table.Instance.CalcDamage(Param.Map, Param.Origin, Param.Target);
|
||||
Main.UnitLogic.DamageSettlement(Param.Map, Param.Origin, Param.Target, 0, DamageType.ActiveAttack);
|
||||
|
||||
}
|
||||
|
||||
public override void OnUpdate(float time)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public class MoveFragment : LogicFragmentBase
|
||||
{
|
||||
public override bool Check()
|
||||
{
|
||||
if (Param?.Map == null) return false;
|
||||
if (Param.Origin == null) return false;
|
||||
if (Param.Grid == null) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public override void OnStart()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override void OnFinished()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override void OnUpdate(float time)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,55 +0,0 @@
|
||||
/*
|
||||
* @Author: 白哉
|
||||
* @Description:
|
||||
* @Date: 2025年07月01日 星期二 11:07:44
|
||||
* @Modify:
|
||||
*/
|
||||
|
||||
|
||||
using System.Collections.Generic;
|
||||
using RuntimeData;
|
||||
|
||||
|
||||
namespace Logic.Timeline
|
||||
{
|
||||
public enum TimeGroupState
|
||||
{
|
||||
Prepare,
|
||||
Playing,
|
||||
Finished,
|
||||
}
|
||||
|
||||
|
||||
public class TimeParam
|
||||
{
|
||||
public MapData Map;
|
||||
public UnitData Origin;
|
||||
public UnitData Target;
|
||||
public GridData Grid;
|
||||
public DamageType DamageType;
|
||||
public SettlementInfo Info;
|
||||
}
|
||||
|
||||
|
||||
public class TimeGroup
|
||||
{
|
||||
public TimeGroupState State;
|
||||
public List<IFragment> Fragments;
|
||||
|
||||
|
||||
public TimeGroup()
|
||||
{
|
||||
State = TimeGroupState.Prepare;
|
||||
Fragments = new List<IFragment>();
|
||||
}
|
||||
|
||||
public void Update()
|
||||
{
|
||||
if (Fragments.Count == 0)
|
||||
{
|
||||
State = TimeGroupState.Finished;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8b96044a07cb457f8a0b397218b46d89
|
||||
timeCreated: 1751340341
|
||||
@ -7,6 +7,7 @@
|
||||
|
||||
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
|
||||
namespace Logic.Timeline
|
||||
@ -16,26 +17,40 @@ namespace Logic.Timeline
|
||||
public static TimelineManager Instance = new TimelineManager();
|
||||
private TimelineManager() { }
|
||||
|
||||
private List<TimeGroup> _groups;
|
||||
private List<FragmentBase> _fragments;
|
||||
|
||||
public TimeGroup CreateTimeGroup()
|
||||
|
||||
public void AddFragment(FragmentBase fragment)
|
||||
{
|
||||
var group = new TimeGroup();
|
||||
_groups.Add(group);
|
||||
return group;
|
||||
_fragments.Add(fragment);
|
||||
}
|
||||
|
||||
public void Update()
|
||||
{
|
||||
foreach (var group in _groups)
|
||||
foreach (var fragment in _fragments)
|
||||
{
|
||||
group.Update();
|
||||
if (fragment.State == FragmentState.Prepare)
|
||||
{
|
||||
fragment.OnStart();
|
||||
fragment.StartTime = Time.time;
|
||||
fragment.State = FragmentState.Playing;
|
||||
}
|
||||
|
||||
if (fragment.State == FragmentState.Playing)
|
||||
{
|
||||
fragment.OnUpdate(Time.time - fragment.StartTime);
|
||||
if (Time.time > fragment.StartTime + fragment.Duration)
|
||||
{
|
||||
fragment.OnFinished();
|
||||
fragment.State = FragmentState.Finished;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = _groups.Count - 1; i >= 0; i--)
|
||||
for (int i = _fragments.Count - 1; i >= 0; i--)
|
||||
{
|
||||
if (_groups[i].State != TimeGroupState.Finished) continue;
|
||||
_groups.RemoveAt(i);
|
||||
if (_fragments[i].State != FragmentState.Finished) continue;
|
||||
_fragments.RemoveAt(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 990036c664354e82aec2526199dc3839
|
||||
timeCreated: 1751340798
|
||||
@ -1,40 +0,0 @@
|
||||
/*
|
||||
* @Author: 白哉
|
||||
* @Description:
|
||||
* @Date: 2025年07月01日 星期二 11:07:18
|
||||
* @Modify:
|
||||
*/
|
||||
|
||||
|
||||
namespace Logic.Timeline
|
||||
{
|
||||
public abstract class ViewFragmentBase : IFragment
|
||||
{
|
||||
public LogicFragmentBase LogicFragment;
|
||||
|
||||
public FragmentType Type;
|
||||
public FragmentState State;
|
||||
public abstract void OnStart();
|
||||
public abstract void OnFinished();
|
||||
public abstract void OnUpdate(float time);
|
||||
}
|
||||
|
||||
|
||||
public class ActiveAttackFragmentView : ViewFragmentBase
|
||||
{
|
||||
public override void OnStart()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override void OnFinished()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override void OnUpdate(float time)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,3 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 08ed9b107bb543289e1b28f2f8a2cc76
|
||||
timeCreated: 1751341003
|
||||
@ -10,7 +10,9 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Animancer;
|
||||
using Logic.Event;
|
||||
using Logic.Skill;
|
||||
using Logic.Timeline;
|
||||
using UnityEngine;
|
||||
using RuntimeData;
|
||||
using TH1Renderer;
|
||||
@ -20,7 +22,7 @@ namespace Logic
|
||||
public enum DamageType
|
||||
{
|
||||
ActiveAttack,
|
||||
PassiveAttack,
|
||||
CounterAttack,
|
||||
FollowAttack,
|
||||
Splash,
|
||||
True,
|
||||
@ -244,196 +246,57 @@ namespace Logic
|
||||
|
||||
if (TestKillUnit(mapData,unit1,unit2,dmg1)) //如果伤害直接够杀死对方
|
||||
{
|
||||
|
||||
//攻击+移动:如果是近战且目标位置不是山或者有山的科技,且目标不在水里
|
||||
if (unit1.GetAttackRange() == 1 && grid2.Terrain == TerrainType.Land
|
||||
&& (grid2.Feature != TerrainFeature.Mountain || player1.TechTree.CheckIfHasTech(TechType.Climbing)))
|
||||
{
|
||||
//立刻死亡并播放受伤动画,必须先处理死亡,再处理移动,不然gridToUnit的dict会出错
|
||||
|
||||
unit2.Health = 0;
|
||||
Main.UnitLogic.Die(mapData, unit2);
|
||||
//unit2.Health -= dmg1;
|
||||
//RunDamageSkillGroup(mapData,unit1,unit2,dmg1);
|
||||
//Main.UnitLogic.Die(mapData, unit2);
|
||||
|
||||
unit1.AttackRenderMark = false;
|
||||
//移动过去并更新视野
|
||||
MoveTo(mapData, unit1, grid2,MoveType.AttackMove);
|
||||
|
||||
//杀死对方并移动过去的时刻触发的事件
|
||||
Timer.Instance.TimerRegister(unit2, () =>
|
||||
{
|
||||
var main = GameObject.Find("Main").GetComponent<Main>();
|
||||
main.MapRenderer.ROGridMap[grid2.Id].SetBounceAnim();
|
||||
grid2.VFXRenderMarkHurt = true;
|
||||
var t = new GridVFXRenderMark(GridVFXType.Damage);
|
||||
t.Damage = dmg1;
|
||||
grid2.SetGridVFXRenderMark(t);
|
||||
grid2.VFXRenderMarkDie = true;
|
||||
|
||||
//处理玩家攻击后自动再次点击unit,从而连续处理移动或者攻击的情况,for MapInteraction
|
||||
main.MapInteractionLogic.CheckContinuousAction(mapData,player1,unit1,grid2);
|
||||
|
||||
//权力奇观记录
|
||||
player1.TotalKill++;
|
||||
//如果没有STATIC技能,那么就可以增加小兵经验
|
||||
if (!Table.Instance.QueryUnitHasSkill(unit1.UnitType, SkillType.STATIC)) unit1.Exp++;
|
||||
},Table.Instance.AnimDataAssets.MoveAnimTime);
|
||||
var fragment = new MoveKill();
|
||||
fragment.Duration = Table.Instance.AnimDataAssets.MoveAnimTime;
|
||||
fragment.Origin = unit1;
|
||||
fragment.Target = unit2;
|
||||
fragment.Dmg = dmg1;
|
||||
fragment.OriginGrid = grid1;
|
||||
fragment.TargetGrid = grid2;
|
||||
fragment.OriginPlayer = player1;
|
||||
fragment.TargetPlayer = player2;
|
||||
TimelineManager.Instance.AddFragment(fragment);
|
||||
}
|
||||
else
|
||||
{
|
||||
//对方延迟死亡
|
||||
Timer.Instance.TimerRegister(unit2, () =>
|
||||
{
|
||||
Main.UnitLogic.Die(mapData, unit2);
|
||||
unit2.RenderMark = true;
|
||||
grid2.VFXRenderMarkHurt = true;
|
||||
var t = new GridVFXRenderMark(GridVFXType.Damage);
|
||||
t.Damage = dmg1;
|
||||
grid2.SetGridVFXRenderMark(t);
|
||||
grid2.VFXRenderMarkDie = true;
|
||||
var main = GameObject.Find("Main").GetComponent<Main>();
|
||||
main.MapRenderer.ROGridMap[grid2.Id].SetBounceAnim();
|
||||
|
||||
},attackWait);
|
||||
|
||||
//处理攻击到对方的时刻
|
||||
Timer.Instance.TimerRegister(unit2, () =>
|
||||
{
|
||||
Main.UnitLogic.Die(mapData, unit2);
|
||||
unit2.RenderMark = true;
|
||||
grid2.VFXRenderMarkHurt = true;
|
||||
var t = new GridVFXRenderMark(GridVFXType.Damage);
|
||||
t.Damage = dmg1;
|
||||
grid2.SetGridVFXRenderMark(t);
|
||||
grid2.VFXRenderMarkDie = true;
|
||||
var main = GameObject.Find("Main").GetComponent<Main>();
|
||||
main.MapRenderer.ROGridMap[grid2.Id].SetBounceAnim();
|
||||
|
||||
},attackWait);
|
||||
|
||||
//处理已经攻击返回的时刻
|
||||
Timer.Instance.TimerRegister(this, () =>
|
||||
{
|
||||
var main = GameObject.Find("Main").GetComponent<Main>();
|
||||
//处理玩家攻击后自动再次点击unit,从而连续处理移动或者攻击的情况,for MapInteraction
|
||||
if (player1.Id == mapData.PlayerMap.SelfPlayerId &&
|
||||
main.MapRenderer.CheckUnitHasMoveAttackTarget(unit1.Id))
|
||||
{
|
||||
Debug.Log("!!!!!");
|
||||
main.MapInteractionLogic.OnTileClicked(mapData,grid2);
|
||||
}
|
||||
//权力奇观记录
|
||||
player1.TotalKill++;
|
||||
//如果没有STATIC技能,那么就可以增加小兵经验
|
||||
if (!Table.Instance.QueryUnitHasSkill(unit1.UnitType, SkillType.STATIC)) unit1.Exp++;
|
||||
},attackBack);
|
||||
|
||||
var fragment = new NotMoveKill();
|
||||
fragment.Duration = attackBack;
|
||||
fragment.Origin = unit1;
|
||||
fragment.Target = unit2;
|
||||
fragment.Dmg = dmg1;
|
||||
fragment.OriginGrid = grid1;
|
||||
fragment.TargetGrid = grid2;
|
||||
fragment.OriginPlayer = player1;
|
||||
fragment.TargetPlayer = player2;
|
||||
fragment.AttackTime = attackWait;
|
||||
fragment.AttackBackTime = attackBack;
|
||||
TimelineManager.Instance.AddFragment(fragment);
|
||||
}
|
||||
|
||||
}
|
||||
//如果杀不死对方
|
||||
else
|
||||
{
|
||||
|
||||
|
||||
//在attackAnimTime之后,刷新unit2的血量,配合动画演出
|
||||
Timer.Instance.TimerRegister(unit2, () =>
|
||||
{
|
||||
unit2.Health -= dmg1;
|
||||
unit2.RenderMark = true;
|
||||
unit2.BounceRenderMark = true;
|
||||
unit2.BounceRenderMakrWaitTime = Table.Instance.AnimDataAssets.AttackBounceWaitAnimTime;
|
||||
grid2.VFXRenderMarkHurt = true;
|
||||
var t = new GridVFXRenderMark(GridVFXType.Damage);
|
||||
t.Damage = dmg1;
|
||||
grid2.SetGridVFXRenderMark(t);
|
||||
|
||||
|
||||
},
|
||||
Table.Instance.AnimDataAssets.AttackAnimTime);
|
||||
|
||||
//处理反击情况,设置unit2的rendermark
|
||||
if (canCounter)
|
||||
{
|
||||
//unit2.AttackRenderMarkWaitTime = counterAttackStart;
|
||||
Timer.Instance.TimerRegister(unit2, () =>
|
||||
{
|
||||
unit2.AttackRenderMark = canCounter;
|
||||
unit2.AttackRenderMarkAttackAnimType = unit2.GetAttackRange() switch
|
||||
{
|
||||
1 => AttackAnimType.Melee, 2 => AttackAnimType.Arrow, 3 => AttackAnimType.Bomb,
|
||||
_ => AttackAnimType.None
|
||||
};
|
||||
unit2.AttackRenderMarkTargetPos = Table.Instance.GridToWorld(grid1,"isUnit");
|
||||
unit2.AttackRenderMarkNeedBack = true;
|
||||
},
|
||||
counterAttackStart);
|
||||
|
||||
|
||||
|
||||
//如果会被反击至死
|
||||
if (dmg2 >= unit1.Health)
|
||||
{
|
||||
|
||||
//我方死亡,播放对应VFX
|
||||
|
||||
|
||||
Timer.Instance.TimerRegister(unit1, () =>
|
||||
{
|
||||
unit1.Health = 0;
|
||||
Main.UnitLogic.Die(mapData, unit1);
|
||||
grid1.VFXRenderMarkHurt = true;
|
||||
var t = new GridVFXRenderMark(GridVFXType.Damage);
|
||||
t.Damage = dmg2;
|
||||
grid1.SetGridVFXRenderMark(t);
|
||||
grid1.VFXRenderMarkFog = true;
|
||||
grid1.VFXRenderMarkDie = true;
|
||||
},
|
||||
counterAttackWait);
|
||||
if (!Table.Instance.QueryUnitHasSkill(unit2.UnitType, SkillType.STATIC)) unit2.Exp++;
|
||||
}
|
||||
//否则,就是双方正常互相消耗血量
|
||||
else
|
||||
{
|
||||
//播放对应VFX
|
||||
Timer.Instance.TimerRegister(unit1, () =>
|
||||
{
|
||||
unit1.Health -= dmg2;
|
||||
unit1.RenderMark = true;
|
||||
unit1.BounceRenderMark = true;
|
||||
unit1.BounceRenderMakrWaitTime = Table.Instance.AnimDataAssets.AttackBounceWaitAnimTime;
|
||||
grid1.VFXRenderMarkHurt = true;
|
||||
var t = new GridVFXRenderMark(GridVFXType.Damage);
|
||||
t.Damage = dmg2;
|
||||
grid1.SetGridVFXRenderMark(t);
|
||||
grid1.VFXRenderMarkFog = true;
|
||||
},
|
||||
counterAttackWait);
|
||||
}
|
||||
}
|
||||
|
||||
//在全部攻击结束的时刻触发的事件
|
||||
Timer.Instance.TimerRegister(this, () =>
|
||||
{
|
||||
var main = GameObject.Find("Main").GetComponent<Main>();
|
||||
//处理玩家攻击后自动再次点击unit,从而连续处理移动或者攻击的情况,for MapInteraction
|
||||
if (player1.Id == mapData.PlayerMap.SelfPlayerId && unit1.Alive &&
|
||||
main.MapRenderer.CheckUnitHasMoveAttackTarget(unit1.Id))
|
||||
{
|
||||
main.MapInteractionLogic.OnTileClicked(mapData,grid1);
|
||||
}
|
||||
},
|
||||
counterAttackBack);
|
||||
var fragment = new AttackAndCounter();
|
||||
fragment.Duration = counterAttackBack;
|
||||
fragment.Origin = unit1;
|
||||
fragment.Target = unit2;
|
||||
fragment.Dmg1 = dmg1;
|
||||
fragment.Dmg2 = dmg2;
|
||||
fragment.OriginGrid = grid1;
|
||||
fragment.TargetGrid = grid2;
|
||||
fragment.OriginPlayer = player1;
|
||||
fragment.TargetPlayer = player2;
|
||||
fragment.CanCounter = canCounter;
|
||||
fragment.AttackAnimTime = Table.Instance.AnimDataAssets.AttackAnimTime;
|
||||
fragment.CounterAttackStart = counterAttackStart;
|
||||
fragment.CounterAttackWait = counterAttackWait;
|
||||
fragment.CounterAttackBack = counterAttackBack;
|
||||
TimelineManager.Instance.AddFragment(fragment);
|
||||
}
|
||||
|
||||
var settlement = new SettlementInfo();
|
||||
settlement.DamageType = DamageType.ActiveAttack;
|
||||
settlement.DamageOrigin = unit1;
|
||||
settlement.DamageTarget = unit2;
|
||||
settlement.DamageValue = dmg1;
|
||||
foreach (var skill in unit1.Skills) skill.OnDamageOther(mapData, settlement);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -452,15 +315,13 @@ namespace Logic
|
||||
target.Health -= dmg;
|
||||
if (type == DamageType.KillSelf)
|
||||
{
|
||||
target.Health = 0;
|
||||
UnitDie(mapData, target, dmg);
|
||||
settlement.IsKill = true;
|
||||
Main.UnitLogic.Die(mapData, target);
|
||||
}
|
||||
else if (target.CanBeKilled(mapData) && target.Health <= 0)
|
||||
{
|
||||
target.Health = 0;
|
||||
UnitDie(mapData, target, dmg);
|
||||
settlement.IsKill = true;
|
||||
Main.UnitLogic.Die(mapData, target);
|
||||
|
||||
if (!origin.IsExpLock(mapData)) origin.Exp++;
|
||||
mapData.GetPlayerDataByUnitId(origin.Id, out var player);
|
||||
@ -477,6 +338,14 @@ namespace Logic
|
||||
return settlement;
|
||||
}
|
||||
|
||||
public void UnitDie(MapData map, UnitData unit, int dmg)
|
||||
{
|
||||
unit.Health = 0;
|
||||
Main.UnitLogic.Die(map, unit);
|
||||
if (!map.GetGridDataByUnitId(unit.Id, out var targetGrid)) return;
|
||||
DieAnimRenderMarkUpadate(targetGrid, unit, dmg,true);
|
||||
}
|
||||
|
||||
public void DieAnimRenderMarkUpadate(GridData grid2,UnitData unit2,int dmg,bool needRandomWait = false)
|
||||
{
|
||||
//TODO 不该这么做,临时凑合一下
|
||||
|
||||
@ -5,6 +5,7 @@ using UnityEngine.SceneManagement;
|
||||
|
||||
using RuntimeData;
|
||||
using Logic;
|
||||
using Logic.Event;
|
||||
|
||||
namespace TH1Renderer
|
||||
{
|
||||
@ -69,6 +70,7 @@ namespace TH1Renderer
|
||||
|
||||
public MapRenderer(Main main, MapData mapData)
|
||||
{
|
||||
EventManager.Instance.EventEnter = new ViewEventEnter();
|
||||
_main = main;
|
||||
_mapData = mapData;
|
||||
Scene currentScene = SceneManager.GetActiveScene();
|
||||
@ -1037,4 +1039,13 @@ namespace TH1Renderer
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public class ViewEventEnter : IEventEnter
|
||||
{
|
||||
public void PlayEffectEvent(GridVFXParams para, GridData grid)
|
||||
{
|
||||
//!!!!!!!!!!!!!!!!
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user