2026-06-26 16:36:01 +08:00

338 lines
13 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* @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;
}
}
}