90 lines
3.5 KiB
C#
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;
|
|
}
|
|
}
|
|
} |