private async Task JailTick() { float[] currentPosition = { Game.PlayerPed.Position.X, Game.PlayerPed.Position.Y }; if (!PolygonCollision.Contains(prisonPolygon, currentPosition)) { if (PolygonCollision.Contains(prisonPolygon, previousPosition)) { Game.PlayerPed.PositionNoOffset = previousPositionFull; //await BaseScript.Delay(50); return; } else { Game.PlayerPed.IsPositionFrozen = true; API.RequestCollisionAtCoord(enterPrisonLocation.X, enterPrisonLocation.Y, enterPrisonLocation.Z); Game.PlayerPed.PositionNoOffset = enterPrisonLocation; Game.PlayerPed.Heading = enterPrisonHeading; while (!API.HasCollisionLoadedAroundEntity(Game.PlayerPed.Handle)) { await BaseScript.Delay(0); } Game.PlayerPed.IsPositionFrozen = false; } } Game.PlayerPed.Weapons.RemoveAll(); previousPosition = currentPosition; previousPositionFull = Game.PlayerPed.Position; //await BaseScript.Delay(50); }
public void Draw(RenderTarget target, RenderStates states) { Shape shape; if (collision.GetType() == typeof(BoxCollision)) { shape = new RectangleShape(new Vector2f(((BoxCollision)collision).Size.X, ((BoxCollision)collision).Size.Y)); } else if (collision.GetType() == typeof(CircleCollision)) { CircleCollision circle = (CircleCollision)collision; shape = new CircleShape(circle.Radius); } else if (collision.GetType() == typeof(PolygonCollision)) { PolygonCollision poly = (PolygonCollision)collision; var cs = new ConvexShape((uint)poly.Vertex.Count()); for (int i = 0; i < poly.Points.Count(); i++) { cs.SetPoint((uint)i, new Vector2f(poly.Points[i].X, poly.Points[i].Y)); } shape = cs; } else { return; } shape.Position = new Vector2f(collision.Position.X, collision.Position.Y); if (f) { shape.FillColor = ac; } else { shape.FillColor = cc; } target.Draw(shape); }
static private async void PeriodicCheck() { while (true) { float[] CurrentPosition = { Game.PlayerPed.Position.X, Game.PlayerPed.Position.Y }; if (IsInPrison && !PolygonCollision.Contains(PrisonPolygon, CurrentPosition)) { if (previousMinute != DateTime.UtcNow.Minute) { previousMinute = DateTime.UtcNow.Minute; PrisonTimeRemaining -= 1; if (PrisonTimeRemaining > 0) { BaseScript.TriggerEvent("Chat.Message", "", "#555555", $"You have {PrisonTimeRemaining} months remaining on your sentence."); } } if (PolygonCollision.Contains(PrisonPolygon, PreviousPosition)) { Game.PlayerPed.PositionNoOffset = PreviousPositionFull; await BaseScript.Delay(50); continue; } else { Game.PlayerPed.PositionNoOffset = EnterPrisonLocation; Game.PlayerPed.Heading = EnterPrisonHeading; } } if (IsInPrison) { Game.PlayerPed.Weapons.RemoveAll(); } PreviousPosition = CurrentPosition; PreviousPositionFull = Game.PlayerPed.Position; await BaseScript.Delay(50); } }
static void Main() { RenderWindow window = new RenderWindow(new VideoMode(1000, 1000), "shapes collisions"); View view = new View(window.GetView()); window.Closed += Window_Closed; Rand = new Random(); objects = new List <GameObject>(); objects.Add(new GameObject(new CircleCollision(new VectorF(200, 300), 50.0f))); objects.Add(new GameObject(new BoxCollision(new VectorF(100, 100), new VectorF(100, 100)))); objects.Add(new GameObject(new BoxCollision(new VectorF(300, 100), new VectorF(200, 700)))); objects.Add(new GameObject(new BoxCollision(new VectorF(30, 600), new VectorF(30, 30)))); PolygonCollision poly = new PolygonCollision(new VectorF(750, 400)); VectorF origin = new VectorF(-150, -150); poly.Vertex.Add(new VectorF(100, 100) + origin); poly.Vertex.Add(new VectorF(150, -50) + origin); poly.Vertex.Add(new VectorF(200, 100) + origin); poly.Vertex.Add(new VectorF(350, 150) + origin); poly.Vertex.Add(new VectorF(200, 200) + origin); poly.Vertex.Add(new VectorF(150, 350) + origin); poly.Vertex.Add(new VectorF(100, 200) + origin); poly.Vertex.Add(new VectorF(-50, 150) + origin); poly.SetUp(); objects.Add(new GameObject(poly)); PolygonCollision poly2 = new PolygonCollision(new VectorF(750, 700)); VectorF origin2 = new VectorF(-150, -150); poly2.Vertex.Add(new VectorF(100, 100) + origin2); poly2.Vertex.Add(new VectorF(150, -50) + origin2); poly2.Vertex.Add(new VectorF(200, 100) + origin2); poly2.Vertex.Add(new VectorF(350, 150) + origin2); poly2.Vertex.Add(new VectorF(200, 200) + origin2); poly2.Vertex.Add(new VectorF(150, 350) + origin2); poly2.Vertex.Add(new VectorF(100, 200) + origin2); poly2.Vertex.Add(new VectorF(-50, 150) + origin2); poly2.SetUp(); objects.Add(new GameObject(poly2)); PolygonCollision poly3 = new PolygonCollision(new VectorF(50, 750)); VectorF origin3 = new VectorF(0, 0); poly3.Vertex.Add(new VectorF(-50, -50) + origin3); poly3.Vertex.Add(new VectorF(-50, 50) + origin3); poly3.Vertex.Add(new VectorF(50, 50) + origin3); poly3.Vertex.Add(new VectorF(50, -50) + origin3); poly3.SetUp(); objects.Add(new GameObject(poly3)); float speed = 10.0f; SetPlayer(); while (window.IsOpen) { Thread.Sleep(16); window.DispatchEvents(); if (Keyboard.IsKeyPressed(Keyboard.Key.W)) { player.collision.Position += new VectorF(0, -speed); } if (Keyboard.IsKeyPressed(Keyboard.Key.S)) { player.collision.Position += new VectorF(0, speed); } if (Keyboard.IsKeyPressed(Keyboard.Key.A)) { player.collision.Position += new VectorF(-speed, 0); } if (Keyboard.IsKeyPressed(Keyboard.Key.D)) { player.collision.Position += new VectorF(speed, 0); } if (Keyboard.IsKeyPressed(Keyboard.Key.C)) { SetPlayer(); } if (Keyboard.IsKeyPressed(Keyboard.Key.R) && player.collision.GetType() == typeof(PolygonCollision)) { ((PolygonCollision)player.collision).Rotation -= 0.1f; ((PolygonCollision)player.collision).SetUp(); } if (Keyboard.IsKeyPressed(Keyboard.Key.T) && player.collision.GetType() == typeof(PolygonCollision)) { ((PolygonCollision)player.collision).Rotation += 0.1f; ((PolygonCollision)player.collision).SetUp(); } if (Keyboard.IsKeyPressed(Keyboard.Key.Up)) { view.Center += new Vector2f(0, -10); } if (Keyboard.IsKeyPressed(Keyboard.Key.Down)) { view.Center += new Vector2f(0, 10); } if (Keyboard.IsKeyPressed(Keyboard.Key.Left)) { view.Center += new Vector2f(-10, 0); } if (Keyboard.IsKeyPressed(Keyboard.Key.Right)) { view.Center += new Vector2f(10, 0); } window.SetView(view); window.Clear(); for (int i = 0; i < objects.Count; i++) { objects[i].Update(objects); window.Draw(objects[i]); } player.Update(objects); window.Draw(player); window.Display(); } }