TFlipperEdge v1.

This commit is contained in:
oz
2021-01-09 19:11:03 +03:00
parent d19fb0476a
commit 87b4aa27e7
7 changed files with 627 additions and 1 deletions

Binary file not shown.

View File

@@ -189,6 +189,7 @@
<ClInclude Include="TEdgeSegment.h" /> <ClInclude Include="TEdgeSegment.h" />
<ClInclude Include="TFlagSpinner.h" /> <ClInclude Include="TFlagSpinner.h" />
<ClInclude Include="TFlipper.h" /> <ClInclude Include="TFlipper.h" />
<ClInclude Include="TFlipperEdge.h" />
<ClInclude Include="TGate.h" /> <ClInclude Include="TGate.h" />
<ClInclude Include="THole.h" /> <ClInclude Include="THole.h" />
<ClInclude Include="timer.h" /> <ClInclude Include="timer.h" />
@@ -258,6 +259,7 @@
<ClCompile Include="TEdgeSegment.cpp" /> <ClCompile Include="TEdgeSegment.cpp" />
<ClCompile Include="TFlagSpinner.cpp" /> <ClCompile Include="TFlagSpinner.cpp" />
<ClCompile Include="TFlipper.cpp" /> <ClCompile Include="TFlipper.cpp" />
<ClCompile Include="TFlipperEdge.cpp" />
<ClCompile Include="TGate.cpp" /> <ClCompile Include="TGate.cpp" />
<ClCompile Include="THole.cpp" /> <ClCompile Include="THole.cpp" />
<ClCompile Include="timer.cpp" /> <ClCompile Include="timer.cpp" />

View File

@@ -219,6 +219,9 @@
<ClInclude Include="TEdgeBox.h"> <ClInclude Include="TEdgeBox.h">
<Filter>Header Files\TPinballComponent</Filter> <Filter>Header Files\TPinballComponent</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="TFlipperEdge.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="pch.cpp"> <ClCompile Include="pch.cpp">
@@ -404,6 +407,9 @@
<ClCompile Include="TEdgeBox.cpp"> <ClCompile Include="TEdgeBox.cpp">
<Filter>Source Files\TPinballComponent</Filter> <Filter>Source Files\TPinballComponent</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="TFlipperEdge.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Natvis Include="NatvisFile.natvis" /> <Natvis Include="NatvisFile.natvis" />

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,61 @@
#pragma once
#include "maths.h"
#include "TEdgeSegment.h"
class TPinballTable;
class TFlipperEdge : public TEdgeSegment
{
public:
TFlipperEdge(TCollisionComponent* collComp, char* someFlag, unsigned int visualFlag, TPinballTable* table,
vector_type* origin, vector_type* vecT, vector_type* vec3, float bmpCoef1, float bmpCoef2, float a11,
float c4F, float c5F);
void port_draw() override;
float FindCollisionDistance(ray_type* ray) override;
void EdgeCollision(TBall* ball, float coef) override;
void place_in_grid() override;
void set_control_points(float timeNow);
void build_edges_in_motion();
float flipper_angle(float timeNow);
int is_ball_inside(float x, float y);
void SetMotion(int code, float value);
int FlipperFlag;
float CollisionC4F;
float CollisionC5F;
vector_type RotOrigin;
float CirclebaseRadius;
float CircleT1Radius;
float CirclebaseRadiusSq;
float CircleT1RadiusSq;
float CirclebaseRadiusMSq;
float CircleT1RadiusMSq;
float AngleMax;
float Angle2;
float Angle1;
int Unknown15;
int Unknown16;
vector_type Unknown17V;
vector_type A1Src;
vector_type A2Src;
vector_type B1Src;
vector_type B2Src;
float Unknown32F;
vector_type T1Src;
vector_type Unknown36V;
float DistanceDivSq;
float Unknown40F;
vector_type CollisionDirection;
int Unknown44;
float TimeAngle;
float Unknown46F;
float AngleMult;
float BmpCoef1;
float BmpCoef2;
vector_type NextBallPosition;
static float flipper_sin_angle, flipper_cos_angle;
static vector_type A1, A2, B1, B2, T1;
static line_type lineA, lineB;
static circle_type circlebase, circleT1;
};

View File

@@ -268,7 +268,8 @@ void maths::vector_add(vector_type* vec1Dst, vector_type* vec2)
vec1Dst->Y += vec2->Y; vec1Dst->Y += vec2->Y;
} }
float maths::basic_collision(TBall* ball, vector_type* nextPosition, vector_type* direction, float a4, float a5, float maxSpeed, float maths::basic_collision(TBall* ball, vector_type* nextPosition, vector_type* direction, float a4, float a5,
float maxSpeed,
float multiplier) float multiplier)
{ {
ball->Position.X = nextPosition->X; ball->Position.X = nextPosition->X;
@@ -304,3 +305,41 @@ float maths::Distance_Squared(vector_type vec1, vector_type vec2)
{ {
return (vec1.Y - vec2.Y) * (vec1.Y - vec2.Y) + (vec1.X - vec2.X) * (vec1.X - vec2.X); return (vec1.Y - vec2.Y) * (vec1.Y - vec2.Y) + (vec1.X - vec2.X) * (vec1.X - vec2.X);
} }
float maths::DotProduct(vector_type* vec1, vector_type* vec2)
{
return vec1->Y * vec2->Y + vec1->X * vec2->X;
}
void maths::vswap(vector_type* vec1, vector_type* vec2)
{
vector_type tmp = *vec1;
*vec1 = *vec2;
*vec2 = tmp;
}
float maths::Distance(vector_type* vec1, vector_type* vec2)
{
auto dx = vec1->X - vec2->X;
auto dy = vec1->Y - vec2->Y;
return sqrt(dy * dy + dx * dx);
}
void maths::SinCos(float angle, float* sinOut, float* cosOut)
{
*sinOut = sin(angle);
*cosOut = cos(angle);
}
void maths::RotatePt(vector_type* point, float sin, float cos, vector_type* origin)
{
auto dirX = point->X - origin->X;
auto dirY = point->Y - origin->Y;
point->X = dirX * cos - dirY * sin + origin->X;
point->Y = dirX * sin + dirY * cos + origin->Y;
}
float maths::distance_to_flipper(ray_type* ray1, ray_type* ray2)
{
return 0;
}

View File

@@ -62,4 +62,10 @@ public:
static float basic_collision(TBall* ball, vector_type* nextPosition, vector_type* direction, float a4, float a5, static float basic_collision(TBall* ball, vector_type* nextPosition, vector_type* direction, float a4, float a5,
float maxSpeed, float multiplier); float maxSpeed, float multiplier);
static float Distance_Squared(vector_type vec1, vector_type vec2); static float Distance_Squared(vector_type vec1, vector_type vec2);
static float DotProduct(vector_type* vec1, vector_type* vec2);
static void vswap(vector_type* vec1, vector_type* vec2);
static float Distance(vector_type* vec1, vector_type* vec2);
static void SinCos(float angle, float* sinOut, float* cosOut);
static void RotatePt(vector_type* point, float sin, float cos, vector_type* origin);
static float distance_to_flipper(ray_type* ray1, ray_type* ray2);
}; };