コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }