Compare commits
5 Commits
0e6a605b9a
...
56678b74b4
Author | SHA1 | Date |
---|---|---|
|
56678b74b4 | |
|
8023b65dc1 | |
|
aa13a95664 | |
|
f993c6b7ba | |
|
5b2027c57b |
7
Makefile
7
Makefile
|
@ -1,4 +1,5 @@
|
||||||
SRC_FILES = $(wildcard *.c) $(wildcard obj/*.c) $(wildcard utilities/*.c)
|
SRC_DIRECTORY= ./ ./obj ./screens ./utilities
|
||||||
|
SRC_FILES = $(foreach dir, $(SRC_DIRECTORY), $(wildcard $(dir)/*.c))
|
||||||
EXE = main
|
EXE = main
|
||||||
BUILD_DIR = build/
|
BUILD_DIR = build/
|
||||||
OBJ = $(patsubst %.c,$(BUILD_DIR)%.o,$(SRC_FILES))
|
OBJ = $(patsubst %.c,$(BUILD_DIR)%.o,$(SRC_FILES))
|
||||||
|
@ -22,9 +23,7 @@ $(EXE): $(OBJ)
|
||||||
$(CC) -o $@ $^ $(LDFLAGS)
|
$(CC) -o $@ $^ $(LDFLAGS)
|
||||||
|
|
||||||
$(BUILD_DIR)%.o: %.c
|
$(BUILD_DIR)%.o: %.c
|
||||||
@ mkdir -p $(BUILD_DIR)
|
@ $(foreach dir, $(SRC_DIRECTORY), mkdir -p $(BUILD_DIR)/$(dir))
|
||||||
@ mkdir -p $(BUILD_DIR)/obj
|
|
||||||
@ mkdir -p $(BUILD_DIR)/utilities
|
|
||||||
@ $(CC) $(CFLAGS) -o $@ -c $<
|
@ $(CC) $(CFLAGS) -o $@ -c $<
|
||||||
|
|
||||||
-include $(DEP)
|
-include $(DEP)
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
Add Level Complete:
|
||||||
|
- When all targets on the level is destroyed
|
||||||
|
- Print a complete text
|
||||||
|
- R to reset, continue to return to menu
|
||||||
|
Add Level start:
|
||||||
|
- countdown before allow player movement
|
||||||
|
- Print Go on screen
|
|
@ -106,6 +106,7 @@ struct target_obj_node
|
||||||
struct kinematic_obj init_kinematic_obj(int width, int height);
|
struct kinematic_obj init_kinematic_obj(int width, int height);
|
||||||
void move(struct kinematic_obj *obj, Vector2 acceleration);
|
void move(struct kinematic_obj *obj, Vector2 acceleration);
|
||||||
void set_position(struct kinematic_obj *obj, int x, int y);
|
void set_position(struct kinematic_obj *obj, int x, int y);
|
||||||
|
void set_velocity(struct kinematic_obj *obj, int velx, int vely);
|
||||||
bool place_meeting(struct kinematic_obj *obj, Vector2 dir);
|
bool place_meeting(struct kinematic_obj *obj, Vector2 dir);
|
||||||
void scale_rect(struct kinematic_obj *obj);
|
void scale_rect(struct kinematic_obj *obj);
|
||||||
void adjust_hitbox(struct kinematic_obj *obj);
|
void adjust_hitbox(struct kinematic_obj *obj);
|
||||||
|
@ -143,6 +144,11 @@ void free_target_list(struct target_obj_node **HEAD);
|
||||||
void add_target_node(struct target_obj *obj, struct target_obj_node **HEAD);
|
void add_target_node(struct target_obj *obj, struct target_obj_node **HEAD);
|
||||||
bool collide_target(struct kinematic_obj *obj, struct target_obj *target);
|
bool collide_target(struct kinematic_obj *obj, struct target_obj *target);
|
||||||
|
|
||||||
|
//Menu
|
||||||
|
void draw_menu();
|
||||||
|
void main_menu_check();
|
||||||
|
int get_selected_options();
|
||||||
|
|
||||||
//Debug stuff, debug.c
|
//Debug stuff, debug.c
|
||||||
void state_string(char *str, enum PLAYER_STATE state);
|
void state_string(char *str, enum PLAYER_STATE state);
|
||||||
void display_input(char *dir);
|
void display_input(char *dir);
|
||||||
|
|
88
main.c
88
main.c
|
@ -23,29 +23,71 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "header.h"
|
#include "header.h"
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
struct kinematic_obj_node *kinematic_HEAD = NULL;
|
struct kinematic_obj_node *kinematic_HEAD = NULL;
|
||||||
struct target_obj_node *target_HEAD = NULL;
|
struct target_obj_node *target_HEAD = NULL;
|
||||||
int PLAYER_ACCEL = 1500;
|
int PLAYER_ACCEL = 1500;
|
||||||
int JUMP_ACCEL = 15000;
|
int JUMP_ACCEL = 15000;
|
||||||
int JUMP_SPD = 350;
|
int JUMP_SPD = 350;
|
||||||
int GRAV = 1000;
|
int GRAV = 1000;
|
||||||
|
|
||||||
|
const int screenWidth = 800;
|
||||||
|
const int screenHeight = 450;
|
||||||
|
|
||||||
|
int main_menu(Camera2D camera);
|
||||||
|
void play_test_level(Camera2D camera);
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
// Initialization
|
// Initialization
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
const int screenWidth = 800;
|
|
||||||
const int screenHeight = 450;
|
|
||||||
char current_state[20];
|
|
||||||
char current_spd[50];
|
|
||||||
//char dir[7];
|
//char dir[7];
|
||||||
|
|
||||||
InitWindow(screenWidth, screenHeight, "raylib");
|
InitWindow(screenWidth, screenHeight, "raylib");
|
||||||
|
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
||||||
|
|
||||||
Camera2D camera = { 0 };
|
Camera2D camera = { 0 };
|
||||||
camera.offset = (Vector2){0,0};
|
camera.offset = (Vector2){0,0};
|
||||||
camera.rotation = 0.0f;
|
camera.rotation = 0.0f;
|
||||||
camera.zoom = 1.0f;
|
camera.zoom = 1.0f;
|
||||||
|
while (!WindowShouldClose()){
|
||||||
|
int selected = main_menu(camera);
|
||||||
|
switch(selected){
|
||||||
|
case 0:
|
||||||
|
play_test_level(camera);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
goto quit;
|
||||||
|
default:
|
||||||
|
puts("Unknown Command");
|
||||||
|
goto quit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
quit: CloseWindow();
|
||||||
|
}
|
||||||
|
|
||||||
|
int main_menu(Camera2D camera){
|
||||||
|
camera.target = (Vector2){0,0};
|
||||||
|
|
||||||
|
|
||||||
|
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||||
|
{
|
||||||
|
main_menu_check();
|
||||||
|
if (IsKeyPressed(KEY_SPACE)){
|
||||||
|
return get_selected_options();
|
||||||
|
}
|
||||||
|
BeginDrawing();
|
||||||
|
ClearBackground(RAYWHITE);
|
||||||
|
draw_menu();
|
||||||
|
EndDrawing();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void play_test_level(Camera2D camera){
|
||||||
|
|
||||||
|
|
||||||
struct player_obj player = {
|
struct player_obj player = {
|
||||||
.kinematic = init_kinematic_obj(PLAYER_SIZE, PLAYER_SIZE),
|
.kinematic = init_kinematic_obj(PLAYER_SIZE, PLAYER_SIZE),
|
||||||
|
@ -87,14 +129,32 @@ int main()
|
||||||
struct target_obj target = init_target(50, 300);
|
struct target_obj target = init_target(50, 300);
|
||||||
set_position(&target.kinematic, 300, 100);
|
set_position(&target.kinematic, 300, 100);
|
||||||
add_target_node(&target, &target_HEAD);
|
add_target_node(&target, &target_HEAD);
|
||||||
|
|
||||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
unsigned int elapsed_time[3] = {0};
|
||||||
|
|
||||||
|
char current_state[20];
|
||||||
|
char current_spd[50];
|
||||||
|
char current_time[15];
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
// Main game loop
|
// Main game loop
|
||||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||||
{
|
{
|
||||||
// Update
|
// Update
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
if (IsKeyPressed(KEY_Q)){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (IsKeyPressed(KEY_R)){
|
||||||
|
struct target_obj_node *target_current = target_HEAD;
|
||||||
|
while(target_current){
|
||||||
|
target_current->obj->destroyed = false;
|
||||||
|
target_current = target_current->next;
|
||||||
|
}
|
||||||
|
set_position(&player.kinematic, 400, 100);
|
||||||
|
set_velocity(&player.kinematic, 0, 0);
|
||||||
|
memset(elapsed_time, 0, sizeof(elapsed_time));
|
||||||
|
//continue;
|
||||||
|
}
|
||||||
|
|
||||||
player_input_check(&player);
|
player_input_check(&player);
|
||||||
|
|
||||||
|
@ -133,11 +193,20 @@ int main()
|
||||||
//DrawText(dir, 0, 50, 12, BLACK);
|
//DrawText(dir, 0, 50, 12, BLACK);
|
||||||
sprintf(current_spd, "Velocity: {%.2f,%.2f}", player.kinematic.velocity.x,player.kinematic.velocity.y);
|
sprintf(current_spd, "Velocity: {%.2f,%.2f}", player.kinematic.velocity.x,player.kinematic.velocity.y);
|
||||||
DrawText(current_spd, 350, 0, 12, BLACK);
|
DrawText(current_spd, 350, 0, 12, BLACK);
|
||||||
|
sprintf(current_time, "%u:%u.%03u", elapsed_time[2], elapsed_time[1], elapsed_time[0]);
|
||||||
|
DrawText(current_time, 350, 150, 12, BLACK);
|
||||||
EndMode2D();
|
EndMode2D();
|
||||||
|
|
||||||
EndDrawing();
|
EndDrawing();
|
||||||
remove_last_afterimage(&player);
|
remove_last_afterimage(&player);
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
float elapsed = GetFrameTime();
|
||||||
|
elapsed_time[0] += GetFrameTime() * 1000;
|
||||||
|
elapsed_time[1] += elapsed_time[0] / 1000;
|
||||||
|
elapsed_time[0] %= 1000;
|
||||||
|
elapsed_time[2] += elapsed_time[1] / 60;
|
||||||
|
elapsed_time[1] %= 60;
|
||||||
}
|
}
|
||||||
|
|
||||||
// De-Initialization
|
// De-Initialization
|
||||||
|
@ -145,8 +214,7 @@ int main()
|
||||||
free_kinematic_list(&kinematic_HEAD);
|
free_kinematic_list(&kinematic_HEAD);
|
||||||
free_target_list(&target_HEAD);
|
free_target_list(&target_HEAD);
|
||||||
free_afterimages(&player);
|
free_afterimages(&player);
|
||||||
CloseWindow(); // Close window and OpenGL context
|
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
return 0;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,11 @@ void set_position(struct kinematic_obj *obj, int x, int y){
|
||||||
obj->rect.y = y;
|
obj->rect.y = y;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void set_velocity(struct kinematic_obj *obj, int velx, int vely){
|
||||||
|
obj->velocity.x = velx;
|
||||||
|
obj->velocity.y = vely;
|
||||||
|
};
|
||||||
|
|
||||||
void move(struct kinematic_obj *obj, Vector2 acceleration){
|
void move(struct kinematic_obj *obj, Vector2 acceleration){
|
||||||
// Use Euler method for moving
|
// Use Euler method for moving
|
||||||
double delta = 1.0/60.0;
|
double delta = 1.0/60.0;
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
#include "header.h"
|
#include "header.h"
|
||||||
#include <raymath.h>
|
#include <raymath.h>
|
||||||
|
|
||||||
#define PLAYER_ACCEL 1600
|
#define PLAYER_ACCEL 2750
|
||||||
#define AIR_ACCEL 800
|
#define AIR_ACCEL 900
|
||||||
#define RUN_INIT_SPD 230
|
#define RUN_INIT_SPD 250
|
||||||
#define JUMP_SPD 350
|
#define JUMP_SPD 350
|
||||||
#define GRAV 1200
|
#define GRAV 1200
|
||||||
#define DASH_SPD 550
|
#define DASH_SPD 600
|
||||||
#define DEFAULT_JUMP_COUNT 1
|
#define DEFAULT_JUMP_COUNT 1
|
||||||
|
|
||||||
static bool allow_move = true;
|
static bool allow_move = true;
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
#include "header.h"
|
||||||
|
#include <raymath.h>
|
||||||
|
|
||||||
|
static unsigned int option = 0;
|
||||||
|
|
||||||
|
const unsigned int max_options = 2;
|
||||||
|
const char menu_options[2][10] = {"Play", "Exit"};
|
||||||
|
|
||||||
|
Vector2 menu_list_pos = (Vector2){200,100};
|
||||||
|
|
||||||
|
Vector2 t1 = (Vector2){180, 100};
|
||||||
|
Vector2 t2 = (Vector2){190, 105};
|
||||||
|
Vector2 t3 = (Vector2){180, 110};
|
||||||
|
Vector2 offset = (Vector2){0, 50};
|
||||||
|
|
||||||
|
|
||||||
|
void main_menu_check(){
|
||||||
|
if (IsKeyPressed(UP))
|
||||||
|
--option;
|
||||||
|
if (IsKeyPressed(DOWN))
|
||||||
|
++option;
|
||||||
|
}
|
||||||
|
|
||||||
|
int get_selected_options(){
|
||||||
|
return option;
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw_menu(){
|
||||||
|
DrawFPS(0,0);
|
||||||
|
for(unsigned int i=0;i<2;++i){
|
||||||
|
DrawText(menu_options[i], menu_list_pos.x,
|
||||||
|
menu_list_pos.y + 50 * i, 12, BLACK);
|
||||||
|
}
|
||||||
|
//display_input(dir);
|
||||||
|
//DrawText(dir, 0, 50, 12, BLACK);
|
||||||
|
|
||||||
|
// Triangles has to be anticlockwse, because z axis
|
||||||
|
Vector2 off = Vector2Scale(offset, option);
|
||||||
|
DrawTriangle(Vector2Add(t1, off), Vector2Add(t3, off), Vector2Add(t2, off), BLACK);
|
||||||
|
}
|
Loading…
Reference in New Issue