public void MonsterStateChanged(MonsterStateChangedCommand cmd) { int id = cmd.MonsterID; Vector3 pos = new Vector3(cmd.PosX, cmd.PosY, cmd.PosZ); Quaternion rotation = new Quaternion(cmd.RotationX, cmd.RotationY, cmd.RotationZ, cmd.RotationW); if (!Monsters.ContainsKey(cmd.MonsterID)) { GenerateMonster(id, pos, rotation, cmd.Life); } var monster = Monsters[id]; monster.Life = cmd.Life; switch (cmd.ChangedStateType) { case MonsterChangedStateType.Attack: monster.AttackSync(pos, rotation, cmd.Time); break; case MonsterChangedStateType.Dead: monster.transform.position = pos; monster.transform.rotation = rotation; monster.Dead(); break; case MonsterChangedStateType.StartWander: monster.StartLocomotionSync(pos, rotation, cmd.Time, 0); break; case MonsterChangedStateType.EndWander: monster.EndLocomotionSync(pos, rotation, cmd.Time); break; case MonsterChangedStateType.StartPursuit: monster.StartLocomotionSync(pos, rotation, cmd.Time, 1); break; case MonsterChangedStateType.EndPursuit: monster.EndLocomotionSync(pos, rotation, cmd.Time); break; case MonsterChangedStateType.Warn: monster.EndLocomotionSync(pos, rotation, cmd.Time); monster.Warn = true; break; case MonsterChangedStateType.Idle: monster.IdleSync(pos, rotation, cmd.Time); break; } }
//public void StartPursuitSync(Vector3 startPosition, Quaternion rotation, DateTime time) //{ // if (GameSettings.Instance.UnoptimizeMode) // { // transform.position = startPosition; // transform.rotation = rotation; // anim.speed = 1; // AnimStartLocomotion(); // } // else // { // } //} //public void EndPursuitSync(Vector3 endPosition, Quaternion rotation, DateTime time) //{ // if (GameSettings.Instance.UnoptimizeMode) // { // transform.position = endPosition; // transform.rotation = rotation; // anim.speed = 1; // AnimEndLocomotion(); // } // else // { // } //} public MonsterStateChangedCommand GetCurrentStateCmd(MonsterChangedStateType type) { MonsterStateChangedCommand cmd = new MonsterStateChangedCommand(); cmd.MonsterID = this.ID; cmd.Life = this.Life; cmd.PosX = transform.position.x; cmd.PosY = transform.position.y; cmd.PosZ = transform.position.z; cmd.RotationX = transform.rotation.x; cmd.RotationY = transform.rotation.y; cmd.RotationZ = transform.rotation.z; cmd.RotationW = transform.rotation.w; cmd.Time = NetManager.Instance.Clock.Now; cmd.ChangedStateType = type; return cmd; }