继续
This commit is contained in:
@@ -2,14 +2,17 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Continentis.MainGame.Character;
|
||||
using Continentis.MainGame.Equipment;
|
||||
using SLSFramework.General;
|
||||
using SLSFramework.UModAssistance;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Continentis.MainGame.Card
|
||||
{
|
||||
public abstract partial class CardLogicBase
|
||||
{
|
||||
[Header("Reference")] public CardData cardData;
|
||||
[Header("Reference")]
|
||||
public CardData cardData;
|
||||
public CardInstance cardInstance;
|
||||
|
||||
public ICardOwner owner => cardInstance.owner;
|
||||
@@ -32,6 +35,31 @@ namespace Continentis.MainGame.Card
|
||||
public PlaySubmodule playSubmodule { get; private set; }
|
||||
public HashSet<CardLogicComponentBase> logicComponents { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// 生成卡牌逻辑实例
|
||||
/// </summary>
|
||||
public static CardLogicBase GenerateCardLogic(CardData data)
|
||||
{
|
||||
string typeID = ModManager.GetTypeID(data.modName, "Cards", data.className);
|
||||
Type logicType = ModManager.GetType(typeID);
|
||||
|
||||
if(logicType == null)
|
||||
{
|
||||
Debug.LogError($"Card class '{typeID}' not found in assemblies.");
|
||||
return null;
|
||||
}
|
||||
|
||||
if (Activator.CreateInstance(logicType) is CardLogicBase cardLogic)
|
||||
{
|
||||
cardLogic.cardData = data;
|
||||
cardLogic.Setup();
|
||||
return cardLogic;
|
||||
}
|
||||
|
||||
Debug.LogError($"Card class '{typeID}' not found or could not be instantiated.");
|
||||
return null;
|
||||
}
|
||||
|
||||
public void Setup()
|
||||
{
|
||||
this.cardID = Guid.NewGuid();
|
||||
@@ -72,7 +100,7 @@ namespace Continentis.MainGame.Card
|
||||
{
|
||||
if (logicComponents.Any(component => component is T))
|
||||
{
|
||||
Debug.LogWarning($"Card {cardData.classFullName} already has component of type {typeof(T)}, cannot add duplicate.");
|
||||
Debug.LogWarning($"Card {cardData.className} already has component of type {typeof(T)}, cannot add duplicate.");
|
||||
return null;
|
||||
}
|
||||
else
|
||||
@@ -99,7 +127,7 @@ namespace Continentis.MainGame.Card
|
||||
cardInstance.DestroyHandCardView();
|
||||
|
||||
CardData newData = cardData.upgradeNode.upgradeCards[0]; //后续可改为选择升级方向
|
||||
CardLogicBase newLogic = newData.GenerateCardLogic();
|
||||
CardLogicBase newLogic = CardLogicBase.GenerateCardLogic(newData);
|
||||
cardInstance.cardLogic = newLogic;
|
||||
newLogic.cardInstance = cardInstance;
|
||||
cardInstance.cardLogic.Initialize();
|
||||
|
||||
Reference in New Issue
Block a user