sleep increase the energy
This commit is contained in:
@@ -1,9 +1,5 @@
|
||||
using Assets.Scripts.Actions.Interfaces;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Runtime.Serialization;
|
||||
using UnityEngine;
|
||||
using UnityEngine.AI;
|
||||
|
||||
@@ -21,10 +17,10 @@ public class Player : MonoBehaviour
|
||||
[SerializeField]
|
||||
private Transform _holdPoint;
|
||||
|
||||
private PlayerStates _currentActing;
|
||||
private AnimationStates _currentAnimation;
|
||||
|
||||
public Dictionary<StatsId, Stat> Stats;
|
||||
public IWorkPlace WorkPlace { get; set; }
|
||||
|
||||
private readonly Queue<PlayerTasks> _tasks = new Queue<PlayerTasks>();
|
||||
private PlayerTasks _currentTask;
|
||||
@@ -47,12 +43,14 @@ public class Player : MonoBehaviour
|
||||
Instance = this;
|
||||
DontDestroyOnLoad(gameObject);
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
TimeManager.OnMinuteChanged += UpdateStatsByClock;
|
||||
_animator.applyRootMotion = true;
|
||||
_navAgent.updatePosition = false;
|
||||
Stats = PlayerStats.CreateInitialStats();
|
||||
_currentActing = PlayerStates.Awake;
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
@@ -62,7 +60,7 @@ public class Player : MonoBehaviour
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (IsBlockingAnimation(_currentAnimation))
|
||||
if (PlayerHelper.IsBlockingAnimation(_currentAnimation))
|
||||
{
|
||||
if (IsAnimationStatePlaying(0))
|
||||
{
|
||||
@@ -116,7 +114,6 @@ public class Player : MonoBehaviour
|
||||
{
|
||||
_navAgent.Warp(desiredPosition);
|
||||
_navAgent.updatePosition = false;
|
||||
|
||||
}
|
||||
|
||||
private TaskStatus MoveToPoint()
|
||||
@@ -176,20 +173,20 @@ public class Player : MonoBehaviour
|
||||
_OnAnimationFinish = onAnimationFinish;
|
||||
SetPlayerAnimation(newState);
|
||||
}
|
||||
|
||||
public void SetPlayerAnimation(AnimationStates newState)
|
||||
{
|
||||
if (newState == _currentAnimation)
|
||||
{
|
||||
return;
|
||||
}
|
||||
_animator.Play(GetEnumMemberValue(newState));
|
||||
_animator.Play(PlayerHelper.GetEnumMemberValue(newState));
|
||||
_currentAnimation = newState;
|
||||
}
|
||||
|
||||
|
||||
public bool IsAnimationStatePlaying(int animLayer)
|
||||
{
|
||||
string stateName = GetEnumMemberValue(_currentAnimation);
|
||||
string stateName = PlayerHelper.GetEnumMemberValue(_currentAnimation);
|
||||
var stateInfo = _animator.GetCurrentAnimatorStateInfo(animLayer);
|
||||
return stateInfo.IsName(stateName) && stateInfo.normalizedTime < 1.0f;
|
||||
|
||||
@@ -200,17 +197,21 @@ public class Player : MonoBehaviour
|
||||
_tasks.Enqueue(task);
|
||||
}
|
||||
|
||||
public void SetPlayerActing(PlayerStates state)
|
||||
{
|
||||
_currentActing = state;
|
||||
}
|
||||
|
||||
public void UpdateStatsByClock()
|
||||
{
|
||||
Stats[StatsId.Food].deduct(0.034f); // 48 hours it's 100, 100/2880=~0.034 per minute
|
||||
if (_currentAnimation != AnimationStates.Sleeping)
|
||||
if (_currentActing != PlayerStates.Sleeping)
|
||||
{
|
||||
Stats[StatsId.Energy].deduct(0.1f); // 24 hours it's 100, 100/1440=~0.096 per minute
|
||||
}
|
||||
else
|
||||
{
|
||||
Stats[StatsId.Energy].increase(1f);
|
||||
|
||||
Stats[StatsId.Energy].increase(0.2f);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -218,41 +219,13 @@ public class Player : MonoBehaviour
|
||||
{
|
||||
Stats[StatsId.Money].deduct(amount);
|
||||
}
|
||||
|
||||
public float Eat()
|
||||
{
|
||||
Stats[StatsId.Food].increase(10);
|
||||
return Stats[StatsId.Food].Value;
|
||||
}
|
||||
|
||||
private static string GetEnumMemberValue<T>(T value)
|
||||
where T : struct, IConvertible
|
||||
{
|
||||
return typeof(T)
|
||||
.GetTypeInfo()
|
||||
.DeclaredMembers
|
||||
.SingleOrDefault(x => x.Name == value.ToString())
|
||||
?.GetCustomAttribute<EnumMemberAttribute>(false)
|
||||
?.Value;
|
||||
}
|
||||
|
||||
private static bool IsBlockingAnimation<T>(T value)
|
||||
where T : struct, IConvertible
|
||||
{
|
||||
var enumType = typeof(T);
|
||||
var memInfo = enumType.GetMember(value.ToString());
|
||||
var attr = memInfo.FirstOrDefault()?.GetCustomAttributes(false).OfType<BlockingAnimation>().FirstOrDefault();
|
||||
return attr != null;
|
||||
}
|
||||
|
||||
public void SetContainerItem(ContainerItem containerItem)
|
||||
{
|
||||
containerItem.transform.parent = _holdPoint;
|
||||
containerItem.transform.localPosition = Vector3.zero;
|
||||
_containerItem = containerItem;
|
||||
|
||||
|
||||
}
|
||||
|
||||
public ContainerItem GetContainerItem()
|
||||
{
|
||||
return _containerItem;
|
||||
|
||||
Reference in New Issue
Block a user