Tetstests
This commit is contained in:
parent
1e8cc82dc4
commit
b8706e82d8
|
@ -112,6 +112,12 @@ public class Game1 : Game
|
|||
goPlayAreaLeft.BehaviourController.AddBehaviour<Collider2DBehaviour>((System.Collections.Generic.IList<Vector2>)[new Vector2(.5f, .5f), new Vector2(-.5f, .5f), new Vector2(.5f, -.5f), new Vector2(-.5f, -.5f)]);
|
||||
engine.AddRigidBody(goPlayAreaLeft.BehaviourController.AddBehaviour<RigidBody2D>());
|
||||
|
||||
// IGameObject goPlayAreaCenter = gameManager.InstantiateGameObject<GameObject>();
|
||||
// goPlayAreaCenter.Transform.Position = new Vector2(100f, 100f);
|
||||
// goPlayAreaCenter.Transform.Scale = new Vector2(40f, 40f);
|
||||
// // goPlayAreaCenter.BehaviourController.AddBehaviour<DisplayableSpriteBehaviour>().Assign(spriteBox);
|
||||
// goPlayAreaCenter.BehaviourController.AddBehaviour<Collider2DBehaviour>((System.Collections.Generic.IList<Vector2>)[new Vector2(.5f, .5f), new Vector2(-.5f, .5f), new Vector2(.5f, -.5f), new Vector2(-.5f, -.5f)]);
|
||||
// engine.AddRigidBody(goPlayAreaCenter.BehaviourController.AddBehaviour<RigidBody2D>());
|
||||
// TODO: use this.Content to load your game content here
|
||||
}
|
||||
|
||||
|
@ -150,8 +156,17 @@ public class Game1 : Game
|
|||
|
||||
if (Keyboard.GetState().IsKeyDown(Keys.Space))
|
||||
seconds += gameTime.ElapsedGameTime.Milliseconds * .0005f;
|
||||
if (Keyboard.GetState().IsKeyDown(Keys.B))
|
||||
{
|
||||
seconds -= gameTime.ElapsedGameTime.Milliseconds * .0005f;
|
||||
while (physicsTimer - 0.01f > seconds)
|
||||
{
|
||||
Console.WriteLine($"Physics Timer: {physicsTimer}");
|
||||
physicsTimer -= 0.01f;
|
||||
engine.Step(-.01f);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Add your update logic here
|
||||
while (physicsTimer + 0.01f < seconds)
|
||||
{
|
||||
Console.WriteLine($"Physics Timer: {physicsTimer}");
|
||||
|
|
|
@ -64,15 +64,12 @@ public class Collider2DBehaviour(IList<Vector2> vertices) : BehaviourOverride, I
|
|||
Vector2 contactPoint = ClosestPointOnEdge(point, edge);
|
||||
|
||||
Vector2 normal = contactPoint - point;
|
||||
if (normal.LengthSquared() < 0.001f)
|
||||
normal = new Vector2(0f, 1f);
|
||||
|
||||
normal.Normalize();
|
||||
|
||||
collisionInformation = new CollisionInformation(normal, contactPoint);
|
||||
|
||||
GameObject gameObject = Game1.gameManager.InstantiateGameObject<GameObject>();
|
||||
gameObject.BehaviourController.AddBehaviour<DisplayableSpriteBehaviour>().Assign(Game1.spriteBox);
|
||||
gameObject.Transform.Position = point;
|
||||
gameObject.Transform.Scale = new Vector2(1f, .01f) * 100f;
|
||||
gameObject.Transform.Rotation = (float)Math.Atan2(normal.Y, normal.X);
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
|
@ -142,18 +139,54 @@ public class Collider2DBehaviour(IList<Vector2> vertices) : BehaviourOverride, I
|
|||
triangles.RemoveAt(i);
|
||||
}
|
||||
|
||||
// for (int i = 0; i < triangles.Count; i++)
|
||||
// {
|
||||
// Triangle triangle = triangles[i];
|
||||
|
||||
// triangle.A += Transform.Position;
|
||||
// triangle.B += Transform.Position;
|
||||
// triangle.C += Transform.Position;
|
||||
|
||||
// triangles[i] = triangle;
|
||||
// }
|
||||
for (int i = gameObjects.Count - 1; i >= 0; i--)
|
||||
{
|
||||
IGameObject gameObject = gameObjects[i];
|
||||
Game1.gameManager.RemoveGameObject(gameObject);
|
||||
gameObjects.RemoveAt(i);
|
||||
}
|
||||
|
||||
|
||||
for (int i = 0; i < triangles.Count; i++)
|
||||
{
|
||||
Triangle triangle = triangles[i];
|
||||
foreach (var edge in GetEdges(triangle))
|
||||
{
|
||||
GameObject gameObject = Game1.gameManager.InstantiateGameObject<GameObject>();
|
||||
DisplayableSpriteBehaviour displayableSpriteBehaviour = gameObject.BehaviourController.AddBehaviour<DisplayableSpriteBehaviour>();
|
||||
displayableSpriteBehaviour.Color = Color.Aqua;
|
||||
displayableSpriteBehaviour.Origin = new(0.5f, 1f);
|
||||
displayableSpriteBehaviour.Assign(Game1.spriteBox);
|
||||
gameObject.Transform.Position = edge.A;
|
||||
Vector2 vector2 = edge.B - edge.A;
|
||||
gameObject.Transform.Scale = new Vector2(2f, .0f) + Vector2.UnitY * vector2.Length();
|
||||
gameObject.Transform.Rotation = (float)Math.Atan2(vector2.X, vector2.Y);
|
||||
gameObjects.Add(gameObject);
|
||||
|
||||
gameObject = Game1.gameManager.InstantiateGameObject<GameObject>();
|
||||
displayableSpriteBehaviour = gameObject.BehaviourController.AddBehaviour<DisplayableSpriteBehaviour>();
|
||||
displayableSpriteBehaviour.Color = Color.Crimson;
|
||||
displayableSpriteBehaviour.Assign(Game1.spriteBox);
|
||||
gameObject.Transform.Position = edge.B;
|
||||
gameObject.Transform.Scale = new Vector2(4f, 4f);
|
||||
gameObjects.Add(gameObject);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var vertex in Vertices)
|
||||
{
|
||||
GameObject gameObject = Game1.gameManager.InstantiateGameObject<GameObject>();
|
||||
DisplayableSpriteBehaviour displayableSpriteBehaviour = gameObject.BehaviourController.AddBehaviour<DisplayableSpriteBehaviour>();
|
||||
displayableSpriteBehaviour.Color = Color.GreenYellow;
|
||||
displayableSpriteBehaviour.Assign(Game1.spriteBox);
|
||||
gameObject.Transform.Position = vertex;
|
||||
gameObject.Transform.Scale = new Vector2(2f, 2f);
|
||||
gameObjects.Add(gameObject);
|
||||
}
|
||||
}
|
||||
|
||||
private List<IGameObject> gameObjects = new List<IGameObject>(32);
|
||||
|
||||
private Vector2 ClosestPointOnEdge(Vector2 point, Edge edge)
|
||||
{
|
||||
// Convert edge points to vectors
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.Xna.Framework;
|
||||
using Pong;
|
||||
using Syntriax.Engine.Core;
|
||||
using Syntriax.Engine.Core.Abstract;
|
||||
using Syntriax.Engine.Graphics.TwoDimensional;
|
||||
using Syntriax.Engine.Physics2D.Abstract;
|
||||
|
||||
namespace Syntriax.Engine.Physics2D;
|
||||
|
@ -54,10 +57,10 @@ public class PhysicsEngine2D : IPhysicsEngine2D
|
|||
for (int colliderIY = colliderIX + 1; colliderIY < colliders.Count; colliderIY++)
|
||||
for (int verticesIndex = 0; verticesIndex < colliderX.Vertices.Count; verticesIndex++)
|
||||
{
|
||||
if (!colliders[colliderIY].CheckCollision(colliderX.Vertices[verticesIndex], colliderX, out var collisionInformation))
|
||||
ICollider2D colliderY = colliders[colliderIY];
|
||||
if (!colliderY.CheckCollision(colliderX.Vertices[verticesIndex], colliderX, out var collisionInformation))
|
||||
continue;
|
||||
|
||||
ICollider2D colliderY = colliders[colliderIY];
|
||||
if (colliderX.BehaviourController.TryGetBehaviour(out IRigidBody2D? rigidX))
|
||||
{
|
||||
Vector2 xVertex = colliderX.Vertices[verticesIndex];
|
||||
|
@ -68,10 +71,45 @@ public class PhysicsEngine2D : IPhysicsEngine2D
|
|||
rigidX.Velocity = Vector2.Reflect(rigidX.Velocity, collisionInformation.Normal);
|
||||
rigidX.Transform.Position -= xVertex - vertexNewPosition;
|
||||
|
||||
// {
|
||||
// GameObject gameObject = Game1.gameManager.InstantiateGameObject<GameObject>();
|
||||
// DisplayableSpriteBehaviour displayableSpriteBehaviour = gameObject.BehaviourController.AddBehaviour<DisplayableSpriteBehaviour>();
|
||||
// displayableSpriteBehaviour.Assign(Game1.spriteBox);
|
||||
// gameObject.Transform.Position = collisionInformation.ContactPosition;
|
||||
// gameObject.Transform.Scale = new Vector2(1f, .01f) * 100f;
|
||||
// gameObject.Transform.Rotation = (float)Math.Atan2(collisionInformation.Normal.Y, collisionInformation.Normal.X);
|
||||
// }
|
||||
// {
|
||||
// GameObject gameObject = Game1.gameManager.InstantiateGameObject<GameObject>();
|
||||
// DisplayableSpriteBehaviour displayableSpriteBehaviour = gameObject.BehaviourController.AddBehaviour<DisplayableSpriteBehaviour>();
|
||||
// displayableSpriteBehaviour.Color = Color.Aqua;
|
||||
// displayableSpriteBehaviour.Assign(Game1.spriteBox);
|
||||
// gameObject.Transform.Position = collisionInformation.ContactPosition;
|
||||
// gameObject.Transform.Scale = new Vector2(1f, .01f) * 100f;
|
||||
// gameObject.Transform.Rotation = (float)Math.Atan2(rigidX.Velocity.Y, rigidX.Velocity.X);
|
||||
// }
|
||||
// {
|
||||
// GameObject gameObject = Game1.gameManager.InstantiateGameObject<GameObject>();
|
||||
// DisplayableSpriteBehaviour displayableSpriteBehaviour = gameObject.BehaviourController.AddBehaviour<DisplayableSpriteBehaviour>();
|
||||
// displayableSpriteBehaviour.Color = Color.Pink;
|
||||
// displayableSpriteBehaviour.Assign(Game1.spriteBox);
|
||||
// gameObject.Transform.Position = collisionInformation.ContactPosition;
|
||||
// gameObject.Transform.Scale = new Vector2(1f, .01f) * 100f;
|
||||
// gameObject.Transform.Rotation = (float)Math.Atan2(edgeDirection.Y, edgeDirection.X);
|
||||
// }
|
||||
// {
|
||||
// GameObject gameObject = Game1.gameManager.InstantiateGameObject<GameObject>();
|
||||
// DisplayableSpriteBehaviour displayableSpriteBehaviour = gameObject.BehaviourController.AddBehaviour<DisplayableSpriteBehaviour>();
|
||||
// displayableSpriteBehaviour.Color = Color.DarkGoldenrod;
|
||||
// displayableSpriteBehaviour.Assign(Game1.spriteBox);
|
||||
// gameObject.Transform.Position = collisionInformation.ContactPosition;
|
||||
// gameObject.Transform.Scale = new Vector2(1f, .01f) * 100f;
|
||||
// gameObject.Transform.Rotation = (float)Math.Atan2((xVertex - p1).Y, (xVertex - p1).X);
|
||||
// }
|
||||
|
||||
StepRigidBody(rigidX, intervalDeltaTime * (1f - t));
|
||||
colliders[colliderIX].RecalculateVertices();
|
||||
}
|
||||
|
||||
Console.WriteLine($"/////////////////////////////////////////////");
|
||||
// Console.WriteLine($"Collision");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue