Files
Continentis/Assets/Scripts/MainGame/Equipment/EquipmentBase.cs
SoulliesOfficial 76157e3cb1 继续
2025-10-24 09:11:22 -04:00

93 lines
3.6 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;
}
}
}