Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-Mania-Decompilation
Path: blob/master/SonicMania/Objects/Common/GenericTrigger.c
338 views
1
// ---------------------------------------------------------------------
2
// RSDK Project: Sonic Mania
3
// Object Description: GenericTrigger Object
4
// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges
5
// Decompiled by: Rubberduckycooly & RMGRich
6
// ---------------------------------------------------------------------
7
8
#include "Game.h"
9
10
ObjectGenericTrigger *GenericTrigger;
11
12
void GenericTrigger_Update(void)
13
{
14
RSDK_THIS(GenericTrigger);
15
16
foreach_active(Player, player)
17
{
18
if (Player_CheckCollisionTouch(player, self, &self->hitbox) && !player->sidekick) {
19
GenericTrigger->playerID = player->playerID;
20
StateMachine_Run(GenericTrigger->callbacks[self->triggerID]);
21
}
22
}
23
}
24
25
void GenericTrigger_LateUpdate(void) {}
26
27
void GenericTrigger_StaticUpdate(void) {}
28
29
void GenericTrigger_Draw(void) {}
30
31
void GenericTrigger_Create(void *data)
32
{
33
RSDK_THIS(GenericTrigger);
34
35
if (!SceneInfo->inEditor) {
36
self->triggerID &= 0xF;
37
38
self->updateRange.x = self->size.x;
39
self->updateRange.y = self->size.y;
40
self->active = ACTIVE_BOUNDS;
41
42
self->hitbox.left = -(self->size.x >> 16);
43
self->hitbox.right = (self->size.x >> 16);
44
self->hitbox.top = -(self->size.y >> 16);
45
self->hitbox.bottom = (self->size.y >> 16);
46
}
47
}
48
49
void GenericTrigger_StageLoad(void) {}
50
51
#if GAME_INCLUDE_EDITOR
52
void GenericTrigger_EditorDraw(void)
53
{
54
RSDK_THIS(GenericTrigger);
55
56
self->updateRange.x = self->size.x;
57
self->updateRange.y = self->size.y;
58
59
RSDK.SetSpriteAnimation(GenericTrigger->aniFrames, 0, &self->animator, true, 7);
60
RSDK.DrawSprite(&self->animator, NULL, false);
61
62
if (showGizmos()) {
63
RSDK_DRAWING_OVERLAY(true);
64
65
DrawHelpers_DrawRectOutline(self->position.x, self->position.y, self->size.x << 1, self->size.y << 1, 0xFFFF00);
66
67
RSDK_DRAWING_OVERLAY(false);
68
}
69
}
70
71
void GenericTrigger_EditorLoad(void) { GenericTrigger->aniFrames = RSDK.LoadSpriteAnimation("Editor/EditorIcons.bin", SCOPE_STAGE); }
72
#endif
73
74
void GenericTrigger_Serialize(void)
75
{
76
RSDK_EDITABLE_VAR(GenericTrigger, VAR_VECTOR2, size);
77
RSDK_EDITABLE_VAR(GenericTrigger, VAR_UINT8, triggerID);
78
}
79
80