#include "pch.h" #include "TSoloTarget.h" #include "control.h" #include "loader.h" #include "render.h" #include "timer.h" #include "TPinballTable.h" TSoloTarget::TSoloTarget(TPinballTable* table, int groupIndex) : TCollisionComponent2(table, groupIndex, true) { visualStruct visual{}; Timer = 0; TimerTime = 0.1f; loader::query_visual(groupIndex, 0, &visual); SoundIndex4 = visual.SoundIndex4; TSoloTarget::Message2(MessageCode::TSoloTargetEnable, 0.0); } int TSoloTarget::Message2(MessageCode code, float value) { switch (code) { case MessageCode::TSoloTargetDisable: case MessageCode::TSoloTargetEnable: ActiveFlag = code == MessageCode::TSoloTargetEnable; break; case MessageCode::Reset: if (Timer) timer::kill(Timer); Timer = 0; ActiveFlag = 1; break; default: return 0; } if (ListBitmap) { auto index = 1 - ActiveFlag; auto bmp = ListBitmap->at(index); auto zMap = ListZMap->at(index); render::sprite_set( RenderSprite, bmp, zMap, bmp->XPosition - PinballTable->XOffset, bmp->YPosition - PinballTable->YOffset); } return 0; } void TSoloTarget::Collision(TBall* ball, vector2* nextPosition, vector2* direction, float distance, TEdgeSegment* edge) { if (DefaultCollision(ball, nextPosition, direction)) { Message2(MessageCode::TSoloTargetDisable, 0.0); Timer = timer::set(TimerTime, this, TimerExpired); control::handler(63, this); } } void TSoloTarget::TimerExpired(int timerId, void* caller) { auto target = static_cast(caller); target->Message2(MessageCode::TSoloTargetEnable, 0.0); target->Timer = 0; }