Fizzle radio

This commit is contained in:
James Lambert 2023-07-13 22:24:22 -06:00
parent 5d9cd2e5ed
commit 9f92f1fac3
5 changed files with 30 additions and 37 deletions

View file

@ -1 +1,7 @@
-alpha off -crop 197x145+0+0 -resize 48x
-alpha off
\( -clone 0 -crop 197x145+0+0 -resize 48x -repage +0+0 \)
\( -clone 0 -crop 6x6+358+29 -repage +0+0 \)
\( -clone 0 -crop 6x6+341+130 -repage +42+0 \)
-compose Over
-layers merge
-crop 48x35+0+0

View file

@ -75,37 +75,6 @@ materials:
gDPSetCombineMode:
color: ["SHADE", "0", "PRIMITIVE", "0"]
radio_face:
gDPSetTile:
filename: ../../portal_pak_modified/materials/models/props/radio.png
fmt: G_IM_FMT_RGBA
siz: G_IM_SIZ_16b
gSPGeometryMode:
set: [G_LIGHTING, G_SHADE]
gDPSetCombineMode:
color: ["SHADE", "0", "TEXEL0", "0"]
radio_black:
gDPSetPrimColor:
r: 32
g: 32
b: 32
gSPGeometryMode:
set: [G_LIGHTING, G_SHADE]
gDPSetCombineMode:
color: ["SHADE", "0", "PRIMITIVE", "0"]
radio_white:
gDPSetPrimColor:
r: 240
g: 240
b: 240
gSPGeometryMode:
set: [G_LIGHTING, G_SHADE]
gDPSetCombineMode:
color: ["SHADE", "0", "PRIMITIVE", "0"]
solid_white:
gDPSetPrimColor:
r: 255

Binary file not shown.

View file

@ -117,8 +117,11 @@ void decorObjectDelete(struct DecorObject* decorObject) {
free(decorObject);
}
int decorObjectUpdateFizzler(struct CollisionObject* collisionObject, float* fizzleTime) {
enum FizzleCheckResult decorObjectUpdateFizzler(struct CollisionObject* collisionObject, float* fizzleTime) {
enum FizzleCheckResult result = FizzleCheckResultNone;
if (collisionObject->body && collisionObject->body->flags & RigidBodyFizzled) {
if (*fizzleTime == 0.0f) {
vector3Scale(&collisionObject->body->velocity, &collisionObject->body->velocity, 0.25f);
@ -128,6 +131,8 @@ int decorObjectUpdateFizzler(struct CollisionObject* collisionObject, float* fiz
quatMultVector(&randomRotation, &gRight, &randomAngularVelocity);
vector3AddScaled(&collisionObject->body->angularVelocity, &randomAngularVelocity, 0.3f, &collisionObject->body->angularVelocity);
result = FizzleCheckResultStart;
}
*fizzleTime += FIZZLE_TIME_STEP;
@ -136,11 +141,11 @@ int decorObjectUpdateFizzler(struct CollisionObject* collisionObject, float* fiz
if (*fizzleTime > 1.0f) {
collisionObject->body->flags &= ~RigidBodyFizzled;
return 1;
result = FizzleCheckResultEnd;
}
}
return 0;
return result;
}
int decorObjectUpdate(struct DecorObject* decorObject) {
@ -152,7 +157,14 @@ int decorObjectUpdate(struct DecorObject* decorObject) {
);
}
if (decorObjectUpdateFizzler(&decorObject->collisionObject, &decorObject->fizzleTime)) {
enum FizzleCheckResult fizzleResult = decorObjectUpdateFizzler(&decorObject->collisionObject, &decorObject->fizzleTime);
if (fizzleResult == FizzleCheckResultStart) {
if (decorObject->playingSound != SOUND_ID_NONE) {
soundPlayerStop(decorObject->playingSound);
decorObject->playingSound = SOUND_ID_NONE;
}
} else if (fizzleResult == FizzleCheckResultEnd) {
if (decorObject->definition->flags & DecorObjectFlagsImportant) {
decorObjectReset(decorObject);
dynamicSceneSetRoomFlags(decorObject->dynamicId, ROOM_FLAG_FROM_INDEX(decorObject->rigidBody.currentRoom));

View file

@ -42,7 +42,13 @@ void decorObjectDelete(struct DecorObject* decorObject);
int decorObjectUpdate(struct DecorObject* decorObject);
enum FizzleCheckResult {
FizzleCheckResultNone,
FizzleCheckResultStart,
FizzleCheckResultEnd,
};
Gfx* decorBuildFizzleGfx(Gfx* gfxToRender, float fizzleTime, struct RenderState* renderState);
int decorObjectUpdateFizzler(struct CollisionObject* collisionObject, float* fizzleTime);
enum FizzleCheckResult decorObjectUpdateFizzler(struct CollisionObject* collisionObject, float* fizzleTime);
#endif