Path: blob/master/SonicMania/Objects/Cutscene/FXSpinRay.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: FXSpinRay Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectFXSpinRay *FXSpinRay;1011void FXSpinRay_Update(void)12{13RSDK_THIS(FXSpinRay);1415self->angle = ((self->angle & 0xFF) + self->spinSpeed) & 0xFF;16int32 angle = self->angle;1718for (int32 i = 0; i < 20; i += 4) {19for (int32 v = 0; v < 4; ++v) {20self->vertices[i + v] = self->vertexPos[v];21Zone_RotateOnPivot(&self->vertices[i + v] , &self->vertexOffset, angle);22}2324angle += 51;25}2627StateMachine_Run(self->state);2829Entity *parent = self->parent;30if (parent) {31self->position.x = parent->position.x + self->offsetPos.x;32self->position.y = parent->position.y + self->offsetPos.y;33}34}3536void FXSpinRay_LateUpdate(void) {}3738void FXSpinRay_StaticUpdate(void) {}3940void FXSpinRay_Draw(void)41{42RSDK_THIS(FXSpinRay);4344int32 scrX = self->position.x - (ScreenInfo->position.x << 16);45int32 scrY = self->position.y - (ScreenInfo->position.y << 16);4647for (int32 i = 0; i < 20; i += 4) {48Vector2 vertices[4];4950vertices[0].x = scrX + self->vertices[i + 0].x;51vertices[0].y = scrY + self->vertices[i + 0].y;52vertices[1].x = scrX + self->vertices[i + 1].x;53vertices[1].y = scrY + self->vertices[i + 1].y;54vertices[2].x = scrX + self->vertices[i + 2].x;55vertices[2].y = scrY + self->vertices[i + 2].y;56vertices[3].x = scrX + self->vertices[i + 3].x;57vertices[3].y = scrY + self->vertices[i + 3].y;5859RSDK.DrawFace(vertices, 4, self->r, self->g, self->b, self->alpha, INK_ADD);60}61}6263void FXSpinRay_Create(void *data)64{65RSDK_THIS(FXSpinRay);6667if (!SceneInfo->inEditor) {68self->visible = true;69self->active = ACTIVE_NORMAL;70self->drawGroup = Zone->objectDrawGroup[1];71self->size = 0x600000;7273self->vertexPos[0].x = -0xC0000;74self->vertexPos[1].x = self->size >> 3;75self->vertexPos[0].y = -self->size;76self->vertexPos[1].y = -self->size;77self->vertexPos[2].x = self->size >> 6;78self->vertexPos[3].x = -self->size >> 6;79self->vertexPos[2].y = -self->size >> 4;80self->vertexPos[3].y = -self->size >> 4;8182self->spinSpeed = 8;83self->state = FXSpinRay_State_FadeIn;8485self->r = 0xF0;86self->g = 0xF0;87self->b = 0xF0;88}89}9091void FXSpinRay_StageLoad(void) {}9293void FXSpinRay_State_FadeIn(void)94{95RSDK_THIS(FXSpinRay);9697if (self->alpha >= 0x80)98self->state = FXSpinRay_State_Spinning;99else100self->alpha += 0x10;101}102103void FXSpinRay_State_Spinning(void)104{105RSDK_THIS(FXSpinRay);106107if (++self->timer == 16)108self->state = FXSpinRay_State_FadeOut;109}110111void FXSpinRay_State_FadeOut(void)112{113RSDK_THIS(FXSpinRay);114115if (self->alpha <= 0)116destroyEntity(self);117else118self->alpha -= 0x10;119}120121#if GAME_INCLUDE_EDITOR122void FXSpinRay_EditorDraw(void) {}123124void FXSpinRay_EditorLoad(void) {}125#endif126127void FXSpinRay_Serialize(void) {}128129130