public void BeAttacked(SMsgBattleBeatBack_SC smsg) { m_time = smsg.time / 1000f; //\暂时处理 mCorrectPos = mCorrectPos.GetFromServer(smsg.PosX, smsg.PosY); //TraceUtil.Log("接到结算数据包:" + smsg.DirX + " , " + smsg.DirY + " , " + smsg.speed + " , " + smsg.Accelerated); //float rad = smsg.Angel/1000f * Mathf.Deg2Rad; //float x = Mathf.Cos(rad); //float z = -1 * Mathf.Sin(rad); //m_angle =90 - Mathf.Atan2(z, x) * Mathf.Rad2Deg + 180; m_instantSpeed = smsg.speed; m_accelerationSpeed = smsg.Accelerated; Vector3 unitDir = new Vector3(smsg.DirX, 0, smsg.DirY * -1f); m_motionVector = unitDir.normalized * smsg.speed * 0.1f; m_angle = 90 - Mathf.Atan2(smsg.DirY * -1f, smsg.DirX) * Mathf.Rad2Deg + 180; if (smsg.Accelerated != 0) { m_accelerationVector = m_motionVector * (smsg.Accelerated * 1.0f / smsg.speed); } else { m_accelerationVector = Vector3.zero; } }
private void BeatBack(long uid, Vector3 pos, Vector3 dir) { SMsgBattleBeatBack_SC sMsgBattleBeatBack_SC = new SMsgBattleBeatBack_SC(); sMsgBattleBeatBack_SC.uidFighter = uid; sMsgBattleBeatBack_SC.PosX = pos.x * 10.0f; sMsgBattleBeatBack_SC.PosY = -pos.z * 10.0f; sMsgBattleBeatBack_SC.DirX = dir.x; sMsgBattleBeatBack_SC.DirY = -dir.z; sMsgBattleBeatBack_SC.speed = (int)(m_impactData.m_beatBackSpeed * 10.0f); sMsgBattleBeatBack_SC.Accelerated = (int)(m_impactData.m_beatBackAcceleration * 10.0f); sMsgBattleBeatBack_SC.time = (int)(m_impactData.m_beatBackDuration); RaiseEvent(EventTypeEnum.BeatBack.ToString(), sMsgBattleBeatBack_SC); //send to server SMsgFightBeatBack_CS sMsgFightBeatBack_CS = new SMsgFightBeatBack_CS(); sMsgFightBeatBack_CS.uidFighter = uid; sMsgFightBeatBack_CS.byType = 1; sMsgFightBeatBack_CS.hitedPosX = pos.x * 10.0f; sMsgFightBeatBack_CS.hitedPosY = -pos.z * 10.0f; //NetServiceManager.Instance.BattleService.SendFightBeatBackCS(sMsgFightBeatBack_CS); beatBackList.Add(sMsgFightBeatBack_CS); }
void ReceiveBeatBackHandle(INotifyArgs notifyArgs) { if (this.m_entityUid != 0) { SMsgBattleBeatBack_SC sMsgBattleBeatBack_SC = (SMsgBattleBeatBack_SC)notifyArgs; if (sMsgBattleBeatBack_SC.uidFighter == this.m_entityUid) { flag = false; } } }
public static SMsgBeatBackContextNum_SC ParseResultPackage(byte[] pkgData) { int offset = 0; int singleContextLength = Marshal.SizeOf(typeof(SMsgBattleBeatBack_SC)); SMsgBeatBackContextNum_SC sMsgBeatBackContextNum_SC; offset += PackageHelper.ReadData(pkgData.Skip(offset).ToArray(), out sMsgBeatBackContextNum_SC.byContextNum); sMsgBeatBackContextNum_SC.list = new List <SMsgBattleBeatBack_SC>(); for (int i = 0; i < sMsgBeatBackContextNum_SC.byContextNum; i++) { SMsgBattleBeatBack_SC sMsgBattleBeatBack_SC = SMsgBattleBeatBack_SC.ParseResultPackage(pkgData.Skip(offset).Take(singleContextLength).ToArray()); sMsgBeatBackContextNum_SC.list.Add(sMsgBattleBeatBack_SC); offset += singleContextLength; } return(sMsgBeatBackContextNum_SC); }
public void SetBeatBackData(SMsgBattleBeatBack_SC dataModel) { Vector3 mCorrectPos = this.m_PlayerBehaviour.ThisTransform.position; var sSMsgBattleBeatBack_SC = (SMsgBattleBeatBack_SC)dataModel; m_clientBattleBeatBack = new ClientBattleBeatBack(); m_clientBattleBeatBack.Accelerated = sSMsgBattleBeatBack_SC.Accelerated; m_clientBattleBeatBack.TargetRotation = Quaternion.FromToRotation(Vector3.forward, new Vector3(-dataModel.DirX, 0, dataModel.DirY)); //玩家的朝向,与击退方向相反。所以x*-1,y*-1 m_clientBattleBeatBack.speed = sSMsgBattleBeatBack_SC.speed * 0.1f; m_clientBattleBeatBack.Accelerated = sSMsgBattleBeatBack_SC.Accelerated * 0.1f; m_clientBattleBeatBack.time = sSMsgBattleBeatBack_SC.time / 1000f; mCorrectPos = mCorrectPos.GetFromServer(sSMsgBattleBeatBack_SC.PosX, sSMsgBattleBeatBack_SC.PosY); if (!SceneDataManager.Instance.IsPositionInBlock(mCorrectPos)) { this.m_PlayerBehaviour.ThisTransform.position = mCorrectPos; } }
//受击退 public void BeAttacked(SMsgBattleBeatBack_SC sMsgBattleBeatBack_SC) { monsterMoveNodes.Clear(); if (m_FSMSystem.CurrentStateID == StateID.MonsterBeAttacked || m_FSMSystem.CurrentStateID == StateID.MonsterBeAdsorb || m_FSMSystem.CurrentStateID == StateID.MonsterBeHitFly || m_FSMSystem.CurrentStateID == StateID.MonsterBeHorde || m_FSMSystem.CurrentStateID == StateID.MonsterStand ) { ((MonsterFsmState)m_FSMSystem.CurrentState).DoNotSendBeatEnd = true; } else { ((MonsterFsmState)m_FSMSystem.CurrentState).DoNotSendBeatEnd = false; } m_MonsterBeAttackState.BeAttacked(sMsgBattleBeatBack_SC); m_FSMSystem.PerformTransition(Transition.MonsterToBeAttacked); }