Files
3d-pinball-space-cadet/Classes/TOneWay/TOneWay.cpp
T

132 lines
3.5 KiB
C++

#include "TOneWay.h"
//----- (01015B61) --------------------------------------------------------
int __thiscall TOneway::get_scoring(TOneway *this, int a2)
{
int result; // eax
if ( a2 >= 6 )
result = 0;
else
result = *(_DWORD *)((char *)this + 4 * a2 + 86);
return result;
}
//----- (01015B7F) --------------------------------------------------------
void __thiscall TOneway::put_scoring(TOneway *this, int a2, int a3)
{
if ( a2 < 6 )
*(_DWORD *)((char *)this + 4 * a2 + 86) = a3;
}
//----- (01018032) --------------------------------------------------------
void __thiscall TOneway::Collision(TOneway *this, struct TBall *a2, struct vector_type *a3, struct vector_type *a4, float a5, struct TEdgeSegment *a6)
{
TOneway *v6; // edi
int v7; // edi
double v8; // st7
int v9; // eax
v6 = this;
if ( a6 == *(struct TEdgeSegment **)((char *)this + 82) )
{
TBall::not_again(a2, a6);
v8 = *(float *)((char *)a2 + 70) - a5;
*(_DWORD *)((char *)a2 + 42) = *(_DWORD *)a3;
v9 = *((_DWORD *)a3 + 1);
*(float *)((char *)a2 + 70) = v8;
*(_DWORD *)((char *)a2 + 46) = v9;
if ( !*(_DWORD *)(*(_DWORD *)((char *)v6 + 30) + 370) )
{
if ( *(_DWORD *)((char *)v6 + 74) )
loader_play_sound(*(_DWORD *)((char *)v6 + 74));
control_handler(63, v6);
}
}
else if ( *(_DWORD *)(*(_DWORD *)((char *)this + 30) + 370) )
{
basic_collision(a2, a3, a4, *(float *)((char *)this + 54), *(float *)((char *)this + 58), 1000000000.0, 0.0);
}
else if ( basic_collision(
a2,
a3,
a4,
*(float *)((char *)this + 54),
*(float *)((char *)this + 58),
*(float *)((char *)this + 66),
*(float *)((char *)this + 62)) > 0.2 )
{
v7 = *(_DWORD *)((char *)v6 + 70);
if ( v7 )
loader_play_sound(v7);
}
}
//----- (01019204) --------------------------------------------------------
TOneway *__thiscall TOneway::TOneway(TOneway *this, struct TPinballTable *a2, int a3)
{
TLine *v3; // edi
TOneway *v4; // esi
TLine *v5; // eax
TLine *v6; // eax
TLine *v7; // eax
float v8; // ST10_4
char v10; // [esp+10h] [ebp-60h]
int v11; // [esp+18h] [ebp-58h]
int *v12; // [esp+1Ch] [ebp-54h]
unsigned int v13; // [esp+44h] [ebp-2Ch]
int v14; // [esp+58h] [ebp-18h]
int v15; // [esp+5Ch] [ebp-14h]
int v16; // [esp+64h] [ebp-Ch]
int v17; // [esp+68h] [ebp-8h]
v3 = 0;
v4 = this;
TCollisionComponent::TCollisionComponent(this, a2, a3, 0);
*(_DWORD *)v4 = &TOneway::vftable;
loader_query_visual(a3, 0, &v10);
if ( v11 == 2 )
{
v16 = *v12;
v17 = v12[1];
v14 = v12[2];
v15 = v12[3];
v5 = (TLine *)operator new(0x55u);
if ( v5 )
v3 = TLine::TLine(v5, v4, (char *)v4 + 5, v13, (struct vector_type *)&v16, (struct vector_type *)&v14);
if ( v3 )
{
TLine::Offset(v3, *(float *)((char *)a2 + 282));
(*(void (__thiscall **)(TLine *))(*(_DWORD *)v3 + 8))(v3);
objlist_class::Add((TOneway *)((char *)v4 + 42), (void *)v3);
}
v6 = (TLine *)operator new(0x55u);
if ( v6 )
v7 = TLine::TLine(v6, v4, (char *)v4 + 5, v13, (struct vector_type *)&v14, (struct vector_type *)&v16);
else
v7 = 0;
*(_DWORD *)((char *)v4 + 82) = v7;
if ( v7 )
{
v8 = -(*(float *)((char *)a2 + 282) * 0.8);
TLine::Offset(v7, v8);
(*(void (**)(void))(**(_DWORD **)((char *)v4 + 82) + 8))();
objlist_class::Add((TOneway *)((char *)v4 + 42), *(void **)((char *)v4 + 82));
}
}
return v4;
}
// 1002530: using guessed type void *TOneway::vftable;
//----- (0101AAA7) --------------------------------------------------------
TOneway *__thiscall TOneway::`scalar deleting destructor`(TOneway *this, char a2)
{
TOneway *v2; // esi
v2 = this;
TCollisionComponent::~TCollisionComponent(this);
if ( a2 & 1 )
operator delete((void *)v2);
return v2;
}