Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-Mania-Decompilation
Path: blob/master/SonicMania/Objects/MMZ/ConveyorBelt.c
338 views
1
// ---------------------------------------------------------------------
2
// RSDK Project: Sonic Mania
3
// Object Description: ConveyorBelt Object
4
// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges
5
// Decompiled by: Rubberduckycooly & RMGRich
6
// ---------------------------------------------------------------------
7
8
#include "Game.h"
9
10
ObjectConveyorBelt *ConveyorBelt;
11
12
void ConveyorBelt_Update(void)
13
{
14
RSDK_THIS(ConveyorBelt);
15
16
foreach_active(Player, player)
17
{
18
if (Player_CheckCollisionTouch(player, self, &self->hitbox)) {
19
if (player->onGround)
20
player->position.x += self->speed << 14;
21
}
22
}
23
}
24
25
void ConveyorBelt_LateUpdate(void) {}
26
27
void ConveyorBelt_StaticUpdate(void) {}
28
29
void ConveyorBelt_Draw(void) {}
30
31
void ConveyorBelt_Create(void *data)
32
{
33
RSDK_THIS(ConveyorBelt);
34
35
self->active = ACTIVE_BOUNDS;
36
self->visible = false;
37
self->updateRange.x = 0x400000;
38
self->updateRange.y = 0x400000;
39
self->drawGroup = Zone->objectDrawGroup[1];
40
41
if (SceneInfo->inEditor) {
42
if (!self->speed)
43
self->speed = -8;
44
45
if (!self->size.x)
46
self->size.x = 0xC00000;
47
48
if (!self->size.y)
49
self->size.y = 0x200000;
50
}
51
52
self->hitbox.left = -(self->size.x >> 17) - 16;
53
self->hitbox.top = -(self->size.y >> 17) - 16;
54
self->hitbox.right = (self->size.x >> 17) + 16;
55
self->hitbox.bottom = (self->size.y >> 17) + 16;
56
57
RSDK.SetSpriteAnimation(ConveyorBelt->aniFrames, 0, &self->animator, true, 0);
58
}
59
60
void ConveyorBelt_StageLoad(void)
61
{
62
if (RSDK.CheckSceneFolder("MMZ"))
63
ConveyorBelt->aniFrames = RSDK.LoadSpriteAnimation("MMZ/ConveyorWheel.bin", SCOPE_STAGE);
64
}
65
66
#if GAME_INCLUDE_EDITOR
67
void ConveyorBelt_EditorDraw(void)
68
{
69
RSDK_THIS(ConveyorBelt);
70
71
ConveyorBelt_Create(NULL);
72
73
RSDK.DrawSprite(&self->animator, NULL, false);
74
75
if (showGizmos()) {
76
RSDK_DRAWING_OVERLAY(true);
77
78
DrawHelpers_DrawHitboxOutline(self->position.x, self->position.y, &self->hitbox, FLIP_NONE, 0xFFFF00);
79
80
RSDK_DRAWING_OVERLAY(false);
81
}
82
}
83
84
void ConveyorBelt_EditorLoad(void) { ConveyorBelt->aniFrames = RSDK.LoadSpriteAnimation("MMZ/ConveyorWheel.bin", SCOPE_STAGE); }
85
#endif
86
87
void ConveyorBelt_Serialize(void)
88
{
89
RSDK_EDITABLE_VAR(ConveyorBelt, VAR_VECTOR2, size);
90
RSDK_EDITABLE_VAR(ConveyorBelt, VAR_INT32, speed);
91
}
92
93