73 lines
2.6 KiB
C#
73 lines
2.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using Continentis.MainGame.Character;
|
|
using SLSUtilities.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 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.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);
|
|
|
|
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;
|
|
}
|
|
}
|
|
} |