1
1
Fork 0
Browse Source

abandoned generalised draw queue

thread-physics
alistair 5 years ago
parent
commit
812f5d5362
  1. 50
      draw.c
  2. 23
      draw.h
  3. BIN
      draw.o
  4. 15
      game.c
  5. 13
      game.h
  6. BIN
      game.o
  7. BIN
      main
  8. 10
      main.c
  9. BIN
      main.o

50
draw.c

@ -1,6 +1,10 @@ @@ -1,6 +1,10 @@
#include "draw.h"
/* generic rendering functions */
int MAX_ONSCREEN_OBJECTS = 99;
drawqueue_item objects_onscreen[100];
int num_onscreen = 0;
void render_texture_at(struct SDL_Renderer * ren, struct SDL_Texture * texture,int x, int y) {
/* draw a texture at x.y */
@ -30,12 +34,37 @@ SDL_Texture * load_image(SDL_Renderer * ren, char fname[]) { @@ -30,12 +34,37 @@ SDL_Texture * load_image(SDL_Renderer * ren, char fname[]) {
/* Game Specific rendering functions */
void draw_player(SDL_Renderer * ren, player_st player) {
void add_to_view(draw_type kind, void * object) {
if (num_onscreen == MAX_ONSCREEN_OBJECTS) {
logwrite(ERROR, "Maximum number of items on screen");
return;
}
drawqueue_item queue_item;
queue_item.kind = kind;
num_onscreen += 1;
objects_onscreen[num_onscreen -1] = queue_item;
}
void remove_from_view(int item, draw_type kind, void * object) {
/*
*objects_onscreen[item] = objects_onscreen[num_onscreen -1];
*num_onscreen -= 1;
*
*/
}
void draw_player(SDL_Renderer * ren, int x, int y) {
logwrite(DEBUG, "Drawing player");
/* draw the player as a coloured rect */
SDL_Rect player_rect;
player_rect.x = player.physics.x_pos;
player_rect.y = player.physics.y_pos;
player_rect.x = x;
player_rect.y = y;
player_rect.w = 10;
player_rect.h = 10;
@ -43,6 +72,21 @@ void draw_player(SDL_Renderer * ren, player_st player) { @@ -43,6 +72,21 @@ void draw_player(SDL_Renderer * ren, player_st player) {
SDL_RenderDrawRect(ren, &player_rect);
SDL_SetRenderDrawColor(ren, 120, 85, 188, 255);
SDL_RenderFillRect(ren, &player_rect);
SDL_SetRenderDrawColor(ren, 0,0,0, 255);
}
void redraw_buffer(SDL_Renderer * ren) {
for (int i = 0; i<num_onscreen; i++) {
drawqueue_item queue_item = objects_onscreen[i];
switch (queue_item.kind) {
case PLAYER: ;
player_st * object;
object = queue_item.player;
(*object).draw(ren, (*object).physics.x_pos, (*object).physics.y_pos);
break;
}
}
}

23
draw.h

@ -1,16 +1,24 @@ @@ -1,16 +1,24 @@
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include "garbo.h"
#include "game.h"
#ifndef _DEFDRAW
#define _DEFDRAW
#include "garbo.h"
#include "game.h"
typedef enum {
PLAYER
} draw_type;
typedef struct {
} gameview_object;
draw_type kind;
union {
void * object;
player_st * player;
};
} drawqueue_item;
void render_texture_at(struct SDL_Renderer * ren, struct SDL_Texture * texture,int x, int y) ;
/* draw a texture at x.y */
@ -18,7 +26,12 @@ void render_texture_at(struct SDL_Renderer * ren, struct SDL_Texture * texture,i @@ -18,7 +26,12 @@ void render_texture_at(struct SDL_Renderer * ren, struct SDL_Texture * texture,i
SDL_Texture * load_image(SDL_Renderer * ren, char fname[]);
/* Load an image into a texture */
void draw_player(SDL_Renderer * ren, player_st player);
void draw_player(SDL_Renderer * ren, int x, int y);
/* draw the player as a coloured rect */
//void queue_draw_item(void * object, draw_type kind);
void add_to_view(draw_type kind, void * object);
void redraw_buffer(SDL_Renderer * ren);
#endif

BIN
draw.o

Binary file not shown.

15
game.c

@ -23,6 +23,8 @@ player_st get_player(int x, int y) { @@ -23,6 +23,8 @@ player_st get_player(int x, int y) {
player_st player;
/* physics */
player.physics.x_pos = x;
player.physics.y_pos = y;
player.physics.x_acc = 0;
@ -30,6 +32,12 @@ player_st get_player(int x, int y) { @@ -30,6 +32,12 @@ player_st get_player(int x, int y) {
player.physics.x_vel = 0;
player.physics.y_vel = 0;
/* Drawing */
void (*draw_function)(SDL_Renderer * ren, int x, int y);
draw_function = &draw_player;
player.draw = draw_function;
return (player);
}
@ -58,3 +66,10 @@ void advance_thing(physics_thing * thing) { @@ -58,3 +66,10 @@ void advance_thing(physics_thing * thing) {
(*thing).x_pos = (*thing).x_acc * 1/2 * (float)time_delta;
(*thing).y_pos = (*thing).y_acc * 1/2 * (float)time_delta;
}
void startgame(SDL_Renderer * ren) {
player_st player;
player = get_player(100,100);
// draw_player(ren, player);
add_to_view(PLAYER, (void *)&player);
}

13
game.h

@ -4,12 +4,13 @@ @@ -4,12 +4,13 @@
#include <stdbool.h>
#include <stdint.h>
#include "garbo.h"
#ifndef _DEFGAME
#define _DEFGAME
#include "garbo.h"
#include "draw.h"
typedef struct {
int x_pos;
int y_pos;
@ -22,10 +23,18 @@ typedef struct { @@ -22,10 +23,18 @@ typedef struct {
} physics_thing;
typedef void (*drawplayer_func)(SDL_Renderer * ren, int x, int y);
typedef struct {
bool has_physics;
physics_thing physics;
drawplayer_func draw;
} player_st;
void startgame(SDL_Renderer * ren) ;
#endif

BIN
game.o

Binary file not shown.

BIN
main

Binary file not shown.

10
main.c

@ -36,6 +36,7 @@ void step(void) { @@ -36,6 +36,7 @@ void step(void) {
void redraw(struct SDL_Renderer * ren) {
// check time
// redraw if 1/60th of second passed
redraw_buffer(ren);
SDL_RenderPresent(ren);
SDL_RenderClear(ren);
}
@ -66,7 +67,7 @@ void draw_pictures(struct SDL_Renderer * ren) { @@ -66,7 +67,7 @@ void draw_pictures(struct SDL_Renderer * ren) {
int main () {
LOGLEVEL = DEBUG;
STDOUTLEVEL = DEBUG;
STDOUTLEVEL = SILENT;
logwrite(INFO, "Starting\n");
SDL_Window * win = make_window();
@ -95,7 +96,12 @@ int main () { @@ -95,7 +96,12 @@ int main () {
close = 1;
break;
case SDL_KEYDOWN:
splashscreen = false;
if (splashscreen) {
splashscreen = false;
logwrite(DEBUG, "Starting Game");
startgame(ren);
}
// send key to game engine
break;
default:

BIN
main.o

Binary file not shown.
Loading…
Cancel
Save