2025-10-24 02:47:34 +08:00

253 lines
9.7 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)
{
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);
Debug.Log("错误的fragmentType fragmentData创建失败#3");
return null;
}
public static IFragmentData Create(FragmentType type, GridRenderer origin, GridRenderer target,CityInfoRenderer targetCityInfo)
{
if(type == FragmentType.CityExp)
return new FragmentCityExpData(type,origin,target,targetCityInfo);
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)
{
if (type == FragmentType.AttackAlly)
{
return new FragmentAttackAllyData(type,originUnitRenderer,targetUnitRenderer,originGrid,targetGrid,skillType);
}
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 FragmentAttackAndCounterData(FragmentType type,UnitRenderer originUnitRenderer,UnitRenderer targetUnitRenderer,GridData originGrid, GridData targetGrid, ProjectileType attack,ProjectileType counter,int attackDmg, int counterDmg,CityData originCity,CityData targetCity) : base(type)
{
OriginUnitRenderer = originUnitRenderer;
TargetUnitRenderer = targetUnitRenderer;
OriginGrid = originGrid;
TargetGrid = targetGrid;
OriginCity = originCity;
TargetCity = targetCity;
AttackType = attack;
CounterType = counter;
AttackDmg = attackDmg;
CounterDmg = counterDmg;
}
}
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 FragmentCityExpData(FragmentType type, GridRenderer originGridRenderer, GridRenderer targetGridRenderer, CityInfoRenderer targetCityInfoRenderer)
: base(type)
{
OriginGridRenderer = originGridRenderer;
TargetGridRenderer = targetGridRenderer;
TargetCityInfoRenderer = targetCityInfoRenderer;
}
}
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 FragmentAttackAllyData(FragmentType type,UnitRenderer originUnitRenderer,UnitRenderer targetUnitRenderer,GridData originGrid, GridData targetGrid,SkillType skillType) : base(type)
{
OriginUnitRenderer = originUnitRenderer;
TargetUnitRenderer = targetUnitRenderer;
OriginGrid = originGrid;
TargetGrid = targetGrid;
SkillType = skillType;
}
}
}