protected Vector3 GetTeleportPosition(TeleportDirectionMode mode, float angle, float distance) { Vector3 direction; switch (mode) { case TeleportDirectionMode.UseAngle: case TeleportDirectionMode.CameraCenter: case TeleportDirectionMode.UseSteerAngle: direction = this.GetDirection(this.config.DirectionMode, base.instancedAbility.Evaluate(this.config.Angle)); return(base.entity.transform.position + ((Vector3)(direction * distance))); case TeleportDirectionMode.FromTarget: { BaseMonoEntity attackTarget = base.entity.GetAttackTarget(); if (attackTarget != null) { Vector3 vector2 = base.entity.transform.position - attackTarget.transform.position; direction = vector2.normalized; return(attackTarget.transform.position + ((Vector3)(direction * distance))); } return(base.entity.transform.position); } case TeleportDirectionMode.SpawnPoint: return(this.GetSpawnPointPos(this.config.SpawnPoint)); case TeleportDirectionMode.SpawnPointByDistance: return(this.GetSpawnPointPos(this.config.Distance, false)); case TeleportDirectionMode.SpawnPointByDistanceFromTarget: return(this.GetSpawnPointPos(this.config.Distance, true)); } return(base.entity.transform.position); }
protected override Vector3 GetDirection(TeleportDirectionMode mode, float angle) { if (mode != TeleportDirectionMode.UseSteerAngle) { return(base.GetDirection(mode, angle)); } AvatarControlData controlData = (base.actor.entity as BaseMonoAvatar).GetInputController().controlData; if (controlData.orderMove) { return(controlData.steerDirection); } return(-(base.entity as BaseMonoAvatar).FaceDirection); }
protected virtual Vector3 GetDirection(TeleportDirectionMode mode, float angle) { Vector3 forward = Vector3.forward; if (mode == TeleportDirectionMode.UseAngle) { forward = (Vector3)(Quaternion.Euler(0f, angle, 0f) * base.entity.transform.forward); } else if (mode == TeleportDirectionMode.CameraCenter) { bool flag = false; float x = Camera.main.WorldToScreenPoint(base.entity.transform.position).x; if ((x < (Screen.width * 0.2f)) || (x > (Screen.width * 0.8f))) { flag = true; } if (flag) { Vector3 xZPosition = base.entity.XZPosition; Vector3 position = Camera.main.transform.position; position = new Vector3(position.x, 0f, position.z); Vector3 rhs = Camera.main.transform.forward; rhs = new Vector3(rhs.x, 0f, rhs.z); Vector3 lhs = position - xZPosition; if (Vector3.Cross(lhs, rhs).y > 0f) { forward = (Vector3)(Quaternion.Euler(0f, 90f, 0f) * lhs); } else { forward = (Vector3)(Quaternion.Euler(0f, 270f, 0f) * lhs); } } else if (UnityEngine.Random.value > 0.5f) { forward = (Vector3)(Quaternion.Euler(0f, 90f, 0f) * base.entity.transform.forward); } else { forward = (Vector3)(Quaternion.Euler(0f, 270f, 0f) * base.entity.transform.forward); } } return(forward.normalized); }