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 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(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; } } }