/* * @Author: 白哉 * @Description: * @Date: 2025年07月01日 星期二 11:07:48 * @Modify: */ using System.Collections.Generic; using RuntimeData; using TH1_Anim.Fragments; using TH1_Renderer; using TH1Renderer; using UnityEngine; namespace TH1_Anim { public static class FragmentDataFactory { public static IFragmentData Create(FragmentType type,GridUpdateType gridUpdateType,GridRenderer renderer,float dur = 0.05f) { if (type == FragmentType.GridUpdate) { return new FragmentGridUpdateData(type,gridUpdateType,renderer,dur); } Debug.Log("错误的fragmentType fragmentData创建失败!#1"); return null; } public static IFragmentData Create(FragmentType type,UnitRenderer unitRenderer,GridData originGrid,GridData targetGrid,List pathGrid) { if(type == FragmentType.Move) return new FragmentMoveData(unitRenderer,originGrid, targetGrid,pathGrid); Debug.Log("错误的fragmentType fragmentData创建失败!#2"); return null; } public static IFragmentData Create(FragmentType type,GridRenderer gridRenderer,CityInfoRenderer cityInfoRenderer,int level,int levelExp) { if(type == FragmentType.CityExpUp || type == FragmentType.CityLevelUp || type == FragmentType.CityConnectExpUp) return new FragmentCityExpUpData(type,gridRenderer,cityInfoRenderer, level,levelExp); if(type is FragmentType.CityExpDown or FragmentType.CityConnectExpDown) return new FragmentCityExpUpData(type,gridRenderer,cityInfoRenderer, level,levelExp,isDown:true); Debug.Log("错误的fragmentType fragmentData创建失败!#2"); return null; } public static IFragmentData Create(FragmentType type,UnitRenderer originUnitRenderer,UnitRenderer targetUnitRenderer,GridData originGrid,GridData targetGrid,ProjectileType attack,ProjectileType counter,int attackDmg,int counterDmg,CityData originCity,CityData targetCity, bool targetCanNotBeKilled = false) { if(type is FragmentType.Attack or FragmentType.AttackAndCounter or FragmentType.MoveKill or FragmentType.NotMoveKill or FragmentType.AttackAndCounterDie) return new FragmentAttackAndCounterData(type,originUnitRenderer,targetUnitRenderer,originGrid,targetGrid,attack,counter,attackDmg,counterDmg,originCity,targetCity,targetCanNotBeKilled); Debug.Log("错误的fragmentType fragmentData创建失败!#3"); return null; } public static IFragmentData Create(FragmentType type, GridRenderer origin, GridRenderer target,CityInfoRenderer targetCityInfo,int dis) { if(type == FragmentType.CityExp) return new FragmentCityExpData(type,origin,target,targetCityInfo,dis); Debug.Log("错误的fragmentType fragmentData创建失败!#4"); return null; } public static IFragmentData Create(FragmentType type,UnitRenderer unitRenderer,GridData grid,CityData city) { if (type == FragmentType.Die) { return new FragmentUnitData(type,unitRenderer,grid,city); } Debug.Log("错误的fragmentType fragmentData创建失败!#5"); return null; } public static IFragmentData Create(FragmentType type,GameObject obj,GridData originGrid,GridData targetGrid,FragmentMoveExplorerType moveType = FragmentMoveExplorerType.NormalMove) { if (type == FragmentType.MoveExplorer) { return new FragmentMoveExplorerData(type,obj,originGrid,targetGrid,moveType); } Debug.Log("错误的fragmentType fragmentData创建失败!#5"); return null; } public static IFragmentData CreateAttackAllyData(FragmentType type, UnitRenderer originUnitRenderer, UnitRenderer targetUnitRenderer, GridData originGrid, GridData targetGrid, SkillType skillType, bool originUnitDie,CityData originUnitCity, ProjectileType originProjectileType = ProjectileType.None) { if (type == FragmentType.AttackAlly) { return new FragmentAttackAllyData(type,originUnitRenderer,targetUnitRenderer,originGrid,targetGrid,skillType,originUnitDie,originUnitCity,originProjectileType); } Debug.Log("错误的fragmentType fragmentData创建失败!#93"); return null; } } public abstract class IFragmentData { public FragmentType Type; public IFragmentData(FragmentType type) { Type = type; } } public class FragmentUnitData : IFragmentData { public UnitRenderer UnitRenderer; public GridData Grid; public CityData City; public FragmentUnitData(FragmentType type,UnitRenderer unitRenderer,GridData grid,CityData city) : base(type) { UnitRenderer = unitRenderer; Grid = grid; City = city; } } public class FragmentMoveData : IFragmentData { public UnitRenderer UnitRenderer; public GridData OriginGrid; public List Path; public GridData TargetGrid; public FragmentMoveData(UnitRenderer unitRenderer,GridData originGrid,GridData targetGrid,List path) : base(FragmentType.Move) { Path = path; UnitRenderer = unitRenderer; OriginGrid = originGrid; TargetGrid = targetGrid; } } public enum FragmentMoveExplorerType {FirstMove,NormalMove,LastMove } public class FragmentMoveExplorerData : IFragmentData { public GameObject Explorer; public GridData OriginGrid; public GridData TargetGrid; public FragmentMoveExplorerType MoveType; public FragmentMoveExplorerData(FragmentType type, GameObject explorer,GridData originGrid,GridData targetGrid,FragmentMoveExplorerType moveType = FragmentMoveExplorerType.NormalMove) : base(type) { Explorer = explorer; OriginGrid = originGrid; TargetGrid = targetGrid; MoveType = moveType; } } //Attack AttackAndCounter MoveKill NotMoveKill 共用这个 public class FragmentAttackAndCounterData : IFragmentData { public UnitRenderer OriginUnitRenderer; public UnitRenderer TargetUnitRenderer; public GridData OriginGrid; public GridData TargetGrid; public CityData OriginCity; public CityData TargetCity; public ProjectileType AttackType; public ProjectileType CounterType; public int AttackDmg; public int CounterDmg; public bool TargetCanNotBeKilled; public FragmentAttackAndCounterData(FragmentType type,UnitRenderer originUnitRenderer,UnitRenderer targetUnitRenderer,GridData originGrid, GridData targetGrid, ProjectileType attack,ProjectileType counter,int attackDmg, int counterDmg,CityData originCity,CityData targetCity, bool targetCanNotBeKilled = false) : base(type) { OriginUnitRenderer = originUnitRenderer; TargetUnitRenderer = targetUnitRenderer; OriginGrid = originGrid; TargetGrid = targetGrid; OriginCity = originCity; TargetCity = targetCity; AttackType = attack; CounterType = counter; AttackDmg = attackDmg; CounterDmg = counterDmg; TargetCanNotBeKilled = targetCanNotBeKilled; } } public class FragmentGridUpdateData : IFragmentData { public GridUpdateType GridUpdateType; public GridRenderer GridRenderer; public float Duration; public FragmentGridUpdateData(FragmentType type,GridUpdateType gridUpdateType, GridRenderer gridRenderer,float dur) : base(type) { GridUpdateType = gridUpdateType; GridRenderer = gridRenderer; Duration = dur; } } public class FragmentCityExpData : IFragmentData { public GridRenderer OriginGridRenderer; public GridRenderer TargetGridRenderer; public CityInfoRenderer TargetCityInfoRenderer; public int Dis; public FragmentCityExpData(FragmentType type, GridRenderer originGridRenderer, GridRenderer targetGridRenderer, CityInfoRenderer targetCityInfoRenderer, int dis) : base(type) { OriginGridRenderer = originGridRenderer; TargetGridRenderer = targetGridRenderer; TargetCityInfoRenderer = targetCityInfoRenderer; Dis = dis; } } public class FragmentCityExpUpData : IFragmentData { public GridRenderer GridRenderer; public CityInfoRenderer CityInfoRenderer; public int Level; public int LevelExp; public bool IsDown; public FragmentCityExpUpData(FragmentType type, GridRenderer gridRenderer, CityInfoRenderer cityInfoRenderer,int lv,int lvExp,bool isDown = false) : base(type) { GridRenderer = gridRenderer; CityInfoRenderer = cityInfoRenderer; Level = lv; LevelExp = lvExp; IsDown = isDown; } } public class FragmentAttackAllyData : IFragmentData { public UnitRenderer OriginUnitRenderer; public UnitRenderer TargetUnitRenderer; public GridData OriginGrid; public GridData TargetGrid; public SkillType SkillType; public bool OriginUnitDie; public CityData OriginUnitCity; public ProjectileType OriginProjectileType; public FragmentAttackAllyData(FragmentType type,UnitRenderer originUnitRenderer,UnitRenderer targetUnitRenderer,GridData originGrid, GridData targetGrid,SkillType skillType,bool originUnitDie,CityData originUnitCity, ProjectileType originProjectileType = ProjectileType.None) : base(type) { OriginUnitRenderer = originUnitRenderer; TargetUnitRenderer = targetUnitRenderer; OriginGrid = originGrid; TargetGrid = targetGrid; SkillType = skillType; OriginUnitDie = originUnitDie; OriginUnitCity = originUnitCity; OriginProjectileType = originProjectileType; } } public class FragmentAttackGroundData : IFragmentData { public UnitRenderer OriginUnitRenderer; public GridRenderer TargetGridRenderer; public GridData OriginGrid; public GridData TargetGrid; public SkillType SkillType; public CityData OriginUnitCity; public FragmentAttackGroundData(FragmentType type,UnitRenderer originUnitRenderer,GridRenderer targetGridRenderer,GridData originGrid, GridData targetGrid,SkillType skillType,CityData originUnitCity) : base(type) { OriginUnitRenderer = originUnitRenderer; TargetGridRenderer = targetGridRenderer; OriginGrid = originGrid; TargetGrid = targetGrid; SkillType = skillType; OriginUnitCity = originUnitCity; } } public class FragmentSuikaFallingSplashData : IFragmentData { public UnitRenderer SuikaRenderer; public UnitRenderer TargetUnitRenderer; public GridData OriginGrid; public GridData TargetGrid; public GridData FinalGrid; public CityData OriginCity; public CityData TargetCity; public CityData FinalCity; public int AttackDmg; public bool TargetKilled; public bool TargetCanNotBeKilled; public bool HasAttackTarget; public bool IsGroundLanding; public List SightRefreshGrids; public List SplashSteps; public FragmentSuikaFallingSplashData( UnitRenderer suikaRenderer, UnitRenderer targetUnitRenderer, GridData originGrid, GridData targetGrid, GridData finalGrid, CityData originCity, CityData targetCity, CityData finalCity, int attackDmg, bool targetKilled, bool targetCanNotBeKilled, List splashSteps, bool hasAttackTarget = true, bool isGroundLanding = false, List sightRefreshGrids = null) : base(FragmentType.SuikaFallingSplash) { SuikaRenderer = suikaRenderer; TargetUnitRenderer = targetUnitRenderer; OriginGrid = originGrid; TargetGrid = targetGrid; FinalGrid = finalGrid; OriginCity = originCity; TargetCity = targetCity; FinalCity = finalCity; AttackDmg = attackDmg; TargetKilled = targetKilled; TargetCanNotBeKilled = targetCanNotBeKilled; SplashSteps = splashSteps; HasAttackTarget = hasAttackTarget; IsGroundLanding = isGroundLanding; SightRefreshGrids = sightRefreshGrids; } } }