Moved code from card to poker

This commit is contained in:
2021-05-16 21:01:36 -07:00
parent 43155c4e36
commit fbd00b1bc2
36 changed files with 9 additions and 9 deletions

94
src/poker/render/card.c Normal file
View File

@ -0,0 +1,94 @@
/**
* Copyright (c) 2021 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#include "card.h"
void holdemRenderCardInit() {
tilesetdiv_t *cardBack;
// Load Cards Texture
HOLDEM_GAME_STATE.cardTexture = assetTextureLoad("cards_normal.png");
HOLDEM_GAME_STATE.cardTileset = tilesetCreate(CARD_COUNT_PER_SUIT, 6,
HOLDEM_GAME_STATE.cardTexture->width, HOLDEM_GAME_STATE.cardTexture->height,
0, 0, 0, 0
);
// Cards Primitive
cardBack = HOLDEM_GAME_STATE.cardTileset->divisions+(
HOLDEM_GAME_STATE.cardTileset->columns * 4
);
HOLDEM_GAME_STATE.cardPrimitive = primitiveCreate(
QUAD_VERTICE_COUNT * 2, QUAD_INDICE_COUNT * 2
);
quadBuffer(HOLDEM_GAME_STATE.cardPrimitive, -HOLDEM_GAME_CARD_DEPTH,
-HOLDEM_GAME_CARD_WIDTH, -HOLDEM_GAME_CARD_HEIGHT,
cardBack->x0, cardBack->y1,
HOLDEM_GAME_CARD_WIDTH, HOLDEM_GAME_CARD_HEIGHT,
cardBack->x1, cardBack->y0,
QUAD_VERTICE_COUNT, QUAD_INDICE_COUNT
);
}
holdemrenderposition_t holdemRenderCardGetPosition(uint8_t seat, uint8_t slot) {
holdemrenderposition_t position;
float t, t2;
position.yaw = HOLDEM_GAME_SEAT_ANGLE(seat);
position.x = sin(position.yaw) * -0.75;
position.z = cos(position.yaw) * -0.75;
t = position.yaw + mathDeg2Rad(90);
switch (slot) {
case HOLDEM_GAME_CARD_SLOT_HAND0:
case HOLDEM_GAME_CARD_SLOT_HAND1:
t2 = HOLDEM_GAME_CARD_WIDTH+HOLDEM_GAME_CARD_PADDING;
if(slot == HOLDEM_GAME_CARD_SLOT_HAND0) t2 = -t2;
break;
case HOLDEM_GAME_CARD_SLOT_FLOP0:
case HOLDEM_GAME_CARD_SLOT_FLOP1:
case HOLDEM_GAME_CARD_SLOT_FLOP2:
case HOLDEM_GAME_CARD_SLOT_FLOP3:
case HOLDEM_GAME_CARD_SLOT_FLOP4:
t2 = HOLDEM_GAME_CARD_WIDTH*2+HOLDEM_GAME_CARD_PADDING;
t2 = (
-t2 * ( HOLDEM_GAME_CARD_SLOT_FLOP4-HOLDEM_GAME_CARD_SLOT_FLOP0)
)/2 + t2*(slot-HOLDEM_GAME_CARD_SLOT_FLOP0);
break;
default:
break;
}
position.x += t2 * sin(t);
position.z += t2 * cos(t);
return position;
}
void holdemRenderCard(card_t card, float x, float y, float z,
float pitch, float yaw, float roll
) {
tilesetdiv_t *cardFront = HOLDEM_GAME_STATE.cardTileset->divisions + card;
quadBuffer(HOLDEM_GAME_STATE.cardPrimitive, HOLDEM_GAME_CARD_DEPTH,
-HOLDEM_GAME_CARD_WIDTH, -HOLDEM_GAME_CARD_HEIGHT,
cardFront->x0, cardFront->y1,
HOLDEM_GAME_CARD_WIDTH, HOLDEM_GAME_CARD_HEIGHT,
cardFront->x1, cardFront->y0,
0, 0
);
shaderUseTexture(GAME_STATE.shaderWorld, HOLDEM_GAME_STATE.cardTexture);
shaderUsePosition(GAME_STATE.shaderWorld, x,y,z, pitch,yaw,roll);
primitiveDraw(HOLDEM_GAME_STATE.cardPrimitive, 0, -1);
}
void holdemRenderCardForSeat(uint8_t seat, card_t card, uint8_t slot) {
holdemrenderposition_t position = holdemRenderCardGetPosition(seat, slot);
holdemRenderCard(card, position.x, 0, position.z, mathDeg2Rad(-90), position.yaw, 0);
}

53
src/poker/render/card.h Normal file
View File

@ -0,0 +1,53 @@
/**
* 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 "../../file/asset.h"
#include "../../display/shader.h"
#include "../../display/primitive.h"
#include "../../display/primitives/quad.h"
#include "../../display/tileset.h"
/**
* Initializes the Card Renderer.
*/
void holdemRenderCardInit();
/**
* Returns the position a card "naturally" sits at for a given seat and slot.
*
* @param seat Seat that the card belongs to
* @param slot Slot within the player/dealers' hand that the card belongs to.
* @return A struct containing X, Z and YAW properties.
*/
holdemrenderposition_t holdemRenderCardGetPosition(uint8_t seat, uint8_t slot);
/**
* Render's a given card at the specified coordinates. Card is a reused quad
* and is re-buffered to for every draw call.
*
* @param card Card to render.
* @param x X Position (world space).
* @param y Y Position (world space).
* @param z Z Position (world space).
* @param pitch Pitch angle.
* @param yaw Yaw angle.
* @param roll Roll angle.
*/
void holdemRenderCard(card_t card, float x, float y, float z,
float pitch, float yaw, float roll
);
/**
* Render's a card at a given seat and slot.
*
* @param seat Seat the card is for.
* @param card Card to render.
* @param slot Slot the card is for.
*/
void holdemRenderCardForSeat(uint8_t seat, card_t card, uint8_t slot);

