GameEntity(十一)—— Iplayer

来源:互联网 发布:测试端口通不通命令 编辑:程序博客网 时间:2024/05/21 14:59

目录为:Assets/Scripts/GameEntity/目录下
Iplayer.cs

player接口

using UnityEngine;using System.Collections;using System.Collections.Generic;using System;//继承Ientitypublic class Iplayer: Ientity{    //吸附特效    private GameObject AbsorbEffect1;    private GameObject AbsorbEffect2;    private GameObject AbsorbEffectDel1;    private GameObject AbsorbEffectDel2;    public GameObject AbsorbProgressEffect    {        get;        set;    }    //构造函数    public Iplayer(UInt64 sGUID, EntityCampType campType)        :base(sGUID, campType)    {        //GameData部分定义        //四个属性:HeadId,Level,Hp,Mp        BattleData = new PlayerBattleData ();    }    public PlayerBattleData BattleData    {        private set;        get;    }    public UInt64 GameUserId;    public string GameUserNick    {        get;        set;    }    public Ientity SyncLockTarget    {        protected set;        get;    }    public bool GameUserIsMaster    {        get;        private set;    }    public bool GameUserIsReady    {        get;        private set;    }    public uint GameUserSeat    {        get;        private set;    }    public int GameHeadId    {        get;        private set;    }    //在GameDefine处定义    //InitType = -1,    //PlayerType,    //PlayerObType,    public ObPlayerOrPlayer ObType    {        get;        private set;    }    //在GameDefine处定义    ///DEUCE,    //WIN,    //LOSE,    public SITUATION StateSituation    {        get;        set;    }    //在GameDefine处定义    //eFuryNullState = 0,    //eFuryFullState,    //eFuryRunState,    public EFuryState FuryState    {        private set;        get;    }    public int FuryValue    {        private set;        get;    }    public int AccountGold    {        private set;        get;    }    public const bool MasterTag = true;    public const bool ReadyTag = true;    public const int GameLookTag = 7;    //默认为60.0f    private float mDefaultHeight = CGLCtrl_GameLogic.Instance.GetGlobalHeight ();    public void SetObjType(ObPlayerOrPlayer obType)    {        ObType = obType;    }    public override void OnEntityPrepareAttack()    {    }    //创建特效    void CreateEffect(ref GameObject Obj, string effectPath)    {        IEffect e = EffectManager.Instance.CreateNormalEffect (effectPath, RealEntity.objAttackPoint.gameObject);        if (e != null)        {            if (Obj != null)            {                GameObject.DestroyImmediate (Obj);                Obj = null;            }            Obj = e.obj;        }    }    //设置吸收特效    public void SetAbsorbEffect(int slot, bool isRemove)    {        if (isRemove == false)        {            if (slot == 0)            {                CreateEffect (ref AbsorbEffect1, "effect/other/soul_01");            }            else            {                CreateEffect (ref AbsorbEffect2, "effect/other/soul_02");                //第二个吸魂特效位置根据第一个吸魂特效位置设置相对位置                if (AbsorbEffect2 && AbsorbEffect1)                {                    Vector3 rot1 = AbsorbEffect1.transform.GetChild (0).transform.localEulerAngles;                    AbsorbEffect2.transform.transform.localEulerAngles = new Vector3 (rot1.x, rot1.y, rot1.z);                }            }        }        else if (isRemove == true)        {            if (slot == 0)            {                DestroyEffect (ref AbsorbEffectDel1, AbsorbEffect1, "effect/other/soul_01_delete");            }            else if (slot == 1)            {                DestroyEffect (ref AbsorbEffectDel2, AbsorbEffect2, "effect/other/soul_02_delete");            }        }    }    //灵魂销毁 特效    void DestroyEffect(ref GameObject desEffect, GameObject TranObj, string delPath)    {        if (TransObj != null)        {            if (desEffect != null)            {                desEffect.transform.parent = null;                GameObject.DestroyImmediate (desEffect);            }            Iplayer player = PlayerManager.Instance.LocalPlayer;            if (player == null)            {                return;            }            ResourceUnit objUnit = ResourcesManager.Instance.loadImmediate (delPath, ResourceType.PREFAB);            GameObject obj = objUnit.Asset as GameObject;            if (obj == null)            {                Debug.LogError("Res Not Found:" + delPath);            }            desEffect = GameObject.Instantiate (obj) as GameObject;            desEffect.transform.position = TranObj.transform.position;            TranObj.transform.parent = null;            GameObject.DestroyImmediate (TranObj);        }    }    //进入Idle状态    public override void OnEnterIdle()    {        this.RealEntity.PlayerIdleAnimation ();    }    //设置锁定对象    public virtual void SetSyncLockTarget(Ientity entity)    {        if (SyncLockTarget == entity)        {            return;        }        this.DeltLockTargetXuetiao (entity);        this.SyncLockTarget = entity;    }    //处理锁定对象血条    public void DeltLockTargetXuetiao(Ientity target)    {        if (this.SyncLockTarget != null && this.SyncLockTarget.entityType == EntityType.Buiding)        {            this.SyncLockTarget.DestroyXueTiao ();        }        if (target != null && target.entityType == EntityType.Buiding)        {            target.CreateXueTiao ();        }    }    //Entity移动属性变化    public override void OnEntityMoveSpeedChange(int value)    {        base.OnEntityMoveSpeedChange (value);        HeroConfigInfo heroConfig;        if (ConfigReader.HeroXmlInfoDict.TryGetValue(NpcGUIDType, out heroConfig))        {            //按比例来改变动画速度            float speed = value / heroConfig.HeroMoveSpeed * heroConfig.n32BaseMoveSpeedScaling / 1000;            if (speed == 0)            {                return;            }            this.RealEntity.SetMoveAnimationSpd (speed);        }    }    //状态机执行Free消息    public override void OnExecuteFree()    {        if (RealEntity == null || this.entityType == EntityType.Buiding)        {            return;        }        //计算平面位置        Vector3 synPos2D = new Vector3 (m_pcGOSSI.sServerSyncPos.x, 60, m_pcGOSSI.sServerSyncPos.z);        Vector3 realPos2D = new Vector3(RealEntity.GetTransform().position.x, 60, RealEntity.GetTransform().position.z);        float fDistToServerPos = Vector3.Distance (synPos2D, realPos2D);        if (fDistToServerPos < 0.5f)        {            if (EntityStrategyHelper.IsTick(this, EntityStrategyHelper.IdleTimeTick))            {                this.OnFSMStateChange (BlGame.FSM.EntityIdleFSM.Instance);                return;            }            RealEntity.PlayerFreeAnimation ();        }        else if (fDistToServerPos > 5)        {            RealEntity.PlayerFreeAnimation ();            //本地pos和服务端pos对齐            RealEntity.GetTransform ().position = m_pcGOSSI.sServerBeginPos;        }        else        {            Vector3 sSyncDir = synPos2D - realPos2D;            sSyncDir.Normalize ();            Vector3 pos = sSyncDir * 2 * Time.deltaTime + realPos2D;            //run 过去            RealEntity.PlayerRunAnimation ();            this.RealEntity.Controller.Move (sSyncDir * 2 * Time.deltaTime);        }        OnCameraUpdatePosition ();        TurnAngle ();    }    //转动朝向    private void TurnAngle ()    {        float fAngle = Vector3.Angle (RealEntity.GetTransform ().forward, EntityFSMDirection);        if (fAngle > 2)        {            Quaternion DestQuaternion = Quaternion.LookRotation (EntityFSMDirection);            Quaternion sMidQuater = Quaternion.Lerp (RealEntity.GetTransform ().rotation, DestQuaternion, 5 * Time.deltaTime);            RealEntity.GetTransform ().rotation = sMidQuater;        }    }    //状态机执行移动    public override void OnExecuteMove()    {        if (RealEntity == null || this.entityType == EntityType.Buiding)        {            return;        }        Quaternion DestQuaternion = Quaternion.LookRotation (EntityFSMDirection);        Quaternion sMidQuater = Quaternion.Lerp (RealEntity.GetTransform ().rotation, DestQuaternion, 10 * Time.deltaTime);        RealEntity.GetTransform ().rotation = sMidQuater;        float fTimeSpan = Time.realtimeSinceStartup - m_pcGOSSI.fBeginTime;        float fMoveDist = fTimeSpan * m_pcGOSSI.fServerSpeed;        m_pcGOSSI.sServerSyncPos = m_pcGOSSI.sServerBeginPos + m_pcGOSSI.sServerDir * fMoveDist;        RealEntity.PlayerRunAnimation ();        //同步2D位置处理        Vector3 serverPos2D = new Vector3 (m_pcGOSSI.sServerSyncPos.x, 60, m_pcGOSSI.sServerSyncPos.z);        Vector3 entityPos2d = new Vector3(RealEntity.GetTransform().position.x, 60, RealEntity.GetTransform().position.z);        Vector3 sSyncDir = serverPos2D - entityPos2d;        sSyncDir.Normalize ();        float fDistToServerPos = Vector3.Distance (serverPos2D, entityPos2d);        if (fDistToServerPos > 5)        {            RealEntity.GetTransform ().position = m_pcGOSSI.sServerSyncPos;            OnCameraUpdatePosition ();            return;        }        Vector3 pos = entityPos2d + sSyncDir * EntityFSMMoveSpeed * Time.deltaTime;        this.RealEntity.Controller.Move (sSyncDir * EntityFSMMoveSpeed * Time.deltaTime);        RealEntity.GetTransform ().position = new Vector3 (RealEntity.GetTransform().position.x, mDefaultHeight, RealEntity.GetTransform().position.z);        OnCameraUpdatePosition ();        EntityMoveCheck ();    }    //对象移动检测    protected virtual void EntityMoveCheck()    {    }    protected void OnCameraUpdatePosition()    {        if (objTransform.transform == GameMethod.GetMainCamera.arget && GameMethod.GetMainCamera != null && GameMethod.GetMainCamera.target != null && RealEntity != null)        {            //获取当前PlayState            PlayState playState = GameStateManager.Instance.GetCurState () as PlayState;            if (playState == null)            {                return;            }            if (playState.mCameraType == 1)     //斜45度            {                //根据角色阵营调整相机旋转角度                Vector3 eular = GameMethod.GetMainCamera.transform.eulerAngles;                if (RealEntity.CampType == EntityCampType.CampTypeA)                {                    GameMethod.GetMainCamera.transform.eulerAngles = new Vector3 (euler.x, 45.0f, 0/*euler.z*/);                }                else if (RealEntity.CampType == EntityCampType.CampTypeB)                {                    GameMethod.GetMianCamera.Transform.eulerAngles = new Vector3 (euler.x, -135.0f, 0/*euler.z*/);                }                GameMethod.GetMianCamera.FixedUpdatePosition ();            }            else            {                //根据角色阵营调整相机旋转角度                Vector3 euler = GameMethod.GetMainCamera.transform.eulerAngles;                if (RealEntity.CampType == EntityCampType.CampTypeA)                {                    GameMethod.GetMainCamera.transform.eulerAngles = new Vector3 (euler.x, 0.0f, 0/*euler.z*/);                }                else if (RealEntity.CampType == EntityCampType.CampTypeB)                {                    GameMethod.GetMainCamera.transform.eulerAngles = new Vector3 (euler.x, -180.0f, 0/*euler.z*/);                }            }        }    }    public void SetSeatPosInfo(uint seat, bool ifMaster, bool ifReady, string userNick, int userHead, int gold)    {        GameUserSeat = seat;        GameUserIsReady = ifReady;        GameUserIsMaster = ifMaster;        GameUserNick = userNick;        GameHeadId = userHead;        AccountGold = gold;    }    //Raises the update hp event    public override void OnUpdateHp()    {        base.OnUpdateHp ();    }    public bool IsMaster()    {        if (GameUserIsMaster == MasterTag)        {            return true;        }        return false;    }    public bool isGameLookViewer()    {        if (GameUserSeat >= GameLookTag)        {            return true;        }        return false;    }    public override void OnUpdate()    {        base.OnUpdate ();        Iselfplayer playerSelf = PlayerManager.Instance.LocalPlayer;        //道理吗去执行说明是enemy player        if (playerSelf != null && playerSelf.realObject != null && !this.IsSameCamp(playerSelf.EntityCamp))        {            //self player distance with enemy player            float dis = Vector3.Distance (playerSelf.objTransform.position, objTransform.position);            if (dis > GameConstDefine.PlayerLockTargetDis)            {                return;            }            if ((this.FSM != null && this.FSM.State == BlGame.FSM.FsmState.FSM_STATE_DEAD) || (this.realObject.activeSelf == false))            {                AddOrDelEnemy (this, false);            }            else            {                if (this.realObject.active == true)                {                    AddOrDelEnemy (this, true);                }            }        }    }    public static void AddOrDelEnemy(Iplayer entity, bool add)    {        CEvent eve = new CEvent (EGameEvent.eGameEvent_AddOrDelEnemy);        eve.AddParam ("Add", add);        eve.AddParam ("Target", entity);        EventCenter.SendEvent (eve);    }    public bool IsReady()    {        if (RealdyTag == GameUserIsReady)        {            return true;        }        return false;    }    //是否是同一阵营    public bool IsSameCamp(Iplayer player)    {        if ((player.GameUserSeat % 2) == (GameUserSeat % 2))        {            return true;        }        else        {            return false;        }    }    public override void InitWhenCreateModel()    {        RealEntity.SetAttackAnimationLook (true);    }    //创建shadow    public override void OnCreateShadow()    {        int id = (int)ObjTypeID;        float radius = ConfigReader.GetHeroInfo (id).HeroCollideRadious;        float range = radius / 100.0f;        ResourceUnit objUnit = ResourcesManager.Instance.loadImmediate (GameDefine.GameConstDefine.LoadGameShadow, ResourceType.PREFAB);        GameObject obj = GameObject.Instantiate (objUnit.Asset) as GameObject;        obj.transform.parent = this.realObject.transform;        obj.transform.localScale = new Vector3 (range, 1, range);        obj.transform.localPosition = Vector3.zero;    }    //this死亡    protected override void DoEntityDead()    {        this.XueTiao.SetVisible (false);        if (this.RealEntity.Controller.enabled)        {            this.RealEntity.Controller.enabled = false;        }    }    //Do 复活    protected override void DoReborn()    {        base.DoReborn ();        if (!this.RealEntity.Controller.enabled)        {            this.RealEntity.Controller.enabled = true;        }        if (this == PlayerManager.Instance.LocalPlayer && FSM.State == BlGame.FSM.FsmState.FSM_STATE_DEAD)        {            GameMethod.GetMainCamera.target = RealEntity.mTransform;        }        BlGame.Effect.EffectManager.Instance.CreateMormalEffect("effect/other/fuhuo", RealEntity.objAttackPoint.gameObject)        ShowXueTiao();    }    public override void OnEntityLeadSkill()    {    }    public override int GetSkillIdBySkillType(SkillType type)    {        switch (type)        {        case SkillType.SKILL_TYPE1:            return ConfigReader.GetHeroInfo(NpcGUIDType).HeroSkillType1;        case SkillType.SKILL_TYPE2:            return ConfigReader.GetHeroInfo(NpcGUIDType).HeroSkillType2;        case SkillType.SKILL_TYPE3:            return ConfigReader.GetHeroInfo(NpcGUIDType).HeroSkillType3;        case SkillType.SKILL_TYPE4:            return ConfigReader.GetHeroInfo(NpcGUIDType).HeroSkillType4;        case SkillType.SKILL_TYPE5:            return ConfigReader.GetHeroInfo(NpcGUIDType).HeroSkillType5;        }        return -1;    }    protected virtual void UpdateFuryEffect()    {        if (null != this.RealEntity)        {            this.RealEntity.UpdateFuryEffect ();        }    }    protected virtual void UpdateFuryValue()    {    }    public virtual void SetFuryState(EFuryState state)    {        FuryState = state;        UpdateFuryEffect ();    }    public void SetFuryValue(int value)    {        FuryValue = value;        UpdateFuryValue ();    }    public virtual void CleanWhenGameOver()    {    }    public void SetReconnectPlayerInfo(uint seat, string nickName)    {        GameUserNick = nickName;        GameUserSeat = seat;    }}
原创粉丝点击