Path: blob/master/SonicMania/Objects/Global/NoSwap.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: NoSwap Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89#if MANIA_USE_PLUS10ObjectNoSwap *NoSwap;1112void NoSwap_Update(void)13{14RSDK_THIS(NoSwap);1516if (Player->playerCount) {17int32 cnt = 0;18for (int32 p = 0; p < Player->playerCount; ++p) {19EntityPlayer *player = RSDK_GET_ENTITY(p, Player);2021if (!Player_CheckValidState(player)) {22if (self->noDeathSwap) {23if (player->state == Player_State_Death || player->state == Player_State_Drown) {24Player->cantSwap = true;25++NoSwap->counter;26}27}28}29else {30self->playerPos.x = player->position.x;31self->playerPos.y = player->position.y;32}3334if (Player_CheckCollisionTouch(player, self, &self->hitbox)) {35if (self->always) {36Player->cantSwap = true;37++NoSwap->counter;38}39else {40++cnt;41}42}43}4445if (cnt == 1) {46Player->cantSwap = true;47++NoSwap->counter;48}49}50}5152void NoSwap_LateUpdate(void) {}5354void NoSwap_StaticUpdate(void)55{56if (NoSwap->counter)57NoSwap->counter = 0;58else59Player->cantSwap = false;60}6162void NoSwap_Draw(void)63{64RSDK_THIS(NoSwap);6566RSDK.DrawLine(self->position.x - 16 * self->size.x, self->position.y - 16 * self->size.y, self->position.x + 16 * self->size.x,67self->position.y - 16 * self->size.y, 0xFF0000, 0xFF, INK_NONE, false);68RSDK.DrawLine(self->position.x - 16 * self->size.x, self->position.y + 16 * self->size.y, self->position.x + 16 * self->size.x,69self->position.y + 16 * self->size.y, 0xFF0000, 0xFF, INK_NONE, false);70RSDK.DrawLine(self->position.x - 16 * self->size.x, self->position.y - 16 * self->size.y, self->position.x - 16 * self->size.x,71self->position.y + 16 * self->size.y, 0xFF0000, 0xFF, INK_NONE, false);72RSDK.DrawLine(self->position.x + 16 * self->size.x, self->position.y - 16 * self->size.y, self->position.x + 16 * self->size.x,73self->position.y + 16 * self->size.y, 0xFF0000, 0xFF, INK_NONE, false);74}7576void NoSwap_Create(void *data)77{78RSDK_THIS(NoSwap);7980if (!SceneInfo->inEditor) {81self->updateRange.x = 16 * self->size.x;82self->updateRange.y = 16 * self->size.y;8384self->hitbox.left = -(self->size.x >> 12);85self->hitbox.top = -(self->size.y >> 12);86self->hitbox.right = (self->size.x >> 12);87self->hitbox.bottom = (self->size.y >> 12);88self->active = ACTIVE_BOUNDS;89}90}9192void NoSwap_StageLoad(void) { NoSwap->active = ACTIVE_ALWAYS; }9394#if GAME_INCLUDE_EDITOR95void NoSwap_EditorDraw(void)96{97RSDK_THIS(NoSwap);9899self->updateRange.x = TILE_SIZE * self->size.x;100self->updateRange.y = TILE_SIZE * self->size.y;101102if (showGizmos()) {103RSDK_DRAWING_OVERLAY(true);104105NoSwap_Draw();106107RSDK_DRAWING_OVERLAY(false);108}109110RSDK.SetSpriteAnimation(NoSwap->aniFrames, 0, &self->unusedAnimator1, true, 8);111RSDK.DrawSprite(&self->unusedAnimator1, NULL, false);112}113114void NoSwap_EditorLoad(void) { NoSwap->aniFrames = RSDK.LoadSpriteAnimation("Editor/EditorIcons.bin", SCOPE_STAGE); }115#endif116117void NoSwap_Serialize(void)118{119RSDK_EDITABLE_VAR(NoSwap, VAR_VECTOR2, size);120RSDK_EDITABLE_VAR(NoSwap, VAR_BOOL, always);121RSDK_EDITABLE_VAR(NoSwap, VAR_BOOL, noDeathSwap);122}123#endif124125126