2020-11-21 16:14:40 +01:00
|
|
|
#include "pch.h"
|
|
|
|
#include "TCircle.h"
|
|
|
|
|
2021-01-08 16:50:12 +01:00
|
|
|
#include "TBall.h"
|
|
|
|
#include "TCollisionComponent.h"
|
|
|
|
#include "TTableLayer.h"
|
|
|
|
|
2021-01-28 16:01:26 +01:00
|
|
|
TCircle::TCircle(TCollisionComponent* collComp, char* activeFlag, unsigned collisionGroup, vector_type* center,
|
|
|
|
float radius): TEdgeSegment(collComp, activeFlag, collisionGroup)
|
2020-11-21 16:14:40 +01:00
|
|
|
{
|
|
|
|
Circle.RadiusSq = radius * radius;
|
2020-11-28 12:39:12 +01:00
|
|
|
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
|
|
|
}
|
|
|
|
|
|
|
|
void TCircle::EdgeCollision(TBall* ball, float coef)
|
|
|
|
{
|
|
|
|
vector_type direction{}, nextPosition{};
|
|
|
|
|
|
|
|
nextPosition.X = coef * ball->Acceleration.X + ball->Position.X;
|
|
|
|
nextPosition.Y = coef * ball->Acceleration.Y + ball->Position.Y;
|
|
|
|
direction.X = nextPosition.X - Circle.Center.X;
|
|
|
|
direction.Y = nextPosition.Y - Circle.Center.Y;
|
|
|
|
maths::normalize_2d(&direction);
|
|
|
|
CollisionComponent->Collision(ball, &nextPosition, &direction, coef, this);
|
|
|
|
}
|
2021-01-08 16:50:12 +01:00
|
|
|
|
|
|
|
void TCircle::place_in_grid()
|
|
|
|
{
|
|
|
|
TTableLayer::edges_insert_circle(&Circle, this, nullptr);
|
|
|
|
}
|