public override string Descramble(string s, string originalInstruction)
        {
            var targetLetter = originalInstruction.Last();

            var index = s.IndexOf(targetLetter);

            return(GetRotation(index, s.Length)(s));
        }
Пример #2
0
        private Vector3 MoveAhead(Vector3 targetPosition, double offset)
        {
            float  rotation = GetRotation.Invoke();
            double x        = targetPosition.X + (Math.Cos(rotation) * offset);
            double y        = targetPosition.Y + (Math.Sin(rotation) * offset);

            return(new Vector3()
            {
                X = Convert.ToSingle(x),
                Y = Convert.ToSingle(y),
                Z = targetPosition.Z
            });
        }
Пример #3
0
        public Vector3 Wander(int multiplier)
        {
            // TODO: implement some sort of radius where the target wanders around.
            //       maybe add a very weak force keeping it inside a given circle...
            // TODO: implement some sort of delay so that the target is not constantly walking
            Random  rnd             = new Random();
            Vector3 currentPosition = GetPosition();

            Vector3 newRandomPosition = new Vector3(0, 0, 0);

            newRandomPosition += CalculateFuturePosition(currentPosition, GetRotation.Invoke(), Convert.ToSingle((rnd.NextDouble() * 4) + 4));

            // rotate the vector by  random amount of degrees
            newRandomPosition.Rotate(rnd.Next(-14, 14));

            return(Seek(newRandomPosition, multiplier));
        }
Пример #4
0
    private void Start()
    {
        //для стерео зрения
        LeftEyeAnchor   = GameObject.Find("LeftEyeAnchor");
        RightEyeAnchor  = GameObject.Find("RightEyeAnchor");
        CenterEyeAnchor = GameObject.Find("CenterEyeAnchor");

        left   = GameObject.Find("left");
        Center = GameObject.Find("Center");
        right  = GameObject.Find("right");

        LeftEyeAnchor.transform.parent   = left.transform;
        CenterEyeAnchor.transform.parent = Center.transform;
        RightEyeAnchor.transform.parent  = right.transform;
        ///////////////////////////////////////////////////////////
        head       = new GetRotation();
        head.glass = RightEyeAnchor;
        //
        ConnectServer();
        Thread mythread = new Thread(GetMessageServer);

        mythread.Start();
    }
Пример #5
0
        public void Execute()
        {
            if ((DateTime.Now - LastLastPositionUpdate > TimeSpan.FromMilliseconds(1000) && LastPosition.GetDistance(GetPosition.Invoke()) > 24) || TryCount > 2)
            {
                Reset();
                return;
            }

            if (CurrentPath.Count == 0)
            {
                TryCount = 0;
                List <Vector3> nodes = GeneratePath.Invoke(GetPosition.Invoke(), TargetPosition);

                if (nodes.Count == 0)
                {
                    // pathfinding was unsuccessful
                    return;
                }

                foreach (Vector3 node in nodes)
                {
                    CurrentPath.Enqueue(node);
                }

                CurrentPathTargetPosition = TargetPosition;
            }

            List <Vector3> forces                   = new List <Vector3>();
            Vector3        currentPosition          = GetPosition.Invoke();
            Vector3        targetPosition           = CurrentPath.Peek();
            double         distanceToTargetPosition = currentPosition.GetDistance(targetPosition);

            if (distanceToTargetPosition > 128)
            {
                Reset();
                return;
            }
            else if (distanceToTargetPosition < MovementSettings.WaypointCheckThreshold)
            {
                if (CurrentPath.Count > 0)
                {
                    targetPosition = CurrentPath.Dequeue();
                }
                else if (CurrentPath.Count == 0)
                {
                    return;
                }
            }

            Vector3 positionToGoTo = BotUtils.MoveAhead(GetRotation.Invoke(), targetPosition, 2);
            bool    updateForces   = true;

            switch (State)
            {
            case MovementEngineState.Moving:
                forces.Add(PlayerVehicle.Seek(positionToGoTo, 1));
                break;

            case MovementEngineState.DirectMoving:
                PlayerVehicle.MoveToPosition(targetPosition);
                updateForces = false;
                break;

            case MovementEngineState.Following:
                forces.Add(PlayerVehicle.Seek(positionToGoTo, 1));
                forces.Add(PlayerVehicle.Seperate(1));
                break;

            case MovementEngineState.Chasing:
                forces.Add(PlayerVehicle.Seek(positionToGoTo, 1));
                break;

            case MovementEngineState.Fleeing:
                forces.Add(PlayerVehicle.Flee(positionToGoTo, 1));
                break;

            case MovementEngineState.Evading:
                forces.Add(PlayerVehicle.Evade(positionToGoTo, 1, TargetRotation));
                break;

            case MovementEngineState.Wandering:
                forces.Add(PlayerVehicle.Wander(1));
                break;

            case MovementEngineState.Stuck:
                forces.Add(PlayerVehicle.Unstuck(1));
                break;

            default:
                return;
            }

            if (updateForces)
            {
                PlayerVehicle.Update(forces);
            }

            if (DateTime.Now - LastJumpCheck > TimeSpan.FromMilliseconds(250))
            {
                double distanceTraveled = LastPosition.GetDistance(GetPosition.Invoke());
                if ((LastPosition.X == 0 && LastPosition.Y == 0 && LastPosition.Z == 0) || distanceTraveled < 0.3)
                {
                    Jump.Invoke();
                    TryCount++;
                }

                LastPosition           = GetPosition.Invoke();
                LastLastPositionUpdate = DateTime.Now;
                LastJumpCheck          = DateTime.Now;
            }

            LastTargetPosition = GetPosition.Invoke();
            HasMoved           = true;
        }