338 lines
13 KiB
C#
338 lines
13 KiB
C#
/*
|
||
* @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<Vector2Int> 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<Vector2Int> Path;
|
||
public GridData TargetGrid;
|
||
public FragmentMoveData(UnitRenderer unitRenderer,GridData originGrid,GridData targetGrid,List<Vector2Int> 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<GridData> SightRefreshGrids;
|
||
public List<FragmentStep> 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<FragmentStep> splashSteps,
|
||
bool hasAttackTarget = true,
|
||
bool isGroundLanding = false,
|
||
List<GridData> 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;
|
||
}
|
||
}
|
||
|
||
|
||
}
|