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
|
||||
BUILD_DIR = build/
|
||||
OBJ = $(patsubst %.c,$(BUILD_DIR)%.o,$(SRC_FILES))
|
||||
|
@ -22,9 +23,7 @@ $(EXE): $(OBJ)
|
|||
$(CC) -o $@ $^ $(LDFLAGS)
|
||||
|
||||
$(BUILD_DIR)%.o: %.c
|
||||
@ mkdir -p $(BUILD_DIR)
|
||||
@ mkdir -p $(BUILD_DIR)/obj
|
||||
@ mkdir -p $(BUILD_DIR)/utilities
|
||||
@ $(foreach dir, $(SRC_DIRECTORY), mkdir -p $(BUILD_DIR)/$(dir))
|
||||
@ $(CC) $(CFLAGS) -o $@ -c $<
|
||||
|
||||
-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);
|
||||
void move(struct kinematic_obj *obj, Vector2 acceleration);
|
||||
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);
|
||||
void scale_rect(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);
|
||||
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
|
||||
void state_string(char *str, enum PLAYER_STATE state);
|
||||
void display_input(char *dir);
|
||||
|
|
88
main.c
88
main.c
|
@ -23,29 +23,71 @@
|
|||
*/
|
||||
|
||||
#include "header.h"
|
||||
#include <sys/time.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
struct kinematic_obj_node *kinematic_HEAD = NULL;
|
||||
struct target_obj_node *target_HEAD = NULL;
|
||||
int PLAYER_ACCEL = 1500;
|
||||
int JUMP_ACCEL = 15000;
|
||||
int JUMP_SPD = 350;
|
||||
int GRAV = 1000;
|
||||
|
||||
const int screenWidth = 800;
|
||||
const int screenHeight = 450;
|
||||
|
||||
int main_menu(Camera2D camera);
|
||||
void play_test_level(Camera2D camera);
|
||||
|
||||
int main()
|
||||
{
|
||||
// Initialization
|
||||
//--------------------------------------------------------------------------------------
|
||||
const int screenWidth = 800;
|
||||
const int screenHeight = 450;
|
||||
char current_state[20];
|
||||
char current_spd[50];
|
||||
//char dir[7];
|
||||
|
||||
InitWindow(screenWidth, screenHeight, "raylib");
|
||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
||||
|
||||
Camera2D camera = { 0 };
|
||||
camera.offset = (Vector2){0,0};
|
||||
camera.rotation = 0.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 = {
|
||||
.kinematic = init_kinematic_obj(PLAYER_SIZE, PLAYER_SIZE),
|
||||
|
@ -87,14 +129,32 @@ int main()
|
|||
struct target_obj target = init_target(50, 300);
|
||||
set_position(&target.kinematic, 300, 100);
|
||||
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
|
||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||
{
|
||||
// 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);
|
||||
|
||||
|
@ -133,11 +193,20 @@ int main()
|
|||
//DrawText(dir, 0, 50, 12, BLACK);
|
||||
sprintf(current_spd, "Velocity: {%.2f,%.2f}", player.kinematic.velocity.x,player.kinematic.velocity.y);
|
||||
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();
|
||||
|
||||
EndDrawing();
|
||||
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
|
||||
|
@ -145,8 +214,7 @@ int main()
|
|||
free_kinematic_list(&kinematic_HEAD);
|
||||
free_target_list(&target_HEAD);
|
||||
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;
|
||||
};
|
||||
|
||||
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){
|
||||
// Use Euler method for moving
|
||||
double delta = 1.0/60.0;
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
#include "header.h"
|
||||
#include <raymath.h>
|
||||
|
||||
#define PLAYER_ACCEL 1600
|
||||
#define AIR_ACCEL 800
|
||||
#define RUN_INIT_SPD 230
|
||||
#define PLAYER_ACCEL 2750
|
||||
#define AIR_ACCEL 900
|
||||
#define RUN_INIT_SPD 250
|
||||
#define JUMP_SPD 350
|
||||
#define GRAV 1200
|
||||
#define DASH_SPD 550
|
||||
#define DASH_SPD 600
|
||||
#define DEFAULT_JUMP_COUNT 1
|
||||
|
||||
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