SpaceCadetPinball/SpaceCadetPinball/TCircle.cpp

36 lines
1023 B
C++
Raw Normal View History

2020-11-21 16:14:40 +01:00
#include "pch.h"
#include "TCircle.h"
#include "TBall.h"
#include "TCollisionComponent.h"
#include "TTableLayer.h"
TCircle::TCircle(TCollisionComponent* collComp, char* activeFlag, unsigned collisionGroup, vector2* center,
2021-01-28 16:01:26 +01:00
float radius): TEdgeSegment(collComp, activeFlag, collisionGroup)
2020-11-21 16:14:40 +01:00
{
Circle.RadiusSq = radius * radius;
Circle.Center = *center;
2020-11-21 16:14:40 +01:00
}
2021-01-07 17:00:38 +01:00
float TCircle::FindCollisionDistance(ray_type* ray)
2020-11-21 16:14:40 +01:00
{
return maths::ray_intersect_circle(*ray, Circle);
2021-01-07 17:00:38 +01:00
}
2022-05-20 10:51:00 +02:00
void TCircle::EdgeCollision(TBall* ball, float distance)
2021-01-07 17:00:38 +01:00
{
vector2 direction{}, nextPosition{};
2021-01-07 17:00:38 +01:00
2022-05-20 10:51:00 +02:00
nextPosition.X = distance * ball->Direction.X + ball->Position.X;
nextPosition.Y = distance * ball->Direction.Y + ball->Position.Y;
2021-01-07 17:00:38 +01:00
direction.X = nextPosition.X - Circle.Center.X;
direction.Y = nextPosition.Y - Circle.Center.Y;
maths::normalize_2d(direction);
2022-05-20 10:51:00 +02:00
CollisionComponent->Collision(ball, &nextPosition, &direction, distance, this);
2021-01-07 17:00:38 +01:00
}
void TCircle::place_in_grid()
{
TTableLayer::edges_insert_circle(&Circle, this, nullptr);
}