Skip to content

Commit 56cf09a

Browse files
Demo kind of working, being a bit weird though
1 parent 59d3152 commit 56cf09a

File tree

11 files changed

+210
-170
lines changed

11 files changed

+210
-170
lines changed

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
.vscode/
1+
.vscode/
2+
.gitpod.yml
3+
*_

_main

4.43 KB
Binary file not shown.

_main.c

Lines changed: 86 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -1,84 +1,86 @@
1-
#include <stdio.h>
2-
#include <SDL2/SDL.h>
3-
#include "tools/UI.h"
4-
#include "tools/Systems.h"
5-
#include "tools/Rendering.h"
6-
#include "tools/Player_Systems.h"
7-
8-
#define W_HEIGHT 680
9-
#define W_WIDTH 1048
10-
11-
int main(int argc, char *argv[])
12-
{
13-
if (SDL_Init(SDL_INIT_EVERYTHING)) // Initializes the timer, audio, video, joystick, haptic, gamecontroller and events subsystems
14-
{
15-
printf("Error initializing SDL: %s\n", SDL_GetError());
16-
return -1;
17-
}
18-
19-
SDL_Window *window = SDL_CreateWindow("The Gardener", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, W_WIDTH, W_HEIGHT, 0);
20-
if (!window)
21-
{
22-
printf("Error creating window: %s\n", SDL_GetError());
23-
SDL_Quit();
24-
return -1;
25-
}
26-
27-
SDL_Renderer *renderer = SDL_CreateRenderer(window, 0, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
28-
if (!renderer)
29-
{
30-
printf("Error creating renderer: %s\n", SDL_GetError());
31-
SDL_DestroyWindow(window);
32-
SDL_Quit();
33-
return -1;
34-
}
35-
36-
int running = 1;
37-
int player_inputs[7] = {0, 0, 0, 0, 0, 0, 0};
38-
SDL_Event event;
39-
40-
init_presets();
41-
init_textures(renderer);
42-
43-
entity player[3];
44-
player[0] = entity_buffer[0]; // Enhance array when multiplayer is added
45-
init_entity(&player[0], (W_WIDTH - 50) / 2, (W_HEIGHT - 50) / 2);
46-
47-
// switch_location(Dungeon, entity_buffer); // REMOVE: this call after properly setting up the Hub and Dungeon Generation
48-
49-
while (running)
50-
{
51-
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
52-
SDL_RenderClear(renderer);
53-
54-
handleInput(&event, player, &running, player_inputs); //TODO: fix crashing bug here
55-
56-
if (!game_state)
57-
{
58-
UpdateTimers();
59-
60-
handlePlayerMovement(&player[0].sprite, player_inputs); // TODO: Handle all players instead of just one
61-
// handleCombat(&player[0], player_inputs); // TODO: Handle all players instead of one
62-
handleEnemies();
63-
64-
render_game(renderer, player);
65-
}
66-
else
67-
{
68-
// handleInput_UI(&event,);
69-
// render_UI(renderer); //TODO: Write UI rendering
70-
}
71-
72-
SDL_RenderPresent(renderer);
73-
SDL_Delay(1000 / 60);
74-
}
75-
76-
free_world(&world);
77-
free_texture_buffers();
78-
79-
SDL_DestroyRenderer(renderer);
80-
SDL_DestroyWindow(window);
81-
82-
SDL_Quit();
83-
return 0;
84-
}
1+
#include <stdio.h>
2+
#include <SDL2/SDL.h>
3+
#include "tools/UI.h"
4+
#include "tools/Systems.h"
5+
#include "tools/Rendering.h"
6+
#include "tools/Player_Systems.h"
7+
#include "tools/Demo_System.h" // REMOVE: after finishing the 1 week demo
8+
9+
#define W_HEIGHT 680
10+
#define W_WIDTH 1048
11+
12+
int main(int argc, char *argv[])
13+
{
14+
if (SDL_Init(SDL_INIT_EVERYTHING)) // Initializes the timer, audio, video, joystick, haptic, gamecontroller and events subsystems
15+
{
16+
printf("Error initializing SDL: %s\n", SDL_GetError());
17+
return -1;
18+
}
19+
20+
SDL_Window *window = SDL_CreateWindow("The Gardener", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, W_WIDTH, W_HEIGHT, 0);
21+
if (!window)
22+
{
23+
printf("Error creating window: %s\n", SDL_GetError());
24+
SDL_Quit();
25+
return -1;
26+
}
27+
28+
SDL_Renderer *renderer = SDL_CreateRenderer(window, 0, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
29+
if (!renderer)
30+
{
31+
printf("Error creating renderer: %s\n", SDL_GetError());
32+
SDL_DestroyWindow(window);
33+
SDL_Quit();
34+
return -1;
35+
}
36+
37+
int running = 1;
38+
int player_inputs[7] = {0, 0, 0, 0, 0, 0, 0};
39+
SDL_Event event;
40+
41+
init_presets();
42+
init_textures(renderer);
43+
44+
entity player[3];
45+
player[0] = entity_buffer[0]; // Enhance array when multiplayer is added
46+
init_entity(&player[0], (W_WIDTH - 50) / 2, (W_HEIGHT - 50) / 2);
47+
48+
switch_location(Dungeon, entity_buffer); // REMOVE: this call after properly setting up the Hub and Dungeon Generation
49+
50+
while (running)
51+
{
52+
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
53+
SDL_RenderClear(renderer);
54+
55+
handleInput(&event, player, &running, player_inputs); //TODO: fix crashing bug here
56+
57+
if (!game_state)
58+
{
59+
UpdateTimers();
60+
enemy_generation(&world, entity_buffer);
61+
62+
handlePlayerMovement(&player[0].sprite, player_inputs); // TODO: Handle all players instead of just one
63+
// handleCombat(&player[0], player_inputs); // TODO: Handle all players instead of one
64+
handleEnemies(player);
65+
66+
render_game(renderer, player);
67+
}
68+
else
69+
{
70+
// handleInput_UI(&event,);
71+
// render_UI(renderer); //TODO: Write UI rendering
72+
}
73+
74+
SDL_RenderPresent(renderer);
75+
SDL_Delay(1000 / 60);
76+
}
77+
78+
free_world(&world);
79+
free_texture_buffers();
80+
81+
SDL_DestroyRenderer(renderer);
82+
SDL_DestroyWindow(window);
83+
84+
SDL_Quit();
85+
return 0;
86+
}

tools/Demo_System.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#include<SDL2/SDL.h>
2+
#include "ECS.h"
3+
#include "Dungeon.h"
4+
5+
float target_time = 2;
6+
Uint32 ref_time;
7+
8+
void enemy_generation(world_array *world, entity *atlas){
9+
if( (float) (SDL_GetTicks() - ref_time) / 1000 > target_time ) {
10+
ref_time = SDL_GetTicks();
11+
target_time = (float) generate_range(3, 12);
12+
add_element(world, atlas + 2, generate_range(0, 1048), generate_range (0, 680));
13+
}
14+
}
15+

tools/Dungeon.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include <stdlib.h>
22
#include <time.h>
3-
#include <ECS.h>
3+
#include "ECS.h"
44

55
#define Max_Enemies 12
66

@@ -12,9 +12,9 @@ typedef struct room{
1212
int enemy_length;
1313
}room;
1414

15-
int random(){
15+
int generate_random(){
1616
srand(time(0) * instances++);
17-
return rand();
17+
return (rand());
1818
}
1919

2020
int generate_range(int min, int max){
@@ -32,4 +32,4 @@ void generateRoom(world_array *world){
3232
rooms[i].door = generate_range(0, 3);
3333
rooms[i].enemy_length = generate_range(3, 12);
3434
}
35-
}
35+
}

tools/ECS.h

Lines changed: 68 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,68 @@
1-
#pragma once
2-
#include<stdlib.h>
3-
#include<SDL2/SDL.h>
4-
5-
#define BitCheck(v,n) (v & (1 << n))
6-
#define BitToggle(v,n) (v ^ (1 << n))
7-
#define BitClear(v,n) (v & ~(1 << n))
8-
#define BitSet(v,n) (v | (1 << n))
9-
10-
typedef struct entity{
11-
unsigned int indicator : 4;
12-
unsigned int id : 8;
13-
SDL_FRect sprite;
14-
SDL_Rect *src;
15-
unsigned char *components;
16-
} entity;
17-
18-
typedef struct world_array{
19-
int cap;
20-
int size;
21-
entity *elements;
22-
} world_array;
23-
24-
void init_entity(entity *e, float x, float y){
25-
e->sprite.x = x;
26-
e->sprite.y = y;
27-
28-
switch(e->id){ //Allocate memory according to ID
29-
case 3:
30-
e->components = (unsigned char*) calloc (4, 1);
31-
e->components[0] = 255;
32-
break;
33-
34-
case 2:
35-
case 1: // HP, Atk, Def, Speed //Also Place default stats
36-
case 0: e->components = (unsigned char*) calloc (10, 1);
37-
e->components[0] = 255;
38-
e->components[1] = 5;
39-
break;
40-
}
41-
}
42-
43-
void init_world(world_array *arr, size_t length){
44-
arr->size = 0;
45-
arr->cap = length;
46-
arr->elements = (entity *) calloc(length, sizeof(entity));
47-
}
48-
49-
void add_element(world_array *arr, entity *atlas, float x, float y){
50-
arr->elements[arr->size] = *atlas;
51-
init_entity(arr->elements + arr->size, x, y);
52-
if (++arr->size >= arr->cap)
53-
arr->elements = (entity *) realloc(arr->elements, ++arr->cap * sizeof(*arr->elements)); // ++arr->cap might cause a problem
54-
}
55-
56-
void remove_element(world_array *arr, int index){
57-
free(arr->elements[index].components);
58-
arr->elements[index] = arr->elements[arr->size];
59-
arr->elements[arr->size--] = (entity) {};
60-
}
61-
62-
void free_world(world_array *arr){
63-
for (int i = 0; i < arr->size; i++)
64-
free((arr->elements+i)->components);
65-
66-
free(arr->elements);
67-
}
1+
#pragma once
2+
#include<stdlib.h>
3+
#include<SDL2/SDL.h>
4+
5+
#define BitCheck(v,n) (v & (1 << n))
6+
#define BitToggle(v,n) (v ^ (1 << n))
7+
#define BitClear(v,n) (v & ~(1 << n))
8+
#define BitSet(v,n) (v | (1 << n))
9+
10+
typedef struct entity{
11+
unsigned int indicator : 4;
12+
unsigned int id : 8;
13+
SDL_FRect sprite;
14+
SDL_Rect *src;
15+
unsigned char *components;
16+
} entity;
17+
18+
typedef struct world_array{
19+
int cap;
20+
int size;
21+
entity *elements;
22+
} world_array;
23+
24+
void init_entity(entity *e, float x, float y){
25+
e->sprite.x = x;
26+
e->sprite.y = y;
27+
28+
// HP, ATK, DEF, SPEED (are the defaults for entities)
29+
switch(e->id){ //Allocate memory according to ID
30+
case 3: e->components = (unsigned char*) calloc (4, 1);
31+
e->components[0] = 255;
32+
break;
33+
case 2: e->components = (unsigned char*) calloc (1, 1);
34+
e->components[0] = 255;
35+
case 1: e->components = (unsigned char*) calloc (1, 1);
36+
e->components[0] = 255;
37+
case 0: e->components = (unsigned char*) calloc (10, 1);
38+
e->components[0] = 255;
39+
e->components[1] = 5;
40+
break;
41+
}
42+
}
43+
44+
void init_world(world_array *arr, size_t length){
45+
arr->size = 0;
46+
arr->cap = length;
47+
arr->elements = (entity *) calloc(length, sizeof(entity));
48+
}
49+
50+
void add_element(world_array *arr, entity *atlas, float x, float y){
51+
arr->elements[arr->size] = *atlas;
52+
init_entity(arr->elements + arr->size, x, y);
53+
if (++arr->size >= arr->cap)
54+
arr->elements = (entity *) realloc(arr->elements, ++arr->cap * sizeof(*arr->elements)); // ++arr->cap might cause a problem
55+
}
56+
57+
void remove_element(world_array *arr, int index){
58+
free(arr->elements[index].components);
59+
arr->elements[index] = arr->elements[arr->size];
60+
arr->elements[arr->size--] = (entity) {};
61+
}
62+
63+
void free_world(world_array *arr){
64+
for (int i = 0; i < arr->size; i++)
65+
free((arr->elements+i)->components);
66+
67+
free(arr->elements);
68+
}

0 commit comments

Comments
 (0)