using System; using System.Collections.Generic; using Fantasy; using Fantasy.Entitas; using UnityEngine; namespace NBF { public class Player : Entity { /// /// 是否本地玩家 /// public bool IsLocalPlayer; public bool IsLureRod => false; public bool IsSelf => RoleModel.Instance.Id == Id; // ========== 物理状态(高频同步) ========== public Vector3 Position; public Quaternion Rotation; public Vector2 MoveInput; public float Speed; public float RotationSpeed; public bool IsGrounded; public bool Run; public float EyeAngle; /// /// 标志量 /// public long TagValue; /// /// 上一个状态 /// public PlayerState PreviousState; /// /// 当前状态 /// public PlayerState State; /// /// 状态参数 /// public StateEnterParams StateParams; /// /// 玩家的物品 /// public Dictionary Items = new Dictionary(); /// /// 当前手持物品id /// public long HandItemId; /// /// 当前手持物品 /// public PlayerItem HandItem => Items[HandItemId]; #region 初始化 public void InitPlayer(MapUnitInfo unitInfo) { AddComponent(); AddComponent(); if (unitInfo.Id == RoleModel.Instance.Id) { //自己 AddComponent(); } } #endregion #region 物品 public void UnUseItem() { if (Items.TryGetValue(HandItemId, out var item)) { item.Dispose(); } HandItemId = 0; ItemChangeEvent(); } public void UseItem(ItemBindInfo item) { var playerItem = Create(Scene); playerItem.Init(item); ItemChangeEvent(); } private void ItemChangeEvent() { Scene.EventComponent.Publish(new PlayerStateChangeEvent { Player = this }); } #endregion #region 状态切换 /// /// 切换状态 /// /// /// public void ChangeState(PlayerState state, StateEnterParams stateParams = null) { if (state == State) { return; } PreviousState = State; State = state; StateParams = stateParams; Scene.EventComponent.Publish(new PlayerStateChangeEvent { Player = this }); } #endregion } }