SqaureGame/main.c

146 lines
5.4 KiB
C

/*******************************************************************************************
*
* Welcome to raylib!
*
* To compile example, just press F5.
* Note that compiled executable is placed in the same folder as .c file
*
* You can find all basic examples on C:\raylib\raylib\examples folder or
* raylib official webpage: www.raylib.com
*
* Enjoy using raylib. :)
*
* This example has been created using raylib 1.0 (www.raylib.com)
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
*
* Copyright (c) 2013-2019 Ramon Santamaria (@raysan5)
*
********************************************************************************************/
/* Issues:
Playing with a USB keyboard: Cannot handle simultaneous key input. I think this is more
of a GLFW issue.
*/
#include "header.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;
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");
Camera2D camera = { 0 };
camera.offset = (Vector2){0,0};
camera.rotation = 0.0f;
camera.zoom = 1.0f;
struct player_obj player = {
.kinematic = init_kinematic_obj(PLAYER_SIZE, PLAYER_SIZE),
.state = IDLE,
.after_img_head = NULL,
.after_img_tail = NULL
};
struct kinematic_obj tile = init_kinematic_obj(900, 100);
struct kinematic_obj tile2 = init_kinematic_obj(100, 40);
struct kinematic_obj tile3 = init_kinematic_obj(100, 40);
struct kinematic_obj tile4 = init_kinematic_obj(40, 200);
struct kinematic_obj tile5 = init_kinematic_obj(40, 200);
struct kinematic_obj tile6 = init_kinematic_obj(50, 300);
struct kinematic_obj tile7 = init_kinematic_obj(50, 300);
set_position(&player.kinematic, 400, 100);
set_position(&tile, -50, 380);
set_position(&tile2, 100, 280);
set_position(&tile3, 500, 280);
set_position(&tile4, 250, 140);
set_position(&tile5, 350, 100);
set_position(&tile6, 0, 50);
set_position(&tile7, 700, 80);
struct squishy_square sqr = init_squishy_square(&player.kinematic, RED);
player.image = &sqr;
add_kinematic_node(&tile, &kinematic_HEAD);
add_kinematic_node(&tile2, &kinematic_HEAD);
add_kinematic_node(&tile3, &kinematic_HEAD);
add_kinematic_node(&tile4, &kinematic_HEAD);
add_kinematic_node(&tile5, &kinematic_HEAD);
add_kinematic_node(&tile6, &kinematic_HEAD);
add_kinematic_node(&tile7, &kinematic_HEAD);
add_kinematic_node(&player.kinematic, &kinematic_HEAD);
struct target_obj target = init_target(50, 300);
set_position(&target.kinematic, 150, 380);
add_target_node(&target, &target_HEAD);
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
//--------------------------------------------------------------------------------------
// Main game loop
while (!WindowShouldClose()) // Detect window close button or ESC key
{
// Update
//----------------------------------------------------------------------------------
player_input_check(&player);
update_squishy(&sqr);
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
BeginDrawing();
ClearBackground(RAYWHITE);
draw_afterimages(&player);
draw_squishy(&sqr);
struct kinematic_obj_node *current;
struct target_obj_node *target_current;
BeginMode2D(camera);
current = kinematic_HEAD;
while(current){
DrawRectangleLinesEx(current->obj->rect, 1, BLACK);
current = current->next;
}
target_current = target_HEAD;
while(target_current){
DrawCircle(target_current->obj->kinematic.pos.x, target_current->obj->kinematic.pos.y,
target_current->obj->kinematic.ori_width, BLACK);
target_current = target_current->next;
}
DrawFPS(0,0);
state_string(current_state, player.state);
DrawText(current_state, 250, 0, 12, BLACK);
//display_input(dir);
//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);
EndMode2D();
EndDrawing();
remove_last_afterimage(&player);
//----------------------------------------------------------------------------------
}
// De-Initialization
//--------------------------------------------------------------------------------------
free_kinematic_list(&kinematic_HEAD);
free_target_list(&target_HEAD);
free_afterimages(&player);
CloseWindow(); // Close window and OpenGL context
//--------------------------------------------------------------------------------------
return 0;
}