Added JS engine.

This commit is contained in:
2021-09-18 00:39:00 -07:00
parent 9dd9ce7cbd
commit ef9137fabb
52 changed files with 547 additions and 35712 deletions

View File

@ -13,11 +13,11 @@ bool gameInit(game_t *game) {
// Send off to the game instance
#if SETTING_GAME == SETTING_GAME_POKER
return pokerGameInit(&game->pokerGame);
return pokerGameInit(&game->pokerGame, &game->engine);
#elif SETTING_GAME == SETTING_GAME_DAWN
return dawnGameInit(game);
#elif SETTING_GAME == SETTING_GAME_SANDBOX
return sandboxSceneInit(&game->sandboxScene);
return sandboxSceneInit(&game->sandboxScene, &game->engine);
#endif
}

View File

@ -24,8 +24,12 @@ void _pokerGameActionBetOnUpdate(
// Handle as an AI
if(isHuman) {
turn.type = POKER_TURN_TYPE_FOLD;
turnMade = true;
if(inputIsPressed(&game->engine->input, INPUT_DOWN)) {
} else if(inputIsPressed(&game->engine->input, INPUT_RIGHT)) {
} else if(inputIsPressed(&game->engine->input, INPUT_UP)) {
}
} else {
turn = pokerTurnGet(&game->poker, game->poker.bet.better);
turnMade = true;
@ -87,6 +91,7 @@ void _pokerGameActionBetOnEnd(
// Are we waiting on any players?
if(game->poker.bet.better != 0xFF) {
pokerGameActionLookAdd(game, game->poker.bet.better);
pokerGameActionBetAdd(game);
return;
}
@ -103,6 +108,7 @@ void _pokerGameActionBetOnEnd(
pokerBetResetBetter(&game->poker);
pokerGameActionRestackAdd(game);
pokerGameActionLookAdd(game, game->poker.bet.better);
pokerGameActionBetAdd(game);
return;
}

View File

@ -7,7 +7,9 @@
#include "pokergame.h"
bool pokerGameInit(pokergame_t *game) {
bool pokerGameInit(pokergame_t *game, engine_t *engine) {
game->engine = engine;
// Load the Assets.
pokerGameAssetsInit(&game->assets);

View File

@ -21,9 +21,10 @@
* Initializes the game state for the poker game.
*
* @param game Game to initialize.
* @param engine Engine to use when initializing.
* @returns True if successful, otherwise false.
*/
bool pokerGameInit(pokergame_t *game);
bool pokerGameInit(pokergame_t *game, engine_t *engine);
/**
* Updates the poker game instance.

View File

@ -20,6 +20,7 @@ bool pokerGameAssetsInit(pokergameassets_t *assets) {
// Load the world textures.
assetTextureLoad(&assets->testTexture, "test_texture.png");
assetTextureLoad(&assets->cardTexture, "cards_normal.png");
assetTextureLoad(&assets->roomTexture, "world/pub/pub_skywall.png");
// Load the character textures.

View File

@ -0,0 +1,23 @@
/**
* Copyright (c) 2021 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#include "pokercardui.h"
void pokerCardSetImage(image_t *image, texture_t *texture, card_t card) {
uint8_t cardImageIndex = (
cardGetNumber(card) == CARD_ACE ? (
card - CARD_COUNT_PER_SUIT + 1
) : card+0x01
);
imageSetTextureAndCrop(
image, texture,
cardGetNumber(cardImageIndex) * 71,
cardGetSuit(card) * 96,
71, 96
);
}

View File

@ -0,0 +1,14 @@
/**
* Copyright (c) 2021 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#pragma once
#include <dawn/dawn.h>
#include "../../../ui/image.h"
#include "../../../poker/card.h"
void pokerCardSetImage(image_t *image, texture_t *texture, card_t card);

View File

@ -17,7 +17,14 @@ void pokerPlayerUiInit(pokerplayerui_t *ui) {
0, 0, 0, 1,
POKER_PLAYER_UI_IMAGE_SIZE, POKER_PLAYER_UI_IMAGE_SIZE, 1, 0
);
// Set up the grid
ui->grid.gutterX = POKER_PLAYER_UI_PADDING;
ui->grid.columns = 2;
ui->grid.rows = 2;
ui->grid.columnDefinitions[1] = POKER_PLAYER_UI_IMAGE_SIZE;
ui->grid.rowDefinitions[0] = POKER_PLAYER_UI_IMAGE_SIZE / 2.0f;
ui->grid.rowDefinitions[1] = POKER_PLAYER_UI_IMAGE_SIZE / 2.0f;
}
void pokerPlayerUiUpdate(
@ -72,62 +79,51 @@ void pokerPlayerUiRender(
float scale;
align_t align;
float gx, gy, gw, gh, sCol, sRow;
float gx, gy, gw, gh;
// Font crap.
scale = fontGetScale(FONT_SIZE_DEFAULT);
player = game->poker.players + playerIndex;
// Resize the grid
align = alignmentGet(
ALIGN_POS_END | ALIGN_SIZE_ORIGINAL, ALIGN_POS_START | ALIGN_SIZE_ORIGINAL,
engine->render.width, engine->render.height,
POKER_PLAYER_UI_IMAGE_SIZE*2, POKER_PLAYER_UI_IMAGE_SIZE, -1, -1
// Align the grid itself.
gridResize(&ui->grid, POKER_PLAYER_UI_WIDTH, POKER_PLAYER_UI_HEIGHT);
// Render face
gridGetChild(&ui->grid, 1, 0, 1, 2, &gx, &gy, &gw, &gh);
shaderUseTexture(shader, &ui->frame.texture);
shaderUsePosition(shader, x+gx, y+gy, 0, 0,0,0);
primitiveDraw(&ui->quad, 0, -1);
// Render chips
sprintf(buffer, "$%i", player->chips);
ui->label.maxWidth = -1;
labelSetText(&ui->label, font, buffer);
align = gridGetAndAlignChild(
&ui->grid, 0, 0, 1, 1,
ALIGN_POS_END | ALIGN_SIZE_ORIGINAL, ALIGN_POS_CENTER | ALIGN_SIZE_ORIGINAL,
ui->label.info.width, ui->label.info.height
);
// gridSetSize(
// &ui->grid, engine->render.width, engine->render.height,
// align.width, align.height,
// align.x + x, align.y + y
// );
labelRender(&ui->label, shader, x+align.x, y+align.y);
// // Render face
// gridGetChildSize(&ui->grid, ui->grid.breakpointCurrent, ui->grid.children+0,
// &sCol, &sRow, &gx, &gy, &gw, &gh
// );
// shaderUseTexture(shader, &ui->frame.texture);
// shaderUsePosition(shader, gx, gy, 0, 0,0,0);
// primitiveDraw(&ui->quad, 0, -1);
// // Render chips
// sprintf(buffer, "$%i", player->chips);
// ui->label.maxWidth = -1;
// labelSetText(&ui->label, font, buffer);
// align = gridAlignChild(
// &ui->grid, ui->grid.breakpointCurrent, ui->grid.children + 1, &sCol, &sRow,
// ALIGN_POS_END | ALIGN_SIZE_ORIGINAL, ALIGN_POS_CENTER | ALIGN_SIZE_ORIGINAL,
// ui->label.info.width, ui->label.info.height
// );
// labelRender(&ui->label, shader, align.x, align.y);
// // Render state
// if(player->state & POKER_PLAYER_STATE_OUT) {
// sprintf(buffer, "Out");
// } else if(player->state & POKER_PLAYER_STATE_FOLDED) {
// sprintf(buffer, "Folded");
// } else if(player->state & POKER_PLAYER_STATE_SHOWING) {
// sprintf(buffer, "Showing");
// } else if(game->poker.bet.better == playerIndex) {
// sprintf(buffer, "Thinking");
// } else {
// sprintf(buffer, "Whatever");
// }
// labelSetText(&ui->label, font, buffer);
// align = gridAlignChild(
// &ui->grid, ui->grid.breakpointCurrent, ui->grid.children + 2, &sCol, &sRow,
// ALIGN_POS_END | ALIGN_SIZE_ORIGINAL, ALIGN_POS_CENTER | ALIGN_SIZE_ORIGINAL,
// ui->label.info.width, ui->label.info.height
// );
// labelRender(&ui->label, shader, align.x, align.y);
// Render state
if(player->state & POKER_PLAYER_STATE_OUT) {
sprintf(buffer, "Out");
} else if(player->state & POKER_PLAYER_STATE_FOLDED) {
sprintf(buffer, "Folded");
} else if(player->state & POKER_PLAYER_STATE_SHOWING) {
sprintf(buffer, "Showing");
} else if(game->poker.bet.better == playerIndex) {
sprintf(buffer, "Thinking");
} else {
sprintf(buffer, "Whatever");
}
labelSetText(&ui->label, font, buffer);
align = gridGetAndAlignChild(
&ui->grid, 0, 1, 1, 1,
ALIGN_POS_END | ALIGN_SIZE_ORIGINAL, ALIGN_POS_CENTER | ALIGN_SIZE_ORIGINAL,
ui->label.info.width, ui->label.info.height
);
labelRender(&ui->label, shader, x+align.x, y+align.y);
}
void pokerPlayerUiDispose(pokerplayerui_t *ui) {

View File

@ -10,6 +10,10 @@
void pokerUiInit(pokergame_t *pokerGame) {
uint8_t i, j;
// Initialize card render(s)
imageInit(&pokerGame->ui.card);
// Initialize players
j = 0;
for(i = 0; i < POKER_PLAYER_COUNT; i++) {
if(i == POKER_PLAYER_HUMAN_INDEX) continue;
@ -34,6 +38,29 @@ void pokerUiUpdate(pokergame_t *pokerGame, engine_t *engine) {
void pokerUiRender(pokergame_t *pokerGame, engine_t *engine) {
uint8_t i, j;
pokerplayerui_t *ui;
pokerplayer_t *player;
char message[128];
// cards
if(pokerGame->poker.state >= POKER_STATE_DEALING) {
for(j = 0; j < POKER_PLAYER_COUNT; j++) {
player = pokerGame->poker.players + j;
for(i = 0; i < player->cardCount; i++) {
pokerCardSetImage(&pokerGame->ui.card, &pokerGame->assets.cardTexture, player->cards[i]);
imageRender(&pokerGame->ui.card, &pokerGame->assets.shader, i * 64.0f, j * 100);
}
}
}
// show uh
player = pokerGame->poker.players + POKER_PLAYER_HUMAN_INDEX;
if(pokerGame->poker.bet.better == POKER_PLAYER_HUMAN_INDEX) {
sprintf(message, "Press down to fold, up to bet, right to check/call.");
labelSetText(&pokerGame->ui.player->label, &pokerGame->assets.font, message);
labelRender(&pokerGame->ui.player->label, &pokerGame->assets.shader, 300, 100);
}
j = 0;
for(i = 0; i < POKER_PLAYER_COUNT; i++) {
@ -42,7 +69,7 @@ void pokerUiRender(pokergame_t *pokerGame, engine_t *engine) {
pokerPlayerUiRender(
ui, pokerGame, &pokerGame->assets.shader, &pokerGame->assets.font, engine,
i, 0, j * 75.0f
i, engine->render.width - ui->grid.width, j * 75.0f
);
j++;
}
@ -51,6 +78,8 @@ void pokerUiRender(pokergame_t *pokerGame, engine_t *engine) {
void pokerUiDispose(pokergame_t *pokerGame) {
uint8_t i, j;
imageDispose(&pokerGame->ui.card);
j = 0;
for(i = 0; i < POKER_PLAYER_COUNT; i++) {
if(i == POKER_PLAYER_HUMAN_INDEX) continue;

View File

@ -9,6 +9,7 @@
#include <dawn/dawn.h>
#include "../../../ui/label.h"
#include "pokerplayerui.h"
#include "pokercardui.h"
/**
* Initializes the UI Module.

View File

@ -7,48 +7,48 @@
#include "sandboxscene.h"
framedtextmenu_t ftm;
scripter_t scripter;
bool sandboxSceneInit(sandboxscene_t *game) {
bool sandboxSceneInit(sandboxscene_t *game, engine_t *engine) {
assetFontLoad(&game->font, "fonts/opensans/OpenSans-Regular.ttf");
assetTextureLoad(&game->texture, "test_texture.png");
assetShaderLoad(&game->shader,
"shaders/textured.vert", "shaders/textured.frag"
);
menuitem_t *item;
framedTextMenuInit(&ftm, &game->font, &game->texture);
ftm.menu.grid.rows = 3;
item = textMenuAdd(&ftm.menu, "Option 1");
item->y = 0;
item = textMenuAdd(&ftm.menu, "Option 2");
item->y = 1;
item = textMenuAdd(&ftm.menu, "Option 3");
item->y = 2;
scripterInit(&scripter, engine);
assetScripterAppend(&scripter, "scripts/main.js");
scripterInvokeMethodSimple(&scripter, "init");
return true;
}
void sandboxSceneUpdate(sandboxscene_t *game, engine_t *engine) {
cameraLookAt(&game->camera,
0, 0, 10,
0, 0, 0
);
cameraLookAt(&game->camera, 3,3,3, 0,0,0);
cameraOrtho(&game->camera,
0, engine->render.width,
engine->render.height, 0,
cameraPerspective(&game->camera, 45,
engine->render.width/engine->render.height,
0.01f, 1000.0f
);
// cameraLookAt(&game->camera,
// 0, 0, 10,
// 0, 0, 0
// );
// cameraOrtho(&game->camera,
// 0, engine->render.width,
// engine->render.height, 0,
// 0.01f, 1000.0f
// );
shaderUse(&game->shader);
shaderUseCamera(&game->shader, &game->camera);
framedTextMenuResize(&ftm, 400, 400);
framedTextMenuUpdate(&ftm, engine);
framedTextMenuRender(&ftm, &game->shader, 0, 0);
shaderUsePosition(&game->shader, 0,0,0, 0,0,0);
shaderUseTexture(&game->shader, &game->texture);
scripterInvokeMethodSimple(&scripter, "update");
}
void sandboxSceneDispose(sandboxscene_t *game) {
// scripterInvokeMethodSimple(&scripter, "dispose");
scripterDispose(&scripter);
}

View File

@ -18,7 +18,8 @@
#include "../../file/asset.h"
#include "../../file/xml.h"
#include "../../file/asset.h"
#include "../../script/scripter.h"
#include "../../ui/grid.h"
#include "../../ui/menu.h"
#include "../../ui/textmenu.h"
@ -29,9 +30,10 @@
* Initialize the sandbox scene test game.
*
* @param game Game to initialize.
* @param engine Engine to use during init.
* @return True if successful, otherwise false.
*/
bool sandboxSceneInit(sandboxscene_t *game);
bool sandboxSceneInit(sandboxscene_t *game, engine_t *engine);
/**
* Update a sandbox scene.