private void HandleHurtEvent(SprotoType.scene_hurt_event_info hurtEvent) { // long uid = hurtEvent.attacker_uid; var entityMgr = SceneMgr.Instance.EntityManager; if (hurtEvent.defenders == null || hurtEvent.defenders.Count <= 0) { return; } for (int i = 0; i < hurtEvent.defenders.Count; i++) { var defender = hurtEvent.defenders[i]; // Debug.Log("defender uid : "+defender.uid+" count:"+hurtEvent.defenders.Count+" hp:"+defender.cur_hp+" damagetype:"+defender.flag); var defenderEntity = SceneMgr.Instance.GetSceneObject(defender.uid); // Debug.Log("has LocomotionState : "+entityMgr.HasComponent<LocomotionState>(defenderEntity)+" isdead:"+ECSHelper.IsDead(defenderEntity, entityMgr)+" isnull:"+defenderEntity.Equals(Entity.Null)); if (defenderEntity.Equals(Entity.Null) || ECSHelper.IsDead(defenderEntity)) { continue; } if (entityMgr.HasComponent <LocomotionState>(defenderEntity)) { var isRole = RoleMgr.GetInstance().IsRoleEntity(defenderEntity); //进入受击状态 bool playBehit = UnityEngine.Random.Range(0, 100) > 40.0f; if (!isRole && playBehit) { var locomotionState = entityMgr.GetComponentData <LocomotionState>(defenderEntity); locomotionState.LocoState = LocomotionState.State.BeHit; locomotionState.StateEndType = LocomotionState.EndType.PlayAnimationOnce; ECSHelper.ChangeLocoState(defenderEntity, locomotionState); // entityMgr.SetComponentData<LocomotionState>(defenderEntity, locomotionState); } bool isNeedShakeCamera = (isRole && playBehit) || !isRole; if (isNeedShakeCamera && entityMgr.HasComponent <CinemachineImpulseSource>(defenderEntity)) { var impulseCom = entityMgr.GetComponentObject <CinemachineImpulseSource>(defenderEntity); var velocity = Vector3.one * defender.change_num / 5; impulseCom.GenerateImpulse(); } if (entityMgr.HasComponent <BeHitEffect>(defenderEntity)) { var behitEffect = entityMgr.GetComponentObject <BeHitEffect>(defenderEntity); behitEffect.EndTime = TimeEx.ServerTime + 300; behitEffect.Status = EffectStatus.WaitForRender; } //显示战斗飘字 var defenderTrans = entityMgr.GetComponentObject <Transform>(defenderEntity); var flyWordObj = ResMgr.GetInstance().GetGameObject("FightFlyWord"); FightFlyWord flyWord = flyWordObj.GetComponent <FightFlyWord>(); flyWord.SetData(defender.change_num, defender.flag); var pos = defenderTrans.position; pos += Vector3.up * 1; flyWord.transform.SetParent(UnityMMO.SceneMgr.Instance.FlyWordContainer); flyWord.transform.position = pos; flyWord.StartFly(); } ECSHelper.ChangeHP(defenderEntity, defender.cur_hp, defender.flag, hurtEvent.attacker_uid); } }
private void ApplyChangeInfoHPChange(Entity entity, SprotoType.info_item change_info) { // Debug.Log("hp change : "+change_info.value); string[] strs = change_info.value.Split(','); float curHp = (float)Int64.Parse(strs[0]) / GameConst.RealToLogic; long flag = 0; if (strs.Length == 2) { if (strs[1] == "relive") { flag = 5; } } ECSHelper.ChangeHP(entity, Int64.Parse(strs[0]), flag, 0); }