public override string Descramble(string s, string originalInstruction) { var targetLetter = originalInstruction.Last(); var index = s.IndexOf(targetLetter); return(GetRotation(index, s.Length)(s)); }
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 }); }
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)); }
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(); }
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; }