Restoring blinking

This commit is contained in:
2021-11-02 09:09:24 -07:00
parent d9f29cd640
commit 00ec323b60
9 changed files with 62 additions and 30 deletions

View File

@ -23,4 +23,6 @@ void pokerCharacterJennyInit(vncharacter_t *vnc) {
608, 250, 608, 250,
280, 123 280, 123
); );
vnc->breathing = false;
} }

View File

@ -12,19 +12,19 @@ void pokerCharacterJulieInit(vncharacter_t *vnc) {
vnCharacterLayerAdd(vnc, 1, 0, 0, 0, 0, 1053, 1961); vnCharacterLayerAdd(vnc, 1, 0, 0, 0, 0, 1053, 1961);
// Layers // Layers
vnCharacterLayerAdd(vnc, 4, vnc->layerEyes = vnCharacterLayerAdd(vnc, 4,
1053, 0, 1053, 0,
353, 119, 353, 119,
344, 351 344, 351
); );
vnCharacterLayerAdd(vnc, 12, vnc->layerMouth = vnCharacterLayerAdd(vnc, 12,
1053, 351, 1053, 351,
353, 119, 353, 119,
344, 351 344, 351
); );
vnCharacterLayerAdd(vnc, 4, vnc->layerEyebrows = vnCharacterLayerAdd(vnc, 4,
1053, 702, 1053, 702,
353, 119, 353, 119,
344, 351 344, 351

View File

@ -13,20 +13,19 @@ void pokerCharacterLucyInit(vncharacter_t *vnc) {
vnCharacterLayerAdd(vnc, 1, 0, 0, 0, 0, 1440, 2240); vnCharacterLayerAdd(vnc, 1, 0, 0, 0, 0, 1440, 2240);
// Layers // Layers
vnc->layerEyes = vnCharacterLayerAdd(vnc, 5,
vnCharacterLayerAdd(vnc, 5,
1440, 0, 1440, 0,
675, 327, 675, 327,
295, 235 295, 235
); );
vnCharacterLayerAdd(vnc, 12, vnc->layerMouth = vnCharacterLayerAdd(vnc, 12,
1440, 235, 1440, 235,
675, 327, 675, 327,
295, 235 295, 235
); );
vnCharacterLayerAdd(vnc, 5, vnc->layerEyebrows = vnCharacterLayerAdd(vnc, 5,
1440, 470, 1440, 470,
675, 327, 675, 327,
295, 235 295, 235

View File

@ -12,19 +12,19 @@ void pokerCharacterPennyInit(vncharacter_t *vnc) {
vnCharacterLayerAdd(vnc, 1, 0, 0, 0, 0, 1000, 1920); vnCharacterLayerAdd(vnc, 1, 0, 0, 0, 0, 1000, 1920);
// Layers // Layers
vnCharacterLayerAdd(vnc, 5, vnc->layerEyebrows = vnCharacterLayerAdd(vnc, 5,
1000, 0, 1000, 0,
367, 256, 367, 256,
280, 280 280, 280
); );
vnCharacterLayerAdd(vnc, 4, vnc->layerEyes = vnCharacterLayerAdd(vnc, 4,
1000, 280, 1000, 280,
367, 256, 367, 256,
280, 280 280, 280
); );
vnCharacterLayerAdd(vnc, 12, vnc->layerMouth = vnCharacterLayerAdd(vnc, 12,
1000, 560, 1000, 560,
367, 256, 367, 256,
280, 280 280, 280

View File

@ -12,19 +12,19 @@ void pokerCharacterSammyInit(vncharacter_t *vnc) {
vnCharacterLayerAdd(vnc, 1, 0, 0, 0, 0, 731, 2122); vnCharacterLayerAdd(vnc, 1, 0, 0, 0, 0, 731, 2122);
// Layers // Layers
vnCharacterLayerAdd(vnc, 4, vnc->layerEyes = vnCharacterLayerAdd(vnc, 4,
731, 0, 731, 0,
215, 264, 215, 264,
307, 213 307, 213
); );
vnCharacterLayerAdd(vnc, 12, vnc->layerMouth = vnCharacterLayerAdd(vnc, 12,
731, 213, 731, 213,
215, 264, 215, 264,
307, 213 307, 213
); );
vnCharacterLayerAdd(vnc, 5, vnc->layerEyebrows = vnCharacterLayerAdd(vnc, 5,
731, 426, 731, 426,
215, 264, 215, 264,
307, 213 307, 213

View File

@ -43,7 +43,6 @@ void pokerGameUpdate(pokergame_t *game) {
game->poker.players game->poker.players
); );
// Bind the shader. // Bind the shader.
shaderUse(&game->assets.shader); shaderUse(&game->assets.shader);

View File

@ -51,6 +51,6 @@
#define randRange(n, min, max) (mathMod(n, (max-min)) + min) #define randRange(n, min, max) (mathMod(n, (max-min)) + min)
#define randInt32Range(min, max) randRange(randInt32(), min, max) #define randInt32Range(min, max) randRange(randInt32(), min, max)
#define randFloatRange(min, max) (fmod(randFloat(), max- min) + min) #define randFloatRange(min, max) ((float)fmod(randFloat(), max- min) + min)
#define randUint32Range(min, max) randRange(randUint32(), min, max) #define randUint32Range(min, max) randRange(randUint32(), min, max)
#define randUint8Range(min, max) randRange(randUint8(), min, max) #define randUint8Range(min, max) randRange(randUint8(), min, max)

View File

@ -7,7 +7,6 @@
#include "vncharacter.h" #include "vncharacter.h"
void vnCharacterInit(vncharacter_t *character, texture_t *texture) { void vnCharacterInit(vncharacter_t *character, texture_t *texture) {
character->x = 0; character->x = 0;
character->y = 0; character->y = 0;
@ -22,6 +21,12 @@ void vnCharacterInit(vncharacter_t *character, texture_t *texture) {
character->layerCount = 0; character->layerCount = 0;
character->texture = texture; character->texture = texture;
character->layerEyes = 0xFF;
character->layerMouth = 0xFF;
character->layerEyebrows = 0xFF;
character->breathing = true;
character->blinkStart = 0;
// Init the primitive. // Init the primitive.
primitiveInit(&character->primitive, primitiveInit(&character->primitive,
QUAD_VERTICE_COUNT * VN_CHARACTER_LAYERS_MAX, QUAD_VERTICE_COUNT * VN_CHARACTER_LAYERS_MAX,
@ -30,10 +35,25 @@ void vnCharacterInit(vncharacter_t *character, texture_t *texture) {
} }
void vnCharacterUpdate(vncharacter_t *character, engine_t *engine) { void vnCharacterUpdate(vncharacter_t *character, engine_t *engine) {
float t; float t, n;
float speed, amount; float speed, amount;
// Setup frames based on the emotion. // Setup frames based on the emotion.
if(character->layerEyes != 0xFF) {
n = (engine->time.current-character->blinkStart)*VN_CHARACTER_BLINK_SPEED;
if(n > 1.0f) {
character->blinkStart = engine->time.current + randFloatRange(
1, VN_CHARACTER_BLINK_TIME_RANGE_MAX
);
} else if(n > 0) {
n = (
easeInQuad(animForwardAndBackwardScaled(n)) *
character->layers[character->layerEyes].frames
);
vnCharacterLayerSetFrame(character, character->layerEyes, (int32_t)n);
}
}
// mouth = character->emotion % 0x04; // mouth = character->emotion % 0x04;
// eyes = (character->emotion/0x04) % 0x04; // eyes = (character->emotion/0x04) % 0x04;
// eyebrows = ((character->emotion/0x04)/0x04) % 0x05; // eyebrows = ((character->emotion/0x04)/0x04) % 0x05;
@ -76,14 +96,19 @@ void vnCharacterUpdate(vncharacter_t *character, engine_t *engine) {
// } // }
// Update the scale frames for breathing / talk breathing // Update the scale frames for breathing / talk breathing
speed = 0.2f; if(character->breathing) {
amount = 90.0f; speed = 0.2f;
t = animForwardAndBackwardScaled( amount = 90.0f;
mathModFloat(engine->time.current, 1 / speed) * speed t = animForwardAndBackwardScaled(
); mathModFloat(engine->time.current, 1 / speed) * speed
t = easeInOutQuad(t) / amount - (1/(amount*2)); );
character->scaleX = 1 + t; t = easeInOutQuad(t) / amount - (1/(amount*2));
character->scaleY = 1 - t; character->scaleX = 1 + t;
character->scaleY = 1 - t;
} else {
character->scaleX = 1;
character->scaleY = 1;
}
} }

View File

@ -17,10 +17,11 @@
#include "../display/animation/easing.h" #include "../display/animation/easing.h"
#define VN_CHARACTER_BLINK_TIME_RANGE_MAX 6 #define VN_CHARACTER_BLINK_TIME_RANGE_MAX 6
#define VN_CHARACTER_BLINK_SPEED 3.0f
#define VN_CHARACTER_LAYERS_MAX 6 #define VN_CHARACTER_LAYERS_MAX 6
typedef struct { typedef struct {
int32_t lx, ly, x, y, width, height; int16_t lx, ly, x, y, width, height;
uint8_t frames; uint8_t frames;
} vncharacterlayer_t; } vncharacterlayer_t;
@ -35,18 +36,24 @@ typedef struct {
/** Texture sheet for the character */ /** Texture sheet for the character */
texture_t *texture; texture_t *texture;
/** Count of layers */ /** Layer Information */
vncharacterlayer_t layers[VN_CHARACTER_LAYERS_MAX]; vncharacterlayer_t layers[VN_CHARACTER_LAYERS_MAX];
uint8_t layerCount; uint8_t layerCount;
uint8_t layerEyes;
uint8_t layerMouth;
uint8_t layerEyebrows;
bool breathing;
float blinkStart;
} vncharacter_t; } vncharacter_t;
void vnCharacterInit(vncharacter_t *character, texture_t *texture); void vnCharacterInit(vncharacter_t *character, texture_t *texture);
uint8_t vnCharacterLayerAdd(vncharacter_t *character, uint8_t vnCharacterLayerAdd(vncharacter_t *character,
uint8_t frames, uint8_t frames,
int32_t lx, int32_t ly, int16_t lx, int16_t ly,
int32_t x, int32_t y, int16_t x, int16_t y,
int32_t width, int32_t height int16_t width, int16_t height
); );
void vnCharacterLayerSetFrame(vncharacter_t *character, uint8_t l, uint8_t f); void vnCharacterLayerSetFrame(vncharacter_t *character, uint8_t l, uint8_t f);