Files
Continentis/Assets/Scripts/MainGame/Equipment/EquipmentBase.cs
SoulliesOfficial d09b58fd80 架构大更
2026-03-20 11:56:50 -04:00

90 lines
3.5 KiB
C#

using System;
using System.Collections.Generic;
using Continentis.MainGame.Character;
using SLSFramework.UModAssistance;
using UnityEngine;
namespace Continentis.MainGame.Equipment
{
public partial class EquipmentBase
{
[Header("Equipment Data")] public EquipmentData equipmentData;
[Header("References")] public CharacterBase character;
[Header("Base Info")] public Guid equipmentID;
public List<string> tags;
[Header("Submodules")] public AttributeSubmodule coreAttributeSubmodule { get; private set; }
public AttributeSubmodule generalAttributeSubmodule { get; private set; }
public EventSubmodule eventSubmodule { get; private set; }
public ContentSubmodule contentSubmodule { get; private set; }
public void SetUp()
{
this.equipmentID = Guid.NewGuid();
this.tags = new List<string>(equipmentData.tags);
this.coreAttributeSubmodule = new AttributeSubmodule(this, equipmentData.coreNumericChange,
equipmentData.corePercentageChangeOfAccumulation, equipmentData.corePercentageChangeOfMultiplication);
this.generalAttributeSubmodule = new AttributeSubmodule(this, equipmentData.generalNumericChange,
equipmentData.generalPercentageChangeOfAccumulation,
equipmentData.generalPercentageChangeOfMultiplication);
this.eventSubmodule = new EventSubmodule(this);
this.contentSubmodule = new ContentSubmodule(this);
}
public virtual void Initialize(CharacterBase character)
{
if (character != null)
{
this.character = character;
this.character.equipmentSubmodule.currentEquipments.Add(this); //TODO: 后续换成装备函数
List<string> coreNames = coreAttributeSubmodule.GetModifiedAttributeNames();
if (coreNames.Count > 0)
{
coreAttributeSubmodule.GetModifiedAttributeNames().ForEach(attributeName =>
{
this.character.attributeSubmodule.RefreshCoreAttribute(attributeName);
});
this.character.attributeSubmodule.RefreshAllGeneralAttributes();
}
else
{
generalAttributeSubmodule.GetModifiedAttributeNames().ForEach(attributeName =>
{
this.character.attributeSubmodule.RefreshGeneralAttribute(attributeName);
});
}
}
}
}
public partial class EquipmentBase
{
public static EquipmentBase GenerateEquipment(EquipmentData data, CharacterBase character = null)
{
string typeID = "NoFunctionEquipment";
Type logicType = typeof(EquipmentBase);
if (data.haveCustomClass)
{
typeID = ModManager.GetTypeID(data.modName, "Equipments", "", data.className);
logicType = ModManager.GetType(typeID);
}
if (Activator.CreateInstance(logicType) is EquipmentBase equipment)
{
equipment.equipmentData = data;
equipment.SetUp();
if (character != null) equipment.Initialize(character);
return equipment;
}
Debug.LogError($"Failed to create equipment of type {typeID}");
return null;
}
}
}