93
src/poker/render/frame.c Normal file
View File

@ -0,0 +1,93 @@
/**
* Copyright (c) 2021 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#include "frame.h"
void holdemRenderFrameInit() {
int32_t lWidth, rWidth, height;
// Prepare the two frame buffers.
lWidth = HOLDEM_GAME_FRAME_LEFT_WIDTH, rWidth = HOLDEM_GAME_FRAME_RIGHT_WIDTH;
height = HOLDEM_GAME_FRAME_HEIGHT;
HOLDEM_GAME_STATE.frameLeft = frameBufferCreate(lWidth, height);
HOLDEM_GAME_STATE.frameRight = frameBufferCreate(rWidth, height);
HOLDEM_GAME_STATE.quadLeft = quadCreate(0, 0, 0, 0, 0, lWidth, height, 1, 1);
HOLDEM_GAME_STATE.quadRight = quadCreate(0, 0, 0, 0, 0, rWidth, height, 1, 1);
}
void holdemRenderFrameUpdate() {
int32_t lWidth, rWidth, height;
lWidth = HOLDEM_GAME_FRAME_LEFT_WIDTH, rWidth = HOLDEM_GAME_FRAME_RIGHT_WIDTH;
height = HOLDEM_GAME_FRAME_HEIGHT;
if((
HOLDEM_GAME_STATE.frameLeft->texture->width == lWidth &&
HOLDEM_GAME_STATE.frameLeft->texture->height == height
)) return;
// Recreate frame buffers.
frameBufferDispose(HOLDEM_GAME_STATE.frameLeft);
frameBufferDispose(HOLDEM_GAME_STATE.frameRight);
HOLDEM_GAME_STATE.frameLeft = frameBufferCreate(lWidth, height);
HOLDEM_GAME_STATE.frameRight = frameBufferCreate(rWidth, height);
quadBuffer(HOLDEM_GAME_STATE.quadLeft, 0,
0, 0, 0, 1,
lWidth, height, 1, 0,
0, 0
);
quadBuffer(HOLDEM_GAME_STATE.quadRight, 0,
0, 0, 0, 1,
rWidth, height, 1, 0,
0, 0
);
}
void holdemRenderFrameUseLeft() {
glClearColor(0.3, 0, 0, 1);
frameBufferUse(HOLDEM_GAME_STATE.frameLeft, true);
cameraPerspective(&HOLDEM_GAME_STATE.cameraLeft, 35,
(
(float)HOLDEM_GAME_STATE.frameLeft->texture->width /
(float)HOLDEM_GAME_STATE.frameLeft->texture->height
), 0.2f, 1000.0f
);
shaderUseCamera(GAME_STATE.shaderWorld, &HOLDEM_GAME_STATE.cameraLeft);
}
void holdemRenderFrameUseRight() {
glClearColor(0.3, 0.3, 0, 1);
frameBufferUse(HOLDEM_GAME_STATE.frameRight, true);
cameraPerspective(&HOLDEM_GAME_STATE.cameraRight, 45,
(
(float)HOLDEM_GAME_STATE.frameRight->texture->width /
(float)HOLDEM_GAME_STATE.frameRight->texture->height
), 0.2f, 1000.0f
);
cameraLookAt(&HOLDEM_GAME_STATE.cameraRight, 0, 3, 3, 0, 0, 0);
shaderUseCamera(GAME_STATE.shaderWorld, &HOLDEM_GAME_STATE.cameraRight);
}
void holdemRenderFrameBack() {
glClearColor(0, 0, 0, 1);
frameBufferUse(NULL, true);
cameraOrtho(&GAME_STATE.cameraWorld, 0,
RENDER_STATE.width, RENDER_STATE.height, 1, 0, 1
);
cameraLookAt(&GAME_STATE.cameraWorld, 0, 0, 0.5f, 0, 0, 0);
shaderUseCamera(GAME_STATE.shaderWorld, &GAME_STATE.cameraWorld);
shaderUsePosition(GAME_STATE.shaderWorld,
0, 0, 0, 0, 0, 0
);
shaderUseTexture(GAME_STATE.shaderWorld, HOLDEM_GAME_STATE.frameLeft->texture);
primitiveDraw(HOLDEM_GAME_STATE.quadLeft, 0, -1);
shaderUsePosition(GAME_STATE.shaderWorld,
RENDER_STATE.width - HOLDEM_GAME_STATE.frameRight->texture->width,
0, 0, 0, 0, 0
);
shaderUseTexture(GAME_STATE.shaderWorld, HOLDEM_GAME_STATE.frameRight->texture);
primitiveDraw(HOLDEM_GAME_STATE.quadRight, 0, -1);
}

41
src/poker/render/frame.h Normal file
View File

@ -0,0 +1,41 @@
/**
* 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 "../../display/shader.h"
#include "../../display/primitive.h"
#include "../../display/primitives/quad.h"
#include "../../display/framebuffer.h"
#include "../../display/camera.h"
/**
* Initializes the frame buffers to be rendered to later.
*/
void holdemRenderFrameInit();
/**
* Update the frame buffers at the start of a rendering cycle.
*/
void holdemRenderFrameUpdate();
/**
* Binds the left frame buffer, clears it, and corrects its camera's
* perspective.
*/
void holdemRenderFrameUseLeft();
/**
* Binds the right frame buffer, clears it, and corrects its camera's
* perspective.
*/
void holdemRenderFrameUseRight();
/**
* Renders both the left and right frames to the backbuffer.
*/
void holdemRenderFrameBack();

