Add new meta files and interfaces for project structure

This commit is contained in:
2025-07-11 21:46:14 +02:00
commit 43c1730ed5
3230 changed files with 1428743 additions and 0 deletions

View File

@@ -0,0 +1,266 @@
using System;
using Sirenix.OdinInspector;
using Sirenix.Serialization;
namespace Data
{
[Serializable]
public class CharacterAttributes
{
[OdinSerialize] public float health = 100f;
[OdinSerialize] public float maxHealth = 100f;
[OdinSerialize] public float moveSpeed = 5f;
[OdinSerialize] public float luck = 0f;
[OdinSerialize] public float armor = 0f;
[OdinSerialize, PropertyTooltip("This is damage multiplier")]
public float damage = 1f;
[OdinSerialize, PropertyTooltip("This is damage multiplier for ranged attacks")]
public float rangedDamage = 1f;
[OdinSerialize, PropertyTooltip("This is damage multiplier for melee attacks")]
public float meleeDamage = 1f;
[OdinSerialize] public float attackRange = 16f;
[OdinSerialize] public float attackSpeed = 1f;
public event Action<float> OnHealthChanged;
public event Action<float> OnMaxHealthChanged;
public event Action<float> OnMoveSpeedChanged;
public event Action<float> OnLuckChanged;
public event Action<float> OnArmorChanged;
public event Action<float> OnDamageChanged;
public event Action<float> OnRangedDamageChanged;
public event Action<float> OnMeleeDamageChanged;
public event Action<float> OnAttackRangeChanged;
public event Action<float> OnAttackSpeedChanged;
public float Health
{
get => health;
private set
{
if (Math.Abs(health - value) < float.Epsilon) return;
health = value;
OnHealthChanged?.Invoke(health);
}
}
public float MaxHealth
{
get => maxHealth;
private set
{
if (Math.Abs(maxHealth - value) < float.Epsilon) return;
maxHealth = value;
OnMaxHealthChanged?.Invoke(maxHealth);
}
}
public float MoveSpeed
{
get => moveSpeed;
private set
{
if (Math.Abs(moveSpeed - value) < float.Epsilon) return;
moveSpeed = value;
OnMoveSpeedChanged?.Invoke(moveSpeed);
}
}
public float Luck
{
get => luck;
private set
{
if (Math.Abs(luck - value) < float.Epsilon) return;
luck = value;
OnLuckChanged?.Invoke(luck);
}
}
public float Armor
{
get => armor;
private set
{
if (Math.Abs(armor - value) < float.Epsilon) return;
armor = value;
OnArmorChanged?.Invoke(armor);
}
}
public float Damage
{
get => damage;
private set
{
if (Math.Abs(damage - value) < float.Epsilon) return;
damage = value;
OnDamageChanged?.Invoke(damage);
}
}
public float RangedDamage
{
get => rangedDamage;
private set
{
if (Math.Abs(rangedDamage - value) < float.Epsilon) return;
rangedDamage = value;
OnRangedDamageChanged?.Invoke(rangedDamage);
}
}
public float MeleeDamage
{
get => meleeDamage;
private set
{
if (Math.Abs(meleeDamage - value) < float.Epsilon) return;
meleeDamage = value;
OnMeleeDamageChanged?.Invoke(meleeDamage);
}
}
public float AttackRange
{
get => attackRange;
private set
{
if (Math.Abs(attackRange - value) < float.Epsilon) return;
attackRange = value;
OnAttackRangeChanged?.Invoke(attackRange);
}
}
public float AttackSpeed
{
get => attackSpeed;
private set
{
if (Math.Abs(attackSpeed - value) < float.Epsilon) return;
attackSpeed = value;
OnAttackSpeedChanged?.Invoke(attackSpeed);
}
}
public void SetHealth(float value)
{
Health = Math.Clamp(value, 0, MaxHealth);
}
public void SetMaxHealth(float value)
{
MaxHealth = Math.Max(value, 0);
if (Health > MaxHealth)
{
Health = MaxHealth;
}
}
public void SetMoveSpeed(float value)
{
MoveSpeed = Math.Max(value, 0);
}
public void SetLuck(float value)
{
Luck = Math.Max(value, 0);
}
public void SetArmor(float value)
{
Armor = Math.Max(value, 0);
}
public void SetDamage(float value)
{
Damage = Math.Max(value, 0);
}
public void SetRangedDamage(float value)
{
RangedDamage = Math.Max(value, 0);
}
public void SetMeleeDamage(float value)
{
MeleeDamage = Math.Max(value, 0);
}
public void SetAttackRange(float value)
{
AttackRange = Math.Max(value, 0);
}
public void SetAttackSpeed(float value)
{
AttackSpeed = Math.Max(value, 0);
}
public void ModifyHealth(float delta)
{
SetHealth(Health + delta);
}
public void ModifyMaxHealth(float delta)
{
SetMaxHealth(MaxHealth + delta);
}
public void ModifyMoveSpeed(float delta)
{
SetMoveSpeed(MoveSpeed + delta);
}
public void ModifyLuck(float delta)
{
SetLuck(Luck + delta);
}
public void ModifyArmor(float delta)
{
SetArmor(Armor + delta);
}
public void ModifyDamage(float delta)
{
SetDamage(Damage + delta);
}
public void ModifyRangedDamage(float delta)
{
SetRangedDamage(RangedDamage + delta);
}
public void ModifyMeleeDamage(float delta)
{
SetMeleeDamage(MeleeDamage + delta);
}
public void ModifyAttackRange(float delta)
{
SetAttackRange(AttackRange + delta);
}
public void ModifyAttackSpeed(float delta)
{
SetAttackSpeed(AttackSpeed + delta);
}
public void Reset()
{
Health = MaxHealth = 100f;
MoveSpeed = 5f;
Luck = 0f;
Armor = 0f;
Damage = 1f;
RangedDamage = 1f;
MeleeDamage = 1f;
AttackRange = 16f;
AttackSpeed = 1f;
}
}
}