Files
Continentis/Assets/Scripts/MainGame/Equipment/EquipmentBase.cs

93 lines
3.6 KiB
C#
Raw Normal View History

2025-10-03 00:02:43 -04:00
using System;
using System.Collections.Generic;
using Continentis.MainGame.Character;
2025-10-23 00:49:44 -04:00
using SLSFramework.UModAssistance;
2025-10-03 00:02:43 -04:00
using UnityEngine;
namespace Continentis.MainGame.Equipment
{
2025-10-23 00:49:44 -04:00
public partial class EquipmentBase
2025-10-03 00:02:43 -04:00
{
2025-10-23 00:49:44 -04:00
[Header("Equipment Data")]
2025-10-03 00:02:43 -04:00
public EquipmentData equipmentData;
2025-10-23 00:49:44 -04:00
[Header("References")]
2025-10-03 00:02:43 -04:00
public CharacterBase character;
2025-10-23 00:49:44 -04:00
[Header("Base Info")]
2025-10-03 00:02:43 -04:00
public Guid equipmentID;
public List<string> tags;
2025-10-23 00:49:44 -04:00
[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()
2025-10-03 00:02:43 -04:00
{
this.equipmentID = Guid.NewGuid();
this.tags = new List<string>(equipmentData.tags);
2025-10-23 00:49:44 -04:00
this.coreAttributeSubmodule = new AttributeSubmodule(this, equipmentData.coreNumericChange,
2025-10-03 00:02:43 -04:00
equipmentData.corePercentageChangeOfAccumulation, equipmentData.corePercentageChangeOfMultiplication);
2025-10-23 00:49:44 -04:00
this.generalAttributeSubmodule = new AttributeSubmodule(this, equipmentData.generalNumericChange,
2025-10-03 00:02:43 -04:00
equipmentData.generalPercentageChangeOfAccumulation, equipmentData.generalPercentageChangeOfMultiplication);
2025-10-23 00:49:44 -04:00
this.eventSubmodule = new EventSubmodule(this);
this.contentSubmodule = new ContentSubmodule(this);
}
public virtual void Initialize(CharacterBase character)
{
2025-10-03 00:02:43 -04:00
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
{
2025-10-23 00:49:44 -04:00
public static EquipmentBase GenerateEquipment(EquipmentData data, CharacterBase character = null)
{
2025-10-24 09:11:22 -04:00
string typeID = "NoFunctionEquipment";
Type logicType = typeof(EquipmentBase);
2025-10-23 00:49:44 -04:00
2025-10-24 09:11:22 -04:00
if (data.haveCustomClass)
2025-10-23 00:49:44 -04:00
{
2025-10-24 09:11:22 -04:00
typeID = ModManager.GetTypeID(data.modName, "Equipments", data.className);
logicType = ModManager.GetType(typeID);
2025-10-23 00:49:44 -04:00
}
if (Activator.CreateInstance(logicType) is EquipmentBase equipment)
{
equipment.equipmentData = data;
equipment.SetUp();
if(character != null) equipment.Initialize(character);
return equipment;
}
2025-10-24 09:11:22 -04:00
Debug.LogError($"Failed to create equipment of type {typeID}");
2025-10-23 00:49:44 -04:00
return null;
}
2025-10-03 00:02:43 -04:00
}
}