30
src/poker/render/look.c Normal file
View File

@ -0,0 +1,30 @@
/**
* Copyright (c) 2021 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#include "look.h"
void holdemRenderLookSeat(camera_t *camera, uint8_t seat) {
float x, z, angle;
angle = HOLDEM_GAME_SEAT_ANGLE(seat);
x = sin(angle);
z = cos(angle);
cameraLookAt(&HOLDEM_GAME_STATE.cameraLeft,
x, 0.2, z,
-x, 0.2, -z
);
}
void holdemRenderLookHand(camera_t *camera, uint8_t seat) {
float x, z, angle;
angle = HOLDEM_GAME_SEAT_ANGLE(seat);
x = sin(angle);
z = cos(angle);
cameraLookAt(&HOLDEM_GAME_STATE.cameraLeft,
x*0.1, 0.8, z*0.1,
-x*0.5, 0.2, -z*0.5
);
}

25
src/poker/render/look.h Normal file
View File

@ -0,0 +1,25 @@
/**
* Copyright (c) 2021 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#include <dawn/dawn.h>
#include "../../display/camera.h"
/**
* Look at a specific seat
*
* @param camera Camera to adjust.
* @param seat Seat to look at.
*/
void holdemRenderLookSeat(camera_t *camera, uint8_t seat);
/**
* Look at a specific seats hand.
*
* @param camera Camera to adjust.
* @param seat Seats hand to look at.
*/
void holdemRenderLookHand(camera_t *camera, uint8_t seat);

69
src/poker/render/player.c Normal file
View File

