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; }}
阅读全文
0 0
- GameEntity(十一)—— Iplayer
- GameEntity(一) —— CampType
- GameEntity(二)—— EntityType
- GameEntity(三)—— EntityStrategyHelper
- GameEntity(四)—— Ientity
- GameEntity(五)—— INpc
- GameEntity(六)—— IChat
- GameEntity(七)—— Friend
- GameEntity(八)—— FriendManager
- GameEntity(九)—— InviteOtherPlayer
- GameEntity(十)—— Mail
- GameEntity&Component
- GameEntity & Component
- iPlayer项目开发
- OpenLayers分析——(十一)体系结构
- Java实践(十一)——五子棋
- Java实践(十一)——五子棋
- Java基础(十一)——反射
- java.util.zip.ZipException: invalid LOC header (bad signature)
- pom.xml报错:web.xml is missing and <failOnMissingWebXml> is set to true
- NYOJ 首字母变大写
- 不得不了解的四大作用域:application,session,request,page
- C++写插入排序
- GameEntity(十一)—— Iplayer
- HDU-1798 Tell me the area(数学)
- 软件工程课程实验报告:实验七
- 线性时间求第k小(分治思想)
- Java集合源码--ArrayList
- Tensorflow 从bin文件中读取数据并
- STM32寄存器编程思路
- spark机器学习MLlib笔记(1)
- Android JobScheduler