调整部分数据表配置,优化 SpriteCache 功能

This commit is contained in:
2026-09-13 20:36:21 +08:00
parent de53890de6
commit 7dc529a840
520 changed files with 24231 additions and 967 deletions
@@ -0,0 +1,38 @@
using System;
using SepCore.Definition;
using UnityEngine;
namespace SepCore.Entity
{
[Serializable]
public abstract class AccessoryObjectData : EntityDataBase
{
[SerializeField] private int _ownerId = 0;
[SerializeField] private CampType _ownerCamp = CampType.Unknown;
public AccessoryObjectData(string assetName, int entityId, int ownerId, CampType ownerCamp)
: base(assetName, entityId)
{
_ownerId = ownerId;
_ownerCamp = ownerCamp;
}
public AccessoryObjectData(int entityId, int typeId, int ownerId, CampType ownerCamp)
: base(entityId, typeId)
{
_ownerId = ownerId;
_ownerCamp = ownerCamp;
}
/// <summary>
/// 拥有者编号。
/// </summary>
public int OwnerId => _ownerId;
/// <summary>
/// 拥有者阵营。
/// </summary>
public CampType OwnerCamp => _ownerCamp;
}
}
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 83cb841b7411a844581691d5547bf866
timeCreated: 1528026151
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,18 @@
namespace SepCore.Entity
{
public class CoinData : EntityDataBase
{
private int _value;
public CoinData(int value, int entityId, string assetName = "CoinEntity") : base(assetName, entityId)
{
_value = value;
}
public int Value
{
get => _value;
set => _value = value;
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: d9caee22d67a42018113acc77155d6ba
timeCreated: 1770292597
@@ -0,0 +1,25 @@
using System;
using UnityEngine;
namespace SepCore.Entity
{
[Serializable]
public class EffectData : EntityDataBase
{
[SerializeField]
private float _keepTime = 0f;
public EffectData(int entityId, string assetName = "Effect")
: base(assetName, entityId)
{
_keepTime = 3f;
}
public EffectData(int entityId, int typeId)
: this(entityId, typeId.ToString())
{
}
public float KeepTime => _keepTime;
}
}
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: e5b93dcbe30421a429c196bda0af31ed
timeCreated: 1528026152
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 611437bd292819b439512f684e13c7e3
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,62 @@
using System;
using System.Collections.Generic;
using SepCore.Definition;
using UnityEngine;
namespace SepCore.Entity
{
[Serializable]
public class EnemyData : TargetableObjectData
{
private readonly EnemyConfig _enemyConfig;
public EnemyData(int entityId, EnemyConfig enemyConfig, int level)
: base(enemyConfig.Prefab, entityId, CampType.Enemy)
{
_enemyConfig = enemyConfig;
int effectiveLevel = Mathf.Max(1, level);
MaxHealthBase = enemyConfig.MaxHealth + enemyConfig.HpAddPerLevel * (effectiveLevel - 1);
}
public EnemyType EnemyType => _enemyConfig.EnemyType;
public string LogicType => _enemyConfig.LogicType;
public override int MaxHealthBase { get; }
public int AttackDamage => _enemyConfig.AttackDamage;
public float AttackCooldown => _enemyConfig.AttackCooldown;
public float AttackRange => _enemyConfig.AttackRange;
public float SpeedBase => _enemyConfig.Speed;
public int DropCoin => _enemyConfig.CoinDrop;
public int DropExp => _enemyConfig.ExpDrop;
public float DropPercent => _enemyConfig.DropPercent;
public float Scale => _enemyConfig.Scale;
public Color Color
{
get
{
// 空/非法颜色值视为无染色(乘以白色)。
return ColorUtility.TryParseHtmlString(_enemyConfig.Color, out Color color)
? color
: Color.white;
}
}
public IReadOnlyDictionary<string, string> Params => null;
public bool TryGetParam(string key, out string value)
{
value = null;
return false;
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 1b802c30cc274e04929b8659ec631e84
timeCreated: 1768890974
@@ -0,0 +1,29 @@
using System;
using SepCore.Definition;
using UnityEngine;
namespace SepCore.Entity
{
[Serializable]
public class EnemyProjectileData : EntityDataBase
{
public EnemyProjectileData(int entityId, int ownerEntityId, CampType ownerCamp, int attackDamage,
float speed, float lifeTime, Vector3 direction, string assetName = "BulletHandgun")
: base(assetName, entityId)
{
OwnerEntityId = ownerEntityId;
OwnerCamp = ownerCamp;
AttackDamage = attackDamage;
Speed = speed;
LifeTime = lifeTime;
Direction = direction;
}
public int OwnerEntityId { get; }
public CampType OwnerCamp { get; }
public int AttackDamage { get; }
public float Speed { get; }
public float LifeTime { get; }
public Vector3 Direction { get; }
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 52b38f83ab6c4029803d40c189db47c7
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,65 @@
using System;
using UnityEngine;
namespace SepCore.Entity
{
[Serializable]
public abstract class EntityDataBase
{
[SerializeField] private string m_AssetName = string.Empty;
[SerializeField] private int _id = 0;
[SerializeField] private int _typeId = 0;
[SerializeField] private Vector3 _position = Vector3.zero;
[SerializeField] private Quaternion _rotation = Quaternion.identity;
public EntityDataBase(string assetName, int entityId)
{
m_AssetName = assetName;
_id = entityId;
}
public EntityDataBase(int entityId, int typeId)
{
m_AssetName = typeId.ToString();
_id = entityId;
_typeId = typeId;
}
/// <summary>
/// 实体资源名称。
/// </summary>
public string AssetName => m_AssetName;
/// <summary>
/// 实体编号。
/// </summary>
public int Id => _id;
/// <summary>
/// 实体类型编号(向后兼容)。
/// </summary>
public int TypeId => _typeId;
/// <summary>
/// 实体位置。
/// </summary>
public Vector3 Position
{
get => _position;
set => _position = value;
}
/// <summary>
/// 实体朝向。
/// </summary>
public Quaternion Rotation
{
get => _rotation;
set => _rotation = value;
}
}
}
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: afb91fe3ed8105e4a96b7bd5917ecc2b
timeCreated: 1528026152
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,18 @@
namespace SepCore.Entity
{
public class ExpData : EntityDataBase
{
private int _value;
public ExpData(int value, int entityId, string assetName = "ExpEntity") : base(assetName, entityId)
{
_value = value;
}
public int Value
{
get => _value;
set => _value = value;
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: e0f6c8e117da49f1ad04fd8810882043
timeCreated: 1770292932
@@ -0,0 +1,18 @@
using System;
using SepCore.Definition;
namespace SepCore.Entity
{
[Serializable]
public class PlayerData : TargetableObjectData
{
private int _maxExp;
public PlayerData(int entityId, string assetName = "Player") : base(assetName, entityId, CampType.Player)
{
MaxHealthBase = 100;
}
public override int MaxHealthBase { get; }
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: b69d3168ac4f442994f8dc4d906daa60
timeCreated: 1768890638
@@ -0,0 +1,33 @@
using System;
using SepCore.Definition;
namespace SepCore.Entity
{
[Serializable]
public abstract class TargetableObjectData : EntityDataBase
{
private CampType _camp;
public TargetableObjectData(string assetName, int entityId, CampType camp)
: base(assetName, entityId)
{
_camp = camp;
}
public TargetableObjectData(int entityId, int typeId, CampType camp)
: base(entityId, typeId)
{
_camp = camp;
}
/// <summary>
/// 角色阵营。
/// </summary>
public CampType Camp => _camp;
/// <summary>
/// 最大生命。
/// </summary>
public abstract int MaxHealthBase { get; }
}
}
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: f866c15cf3f2a45429251d4a66f70c77
timeCreated: 1528026152
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: d8b2591453b7f0841940c8e45528f465
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,59 @@
using System;
using System.Collections.Generic;
using SepCore.Definition;
namespace SepCore.Entity
{
[Serializable]
public class WeaponData : AccessoryObjectData
{
private readonly WeaponConfig _weaponConfig;
public WeaponData(int entityId, WeaponConfig weaponConfig, int ownerId, CampType ownerCamp)
: base(weaponConfig.Prefab, entityId, ownerId, ownerCamp)
{
_weaponConfig = weaponConfig;
}
public WeaponConfig Config => _weaponConfig;
public WeaponType WeaponType => _weaponConfig.WeaponType;
public string LogicType => _weaponConfig.LogicType;
public int Attack => _weaponConfig.Attack;
public string Title => _weaponConfig.WeaponType.ToString();
public string IconAssetName => _weaponConfig.Sprite;
public Rarity Rarity => _weaponConfig.Rarity;
public int Price => _weaponConfig.Price;
public float Cooldown => _weaponConfig.Cooldown / 1000f;
public float AttackRange => _weaponConfig.AttackRange / 1000f;
public int AttackSoundId => _weaponConfig.AttackSoundId;
public IReadOnlyDictionary<ParamType, int> Parameters => _weaponConfig.Parameters;
public IReadOnlyList<modifier> Modifiers => _weaponConfig.Modifiers;
public int GetParam(ParamType paramType, int defaultValue = 0)
{
return _weaponConfig.Parameters.TryGetValue(paramType, out int value) ? value : defaultValue;
}
public float GetParamFloat(ParamType paramType, float defaultValue = 0f)
{
if (_weaponConfig.Parameters.TryGetValue(paramType, out int val))
{
return paramType == ParamType.SectorAngle ? val : val / 1000f;
}
return defaultValue;
}
}
}
@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: e813e3219579f834d8e619c17a8083d4
timeCreated: 1528026153
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,21 @@
using System;
using SepCore.Definition;
namespace SepCore.Entity
{
[Serializable]
public sealed class WeaponHandgunParamsData
{
}
public class WeaponHandgunData : WeaponData
{
public WeaponHandgunParamsData ParamsData { get; }
public WeaponHandgunData(int entityId, WeaponConfig weaponConfig, int ownerId, CampType ownerCamp)
: base(entityId, weaponConfig, ownerId, ownerCamp)
{
ParamsData = new WeaponHandgunParamsData();
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 574d105bf89bf7546a682ed407708034
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,25 @@
using System;
using SepCore.Definition;
namespace SepCore.Entity
{
[Serializable]
public sealed class WeaponKnifeParamsData
{
public float HitRadius { get; set; }
}
public class WeaponKnifeData : WeaponData
{
public WeaponKnifeParamsData ParamsData { get; }
public WeaponKnifeData(int entityId, WeaponConfig weaponConfig, int ownerId, CampType ownerCamp)
: base(entityId, weaponConfig, ownerId, ownerCamp)
{
ParamsData = new WeaponKnifeParamsData
{
HitRadius = GetParamFloat(ParamType.HitRadius)
};
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: da25d8e0669f0194d8f56f4283c67b38
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,76 @@
using System;
using SepCore.Definition;
namespace SepCore.Entity
{
[Serializable]
public sealed class WeaponLanceParamsData
{
/// <summary>
/// 横向半宽,表示前戳矩形判定的一半宽度。
/// </summary>
public float HitHalfWidth { get; set; }
/// <summary>
/// 旧字段兼容,未配置 HitHalfWidth 时回退使用。
/// </summary>
public float HitRadius { get; set; }
/// <summary>
/// 前戳判定盒体的总高度。
/// </summary>
public float HitHeight { get; set; }
/// <summary>
/// 判定盒体中心相对战斗平面的高度偏移。
/// </summary>
public float HitCenterYOffset { get; set; }
/// <summary>
/// 前刺距离,同时驱动武器位移和命中长度。
/// </summary>
public float PierceLength { get; set; }
/// <summary>
/// 旧字段兼容,未配置 PierceLength 时回退使用。
/// </summary>
public float ThrustDistance { get; set; }
/// <summary>
/// 判定起点相对武器当前位置的前置偏移。
/// </summary>
public float ForwardOffset { get; set; }
/// <summary>
/// 追踪目标时的转向速度。
/// </summary>
public float RotateSpeed { get; set; }
/// <summary>
/// 向前突刺阶段耗时。
/// </summary>
public float AttackDuration { get; set; }
/// <summary>
/// 收枪返回阶段耗时。
/// </summary>
public float ReturnDuration { get; set; }
}
[Serializable]
public class WeaponLanceData : WeaponData
{
public WeaponLanceParamsData ParamsData { get; }
public WeaponLanceData(int entityId, WeaponConfig weaponConfig, int ownerId, CampType ownerCamp)
: base(entityId, weaponConfig, ownerId, ownerCamp)
{
ParamsData = new WeaponLanceParamsData
{
HitHalfWidth = GetParamFloat(ParamType.HitHalfWidth),
PierceLength = GetParamFloat(ParamType.PierceLength),
HitHeight = GetParamFloat(ParamType.HitHeight)
};
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 4d1a821e8ee1a9a4b912b70b0a1616eb
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,27 @@
using System;
using SepCore.Definition;
namespace SepCore.Entity
{
[Serializable]
public sealed class WeaponLightningParamsData
{
public float HitRadius { get; set; }
public float HoverHeight { get; set; }
}
public class WeaponLightningData : WeaponData
{
public WeaponLightningParamsData ParamsData { get; }
public WeaponLightningData(int entityId, WeaponConfig weaponConfig, int ownerId, CampType ownerCamp)
: base(entityId, weaponConfig, ownerId, ownerCamp)
{
ParamsData = new WeaponLightningParamsData
{
HitRadius = GetParamFloat(ParamType.HitRadius),
HoverHeight = 0f
};
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 25b0006918fd46959c7f6b8ec1bbc8ab
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,25 @@
using System;
using SepCore.Definition;
namespace SepCore.Entity
{
[Serializable]
public sealed class WeaponSlashParamsData
{
public float SectorAngle { get; set; }
}
public class WeaponSlashData : WeaponData
{
public WeaponSlashParamsData ParamsData { get; }
public WeaponSlashData(int entityId, WeaponConfig weaponConfig, int ownerId, CampType ownerCamp)
: base(entityId, weaponConfig, ownerId, ownerCamp)
{
ParamsData = new WeaponSlashParamsData
{
SectorAngle = GetParamFloat(ParamType.SectorAngle)
};
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 4aa6473525dc4c62aeee02ff562ec453
timeCreated: 1771484661