@ -0,0 +1,69 @@
/**
* Copyright (c) 2021 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#include "player.h"
void holdemRenderPlayerInit() {
HOLDEM_GAME_STATE.kagamiTexture = assetTextureLoad("kagami.png");
HOLDEM_GAME_STATE.kagamiTileset = tilesetCreate(3, 2,
HOLDEM_GAME_STATE.kagamiTexture->width,
HOLDEM_GAME_STATE.kagamiTexture->height,
0, 0, 0, 0
);
HOLDEM_GAME_STATE.kagamiQuad = quadCreate(0, 0, 0, 0, 0, 1, 1, 1, 1);
}
uint8_t holdemRenderPlayerGetSeatForPlayer(uint8_t player) {
switch(player) {
case 0x01:
return HOLDEM_GAME_SEAT_PLAYER1;
case 0x02:
return HOLDEM_GAME_SEAT_PLAYER2;
case 0x03:
return HOLDEM_GAME_SEAT_PLAYER3;
case 0x04:
return HOLDEM_GAME_SEAT_PLAYER4;
default:
return HOLDEM_GAME_SEAT_PLAYER0;
}
}
void holdemRenderPlayer(uint8_t seat) {
float x, z, angle;
// Determine position
angle = HOLDEM_GAME_SEAT_ANGLE(seat);
x = sin(angle) * -1;
z = cos(angle) * -1;
// Determine size
float w, h;
w = 0.6, h = (
(float)HOLDEM_GAME_STATE.kagamiTileset->divY /
(float)HOLDEM_GAME_STATE.kagamiTileset->divX
) * w;
// Animation
int i = (int32_t)(TIME_STATE.current*10)%HOLDEM_GAME_STATE.kagamiTileset->count;
quadBuffer(HOLDEM_GAME_STATE.kagamiQuad, 0,
-w/2, -h/2,
HOLDEM_GAME_STATE.kagamiTileset->divisions[i].x0,
HOLDEM_GAME_STATE.kagamiTileset->divisions[i].y1,
w/2, h/2,
HOLDEM_GAME_STATE.kagamiTileset->divisions[i].x1,
HOLDEM_GAME_STATE.kagamiTileset->divisions[i].y0,
0, 0
);
// Render
shaderUseTexture(GAME_STATE.shaderWorld, HOLDEM_GAME_STATE.kagamiTexture);
shaderUsePosition(GAME_STATE.shaderWorld,
x, 0.34, z,
0, angle, 0
);
primitiveDraw(HOLDEM_GAME_STATE.kagamiQuad, 0, -1);
}

34
src/poker/render/player.h Normal file
View File

@ -0,0 +1,34 @@
/**
* 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 "../../file/asset.h"
#include "../../display/shader.h"
#include "../../display/primitive.h"
#include "../../display/tileset.h"
#include "../../display/primitives/quad.h"
/**
* Initializes the player renderer.
*/
void holdemRenderPlayerInit();
/**
* Returns the seat index for a given player.
*
* @param player Player to get the seat for.
* @return Seat ID for the given player.
*/
uint8_t holdemRenderPlayerGetSeatForPlayer(uint8_t player);
/**
* Render's a player at a seat.
*
* @param seat Seat to render the player at.
*/
void holdemRenderPlayer(uint8_t seat);

24
src/poker/render/scene.c Normal file
View File

@ -0,0 +1,24 @@
/**
* Copyright (c) 2021 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#include "scene.h"
void holdemRenderSceneInit() {
HOLDEM_GAME_STATE.tablePrimitive = pokerTableCreate();
HOLDEM_GAME_STATE.tableTexture = assetTextureLoad("pokertable.png");
}
void holdemRenderScene() {
// Poker Table
shaderUsePositionAndScale(GAME_STATE.shaderWorld,
0, -0.01, 0,
0, 0, 0,
3.4, 3.4, 3.4
);
shaderUseTexture(GAME_STATE.shaderWorld, HOLDEM_GAME_STATE.tableTexture);
primitiveDraw(HOLDEM_GAME_STATE.tablePrimitive, 0, -1);
}

23
src/poker/render/scene.h Normal file
View File

@ -0,0 +1,23 @@
/**
* 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 "../../display/shader.h"
#include "../../display/primitive.h"
#include "../../file/asset.h"
#include "../model/pokertable.h"
/**
* Initializes the scene renderer.
*/
void holdemRenderSceneInit();
/**
* Renders the scene for the holdem game (including table, chairs, etc.)
*/
void holdemRenderScene();

39
src/poker/render/world.c Normal file
View File

@ -0,0 +1,39 @@
/**
* Copyright (c) 2021 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#include "world.h"
void holdemRenderWorld() {
uint8_t i, j;
holdemplayer_t *player;
uint8_t seat;
holdemRenderScene();
// Render the dealer and her hand
holdemRenderPlayer(HOLDEM_GAME_SEAT_DEALER);
for(i = 0x00; i < HOLDEM_GAME_STATE.cardsFacing; i++) {
holdemRenderCardForSeat(
HOLDEM_GAME_SEAT_DEALER,
HOLDEM_GAME_STATE.cards[i],
HOLDEM_GAME_CARD_SLOT_FLOP0 + i
);
}
// Test
for(i = 0x00; i < HOLDEM_PLAYER_COUNT; i++) {
player = HOLDEM_GAME_STATE.players + i;
seat = holdemRenderPlayerGetSeatForPlayer(i);
holdemRenderPlayer(seat);
if(player->state & HOLDEM_STATE_FOLDED) continue;
for(j = 0x00; j < player->cardCount; j++) {
holdemRenderCardForSeat(seat, player->cards[j], HOLDEM_GAME_CARD_SLOT_HAND0+j);
}
}
}

17
src/poker/render/world.h Normal file
View File

@ -0,0 +1,17 @@
/**
* 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 "player.h"
#include "scene.h"
#include "card.h"
/**
* Renders the world.
*/
void holdemRenderWorld();