Files
Continentis/Assets/Scripts/MainGame/Character/CharacterBase.cs

136 lines
4.3 KiB
C#
Raw Normal View History

2025-10-25 07:49:39 -04:00
using System;
2025-10-03 00:02:43 -04:00
using System.Collections.Generic;
using System.Linq;
using Continentis.MainGame.Card;
2025-10-23 00:49:44 -04:00
using Continentis.MainGame.Combat;
using NaughtyAttributes;
2025-11-15 09:08:36 -05:00
using SLSFramework.UModAssistance;
2025-10-03 00:02:43 -04:00
using UnityEngine;
2025-10-25 07:49:39 -04:00
using Object = UnityEngine.Object;
using Random = UnityEngine.Random;
2025-10-03 00:02:43 -04:00
namespace Continentis.MainGame.Character
{
public enum Fraction
{
Player,
Ally,
Enemy,
Neutral
}
public interface ICardOwner
{
DeckSubmodule deckSubmodule { get; }
}
2025-10-25 07:49:39 -04:00
public partial class CharacterBase : ICardOwner, IGameElement
2025-10-03 00:02:43 -04:00
{
2025-10-25 07:49:39 -04:00
public Guid elementID { get; set; }
2025-10-03 00:02:43 -04:00
public CharacterData data;
2025-11-15 09:08:36 -05:00
public CharacterLogicBase logicBase;
2025-10-03 00:02:43 -04:00
public Fraction fraction;
2025-10-23 00:49:44 -04:00
public CombatTeam team;
2025-10-03 00:02:43 -04:00
2025-10-23 00:49:44 -04:00
public int actionCountThisRound;
[ShowNativeProperty]
2025-10-03 00:02:43 -04:00
public AttributeSubmodule attributeSubmodule { get; private set; }
2025-10-23 00:49:44 -04:00
[ShowNativeProperty]
2025-10-03 00:02:43 -04:00
public EventSubmodule eventSubmodule { get; private set; }
2025-10-23 00:49:44 -04:00
[ShowNativeProperty]
2025-10-03 00:02:43 -04:00
public EquipmentSubmodule equipmentSubmodule { get; private set; }
2025-10-23 00:49:44 -04:00
[ShowNativeProperty]
2025-10-03 00:02:43 -04:00
public DeckSubmodule deckSubmodule { get; private set; }
2025-10-23 00:49:44 -04:00
[ShowNativeProperty]
2025-10-03 00:02:43 -04:00
public IntentionSubmodule intentionSubmodule { get; private set; }
2025-10-23 00:49:44 -04:00
[ShowNativeProperty]
2025-10-03 00:02:43 -04:00
public StatusSubmodule statusSubmodule { get; private set; }
2025-10-23 00:49:44 -04:00
[ShowNativeProperty]
2025-10-03 00:02:43 -04:00
public CombatBuffSubmodule combatBuffSubmodule { get; private set; }
2025-11-15 09:08:36 -05:00
[ShowNativeProperty]
public RecordSubmodule recordSubmodule { get; private set; }
2025-10-03 00:02:43 -04:00
2025-11-15 12:17:34 -05:00
public CharacterBase(CharacterData data, Fraction fraction)
2025-10-03 00:02:43 -04:00
{
2025-10-25 07:49:39 -04:00
(this as IGameElement).Initialize();
2025-11-15 09:08:36 -05:00
this.data = data;
2025-11-15 12:17:34 -05:00
this.fraction = fraction;
2025-11-15 09:08:36 -05:00
2025-10-23 00:49:44 -04:00
switch (fraction)
{
case Fraction.Player:
this.team = CombatMainManager.Instance.characterController.playerTeam;
break;
case Fraction.Enemy:
this.team = CombatMainManager.Instance.characterController.enemyTeam;
break;
default:
this.team = null;
break;
}
2025-10-24 09:11:22 -04:00
2025-10-03 00:02:43 -04:00
attributeSubmodule = new AttributeSubmodule(this);
equipmentSubmodule = new EquipmentSubmodule(this);
eventSubmodule = new EventSubmodule(this);
deckSubmodule = new DeckSubmodule(this);
intentionSubmodule = new IntentionSubmodule(this);
statusSubmodule = new StatusSubmodule(this);
combatBuffSubmodule = new CombatBuffSubmodule(this);
2025-11-15 09:08:36 -05:00
recordSubmodule = new RecordSubmodule(this);
2025-10-03 00:02:43 -04:00
2025-11-15 09:08:36 -05:00
this.logicBase = GenerateCharacterLogic(data);
this.logicBase.Initialize(this);
}
/// <summary>
/// 生成卡牌逻辑实例
/// </summary>
public static CharacterLogicBase GenerateCharacterLogic(CharacterData data)
{
string typeID = ModManager.GetTypeID(data.modName, "Characters", "", data.className);
Type logicType = ModManager.GetType(typeID);
2025-10-03 00:02:43 -04:00
2025-11-15 09:08:36 -05:00
if(logicType == null)
2025-10-03 00:02:43 -04:00
{
2025-11-15 09:08:36 -05:00
return new CharacterLogicBase();
2025-10-03 00:02:43 -04:00
}
2025-11-15 09:08:36 -05:00
if (Activator.CreateInstance(logicType) is CharacterLogicBase logic)
2025-10-03 00:02:43 -04:00
{
2025-11-15 09:08:36 -05:00
return logic;
2025-10-03 00:02:43 -04:00
}
2025-11-15 09:08:36 -05:00
Debug.LogError($"Card class '{typeID}' not found or could not be instantiated.");
return null;
2025-10-03 00:02:43 -04:00
}
}
2025-11-15 09:08:36 -05:00
public partial class CharacterBase
{
public CombatCharacterViewBase characterView;
}
2025-10-03 00:02:43 -04:00
public partial class CharacterBase
{
public CombatCharacterViewBase GenerateCharacterView(Vector3 position)
{
2025-10-23 00:49:44 -04:00
GameObject prefab = data.combatCharacterView;
2025-10-03 00:02:43 -04:00
CombatCharacterViewBase characterView = Object.Instantiate(prefab, position, Quaternion.identity).GetComponent<CombatCharacterViewBase>();
2025-10-23 00:49:44 -04:00
characterView.InitializeAnimations();
2025-10-03 00:02:43 -04:00
characterView.character = this;
this.characterView = characterView;
return characterView;
}
}
}