Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-1-2-2013-Decompilation
Path: blob/main/RSDKv4/NativeObjects/FadeScreen.cpp
817 views
1
#include "RetroEngine.hpp"
2
3
void FadeScreen_Create(void *objPtr)
4
{
5
RSDK_THIS(FadeScreen);
6
self->timer = 0.0;
7
self->delay = 1.5;
8
self->fadeSpeed = 2.0;
9
self->state = FADESCREEN_STATE_GAMEFADEOUT;
10
Engine.nativeMenuFadeIn = true;
11
}
12
void FadeScreen_Main(void *objPtr)
13
{
14
RSDK_THIS(FadeScreen);
15
16
SetRenderBlendMode(RENDER_BLEND_ALPHA);
17
self->timer += self->fadeSpeed * Engine.deltaTime;
18
switch (self->state) {
19
case FADESCREEN_STATE_MENUFADEIN:
20
self->fadeA = ((self->delay - self->timer) * 256.0f);
21
RenderRect(-SCREEN_CENTERX_F, SCREEN_CENTERY, 160.0, SCREEN_XSIZE_F, SCREEN_YSIZE_F, self->fadeR, self->fadeG, self->fadeB, self->fadeA);
22
if (self->timer > self->delay) {
23
RemoveNativeObject(self);
24
Engine.nativeMenuFadeIn = false;
25
SetMusicTrack("MainMenu.ogg", 0, true, 106596);
26
PlayMusic(0, 0);
27
}
28
break;
29
30
case FADESCREEN_STATE_FADEOUT:
31
self->fadeA = self->timer * 256.0;
32
RenderRect(-SCREEN_CENTERX_F, SCREEN_CENTERY_F, 160.0, SCREEN_XSIZE_F, SCREEN_YSIZE_F, self->fadeR, self->fadeG, self->fadeB,
33
self->fadeA);
34
if (self->timer > self->delay)
35
RemoveNativeObject(self);
36
break;
37
38
case FADESCREEN_STATE_GAMEFADEOUT:
39
self->fadeA = self->timer * 256.0;
40
RenderRect(-SCREEN_CENTERX_F, SCREEN_CENTERY_F, 160.0, SCREEN_XSIZE_F, SCREEN_YSIZE_F, self->fadeR, self->fadeG, self->fadeB,
41
self->fadeA);
42
SetMusicVolume(masterVolume - 2);
43
44
if (self->timer > self->delay) {
45
ClearNativeObjects();
46
CREATE_ENTITY(RetroGameLoop);
47
if (Engine.gameDeviceType == RETRO_MOBILE)
48
CREATE_ENTITY(VirtualDPad);
49
}
50
break;
51
52
#if !RETRO_USE_ORIGINAL_CODE
53
case FADESCREEN_STATE_FADEIN:
54
self->fadeA = ((self->delay - self->timer) * 256.0f);
55
RenderRect(-SCREEN_CENTERX_F, SCREEN_CENTERY_F, 160.0, SCREEN_XSIZE_F, SCREEN_YSIZE_F, self->fadeR, self->fadeG, self->fadeB,
56
self->fadeA);
57
if (self->timer > self->delay) {
58
RemoveNativeObject(self);
59
Engine.nativeMenuFadeIn = false;
60
}
61
break;
62
#endif
63
}
64
65
#if !RETRO_USE_ORIGINAL_CODE
66
NewRenderState();
67
MatrixScaleXYZF(&self->render, Engine.windowScale, Engine.windowScale, 1.0);
68
MatrixTranslateXYZF(&self->temp, 0.0, 0.0, 160.0);
69
MatrixMultiplyF(&self->render, &self->temp);
70
SetRenderMatrix(&self->render);
71
#endif
72
}
73
74