266 lines
8.5 KiB
C#
266 lines
8.5 KiB
C#
/*
|
|
* @Author: 白哉
|
|
* @Description:
|
|
* @Date: 2026年03月16日 星期一 17:03:45
|
|
* @Modify:
|
|
*/
|
|
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Reflection;
|
|
using MemoryPack;
|
|
|
|
|
|
namespace RuntimeData
|
|
{
|
|
public class CultureCardFactory
|
|
{
|
|
private static Dictionary<CultureCardType, Type> _cardDict;
|
|
|
|
public static CultureCardBase GetCultureCardBase(CultureCardType cardType)
|
|
{
|
|
if (_cardDict == null)
|
|
{
|
|
_cardDict = new Dictionary<CultureCardType, Type>();
|
|
Assembly assembly = typeof(CultureCardBase).Assembly; // 获取基类所在程序集
|
|
foreach (Type classType in assembly.GetTypes())
|
|
{
|
|
if (classType.IsSubclassOf(typeof(CultureCardBase)) && !classType.IsAbstract)
|
|
{
|
|
var obj = Activator.CreateInstance(classType);
|
|
var cardBase = obj as CultureCardBase;
|
|
if (cardBase == null) continue;
|
|
_cardDict[cardBase.GetCardType()] = classType;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_cardDict.TryGetValue(cardType, out var cardBaseClass))
|
|
{
|
|
return Activator.CreateInstance(cardBaseClass) as CultureCardBase;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|
|
|
|
|
|
[MemoryPackable]
|
|
[MemoryPackUnion(1, typeof(SecondHeroCultureCard))]
|
|
[MemoryPackUnion(2, typeof(ThirdHeroCultureCard))]
|
|
[MemoryPackUnion(3, typeof(MonumentForestCultureCard))]
|
|
[MemoryPackUnion(4, typeof(MonumentShallowCultureCard))]
|
|
[MemoryPackUnion(5, typeof(MonumentMountainCultureCard))]
|
|
[MemoryPackUnion(6, typeof(MonumentDeepSeaCultureCard))]
|
|
[MemoryPackUnion(7, typeof(MonumentPlainCultureCard))]
|
|
[MemoryPackUnion(8, typeof(AdvancedHeroEnhanceCultureCard))]
|
|
[MemoryPackUnion(9, typeof(AdvancedMilitaryEnhanceCultureCard))]
|
|
[MemoryPackUnion(10, typeof(AdvancedEconomyEnhanceCultureCard))]
|
|
[MemoryPackUnion(11, typeof(AdvancedScarletMansionCultureCard))]
|
|
[MemoryPackUnion(12, typeof(AdvancedEienteiCultureCard))]
|
|
[MemoryPackUnion(13, typeof(AdvancedMoriyaCultureCard))]
|
|
[MemoryPackUnion(14, typeof(AdvancedPalaceOfEarthCultureCard))]
|
|
[MemoryPackUnion(15, typeof(Lv2HeroCultureCard))]
|
|
[MemoryPackUnion(16, typeof(Lv3HeroCultureCard))]
|
|
public abstract partial class CultureCardBase
|
|
{
|
|
[MemoryPackConstructor]
|
|
public CultureCardBase()
|
|
{
|
|
|
|
}
|
|
|
|
public abstract CultureCardType GetCardType();
|
|
|
|
public virtual void OnGetCultureCard(MapData mapData, PlayerData playerData)
|
|
{
|
|
|
|
}
|
|
|
|
//英雄相关所有消耗是否打折
|
|
public virtual float GetHeroCostDiscount(MapData mapData, PlayerData playerData)
|
|
{
|
|
return 1f;
|
|
}
|
|
|
|
// 是否可以用文化值让普通单位立刻升级为 Officer
|
|
public virtual bool CanCultureUpgradeUnit(MapData mapData, PlayerData playerData)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
// 是否可以用文化值购买巨人
|
|
public virtual bool CanBuyBigGuyWithCulture(MapData mapData, PlayerData playerData)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
// 文化值是否能转换成金币
|
|
public virtual bool CanConvertCultureToGold(MapData mapData, PlayerData playerData)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
// 检查是否开启了对应 Resource
|
|
public virtual bool CheckResourceOpen(MapData mapData, PlayerData playerData, ResourceType resourceType)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
[MemoryPackable]
|
|
public partial class SecondHeroCultureCard : CultureCardBase
|
|
{
|
|
public override CultureCardType GetCardType() => CultureCardType.SecondHero;
|
|
|
|
public override void OnGetCultureCard(MapData mapData, PlayerData playerData)
|
|
{
|
|
if (playerData.PlayerHeroData.MaxHeroCount == 1) playerData.PlayerHeroData.MaxHeroCount++;
|
|
}
|
|
}
|
|
|
|
|
|
[MemoryPackable]
|
|
public partial class ThirdHeroCultureCard : CultureCardBase
|
|
{
|
|
public override CultureCardType GetCardType() => CultureCardType.ThirdHero;
|
|
|
|
public override void OnGetCultureCard(MapData mapData, PlayerData playerData)
|
|
{
|
|
if (playerData.PlayerHeroData.MaxHeroCount == 2) playerData.PlayerHeroData.MaxHeroCount++;
|
|
}
|
|
}
|
|
|
|
|
|
[MemoryPackable]
|
|
public partial class Lv2HeroCultureCard : CultureCardBase
|
|
{
|
|
public override CultureCardType GetCardType() => CultureCardType.Lv2Hero;
|
|
}
|
|
|
|
[MemoryPackable]
|
|
public partial class Lv3HeroCultureCard : CultureCardBase
|
|
{
|
|
public override CultureCardType GetCardType() => CultureCardType.Lv3Hero;
|
|
}
|
|
|
|
[MemoryPackable]
|
|
public partial class MonumentForestCultureCard : CultureCardBase
|
|
{
|
|
public override CultureCardType GetCardType() => CultureCardType.MonumentForest;
|
|
|
|
public override bool CheckResourceOpen(MapData mapData, PlayerData playerData, ResourceType resourceType)
|
|
{
|
|
return resourceType == ResourceType.ForestTemple;
|
|
}
|
|
}
|
|
|
|
|
|
[MemoryPackable]
|
|
public partial class MonumentShallowCultureCard : CultureCardBase
|
|
{
|
|
public override CultureCardType GetCardType() => CultureCardType.MonumentShallow;
|
|
|
|
public override bool CheckResourceOpen(MapData mapData, PlayerData playerData, ResourceType resourceType)
|
|
{
|
|
return resourceType == ResourceType.WaterTemple;
|
|
}
|
|
}
|
|
|
|
|
|
[MemoryPackable]
|
|
public partial class MonumentMountainCultureCard : CultureCardBase
|
|
{
|
|
public override CultureCardType GetCardType() => CultureCardType.MonumentMountain;
|
|
|
|
public override bool CheckResourceOpen(MapData mapData, PlayerData playerData, ResourceType resourceType)
|
|
{
|
|
return resourceType == ResourceType.MountainTemple;
|
|
}
|
|
}
|
|
|
|
|
|
[MemoryPackable]
|
|
public partial class MonumentDeepSeaCultureCard : CultureCardBase
|
|
{
|
|
public override CultureCardType GetCardType() => CultureCardType.MonumentDeepSea;
|
|
|
|
public override bool CheckResourceOpen(MapData mapData, PlayerData playerData, ResourceType resourceType)
|
|
{
|
|
return resourceType == ResourceType.KingTemple;
|
|
}
|
|
}
|
|
|
|
|
|
[MemoryPackable]
|
|
public partial class MonumentPlainCultureCard : CultureCardBase
|
|
{
|
|
public override CultureCardType GetCardType() => CultureCardType.MonumentPlain;
|
|
|
|
public override bool CheckResourceOpen(MapData mapData, PlayerData playerData, ResourceType resourceType)
|
|
{
|
|
return resourceType == ResourceType.Temple;
|
|
}
|
|
}
|
|
|
|
|
|
[MemoryPackable]
|
|
public partial class AdvancedHeroEnhanceCultureCard : CultureCardBase
|
|
{
|
|
public override CultureCardType GetCardType() => CultureCardType.AdvancedHeroEnhance;
|
|
|
|
public override bool CanCultureUpgradeUnit(MapData mapData, PlayerData playerData)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
[MemoryPackable]
|
|
public partial class AdvancedMilitaryEnhanceCultureCard : CultureCardBase
|
|
{
|
|
public override CultureCardType GetCardType() => CultureCardType.AdvancedMilitaryEnhance;
|
|
|
|
public override bool CanBuyBigGuyWithCulture(MapData mapData, PlayerData playerData) => true;
|
|
}
|
|
|
|
|
|
[MemoryPackable]
|
|
public partial class AdvancedEconomyEnhanceCultureCard : CultureCardBase
|
|
{
|
|
public override CultureCardType GetCardType() => CultureCardType.AdvancedEconomyEnhance;
|
|
|
|
public override bool CanConvertCultureToGold(MapData mapData, PlayerData playerData) => true;
|
|
}
|
|
|
|
|
|
[MemoryPackable]
|
|
public partial class AdvancedScarletMansionCultureCard : CultureCardBase
|
|
{
|
|
public override CultureCardType GetCardType() => CultureCardType.AdvancedScarletMansion;
|
|
}
|
|
|
|
|
|
[MemoryPackable]
|
|
public partial class AdvancedEienteiCultureCard : CultureCardBase
|
|
{
|
|
public override CultureCardType GetCardType() => CultureCardType.AdvancedEientei;
|
|
}
|
|
|
|
|
|
[MemoryPackable]
|
|
public partial class AdvancedMoriyaCultureCard : CultureCardBase
|
|
{
|
|
public override CultureCardType GetCardType() => CultureCardType.AdvancedMoriya;
|
|
}
|
|
|
|
|
|
[MemoryPackable]
|
|
public partial class AdvancedPalaceOfEarthCultureCard : CultureCardBase
|
|
{
|
|
public override CultureCardType GetCardType() => CultureCardType.AdvancedPalaceOfEarth;
|
|
}
|
|
}
|