Add new meta files and interfaces for project structure
This commit is contained in:
11
Assets/Scripts/Data/Character.cs
Normal file
11
Assets/Scripts/Data/Character.cs
Normal file
@@ -0,0 +1,11 @@
|
||||
using Sirenix.OdinInspector;
|
||||
using Sirenix.Serialization;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Data
|
||||
{
|
||||
public class Character : MonoBehaviour
|
||||
{
|
||||
[OdinSerialize, InlineProperty] public CharacterAttributes attributes = new();
|
||||
}
|
||||
}
|
3
Assets/Scripts/Data/Character.cs.meta
Normal file
3
Assets/Scripts/Data/Character.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 44b572240c4243c9954bd19967bfeb64
|
||||
timeCreated: 1752255110
|
266
Assets/Scripts/Data/CharacterAttributes.cs
Normal file
266
Assets/Scripts/Data/CharacterAttributes.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
3
Assets/Scripts/Data/CharacterAttributes.cs.meta
Normal file
3
Assets/Scripts/Data/CharacterAttributes.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ec34b2d212ec4a40aa3f6365010831d2
|
||||
timeCreated: 1752254981
|
Reference in New Issue
Block a user