diff options
author | nathansmith117 <thenathansmithsmith@gmail.com> | 2024-05-06 17:51:39 +0000 |
---|---|---|
committer | nathansmith117 <thenathansmithsmith@gmail.com> | 2024-05-06 17:51:39 +0000 |
commit | c475f3de248a25a999dafd4792d0454eb55191c1 (patch) | |
tree | 9fed15b875176bf7bd6ca6d26c9b0d1e3fa8e984 /src | |
parent | a62dd3774512041a71f708c0e891893febb8b19e (diff) | |
download | PenguinYippies-c475f3de248a25a999dafd4792d0454eb55191c1.tar.gz PenguinYippies-c475f3de248a25a999dafd4792d0454eb55191c1.tar.bz2 PenguinYippies-c475f3de248a25a999dafd4792d0454eb55191c1.zip |
Builtin shooter thingy going well
Diffstat (limited to 'src')
-rw-r--r-- | src/game.c | 7 | ||||
-rw-r--r-- | src/game.h | 5 | ||||
-rw-r--r-- | src/gameScreen.c | 8 | ||||
-rw-r--r-- | src/shooterScreen.c | 100 | ||||
-rw-r--r-- | src/shooterScreen.h | 31 |
5 files changed, 149 insertions, 2 deletions
@@ -12,6 +12,7 @@ void initGame(Game* game) game->currentScreen = MAIN_MENU_SCREEN; initMainMenu(&game->mainMenu, game); initGameScreen(&game->gameScreen, game); + initShooterScreeen(&game->shooterScreen, game); // Clickies lol. initClickies(&game->clickies); @@ -28,7 +29,7 @@ void initGame(Game* game) game->madeWithUnity = createAnimation(&game->assets.animations[MADE_WITH_UNITY_ANIMATION], 0.2); game->madeWithUnity.repeat = false; - playAnimation(&game->madeWithUnity); + //playAnimation(&game->madeWithUnity); } void updateGame(Game* game) @@ -64,6 +65,9 @@ void updateGame(Game* game) case GAME_SCREEN: updateGameScreen(&game->gameScreen, game); break; + case SHOOTER_SCREEN: + updateShooterScreen(&game->shooterScreen, game); + break; default: break; } @@ -90,6 +94,7 @@ void closeGame(Game* game) closeAssets(&game->assets); closeMainMenu(&game->mainMenu); closeGameScreen(&game->gameScreen); + closeShooterScreen(&game->shooterScreen); closeClickies(&game->clickies); UnloadRenderTexture(game->screenTexture); @@ -4,13 +4,15 @@ #include "assets.h" #include "clicky.h" #include "animation.h" +#include "shooterScreen.h" #ifndef GAME_H #define GAME_H typedef enum ScreenId { MAIN_MENU_SCREEN, - GAME_SCREEN + GAME_SCREEN, + SHOOTER_SCREEN } ScreenId; typedef struct Game { @@ -20,6 +22,7 @@ typedef struct Game { ScreenId currentScreen; MainMenu mainMenu; GameScreen gameScreen; + ShooterScreen shooterScreen; Clickies clickies; diff --git a/src/gameScreen.c b/src/gameScreen.c index 230005d..a735b58 100644 --- a/src/gameScreen.c +++ b/src/gameScreen.c @@ -3,6 +3,7 @@ #include "assets.h" #include "util.h" #include "clicky.h" +#include "shooterScreen.h" #include <raylib.h> void initGameScreen(GameScreen* gameScreen, Game* game) @@ -157,6 +158,13 @@ void updateGameScreenToolBar(GameScreen* gameScreen, Game* game) void updateGameScreen(GameScreen* gameScreen, Game* game) { + + // Testy shooter. + if(IsKeyPressed(KEY_S)) + { + enterShooterScreen(game); + } + // Draw background. Texture background = game->assets.textures[MAIN_SCREEN_BACKGROUND_TEXTURE]; diff --git a/src/shooterScreen.c b/src/shooterScreen.c new file mode 100644 index 0000000..d17fdd6 --- /dev/null +++ b/src/shooterScreen.c @@ -0,0 +1,100 @@ +#include "shooterScreen.h" +#include "game.h" +#include <raylib.h> +#include <raymath.h> + +void initShooterScreeen(ShooterScreen* shooterScreen, Game* game) +{ + // Setup player. + shooterScreen->player = (ShooterPlayer){ + .camera = (Camera3D){ + .up = (Vector3){0.0, 1.0, 0.0}, + .fovy = 90.0, + .projection = CAMERA_PERSPECTIVE + }, + .position = (Vector3){0.0, PLAYER_HEIGHT, 0.0}, + .direction = (Vector3){0.0, 0.0, 1.0}, + .velocity = Vector3Zero(), + .cameraAngle = Vector2Zero() + }; +} + +void updateShooterScreenControls(ShooterScreen* shooterScreen, Game* game) +{ + ShooterPlayer* player = &shooterScreen->player; + Vector2 mouseDelta = Vector2Scale(GetMouseDelta(), MOUSE_SPEED); + + // Update camera angle. + player->cameraAngle = Vector2Add(player->cameraAngle, mouseDelta); + player->cameraAngle.x = Wrap(player->cameraAngle.x, -PI, PI); + player->cameraAngle.y = Clamp(player->cameraAngle.y, -PI / 2.5, PI / 2.5); + + // Set direction. + Matrix matrix = MatrixRotateXYZ((Vector3){-player->cameraAngle.y, player->cameraAngle.x, 0.0}); + player->direction = (Vector3){matrix.m2, matrix.m6, matrix.m10}; + + // Update velocity. + player->velocity = Vector3Zero(); + + if (IsKeyDown(KEY_W)) + { + player->velocity.z += cos(player->cameraAngle.x); + player->velocity.x += -sin(player->cameraAngle.x); + } + if (IsKeyDown(KEY_A)) + { + player->velocity.z += cos(player->cameraAngle.x - (PI / 2.0)); + player->velocity.x += -sin(player->cameraAngle.x - (PI / 2.0)); + } + if (IsKeyDown(KEY_S)) + { + player->velocity.z += -cos(player->cameraAngle.x); + player->velocity.x += sin(player->cameraAngle.x); + } + if (IsKeyDown(KEY_D)) + { + player->velocity.z += cos(player->cameraAngle.x + (PI / 2.0)); + player->velocity.x += -sin(player->cameraAngle.x + (PI / 2.0)); + } + + player->velocity = Vector3Scale(player->velocity, PLAYER_SPEED); +} + +void updateShooterScreen(ShooterScreen* shooterScreen, Game* game) +{ + ShooterPlayer* player = &shooterScreen->player; + ClearBackground(PINK); + + updateShooterScreenControls(shooterScreen, game); + + // Apply velocity. + player->position = Vector3Add( + player->position, + Vector3Scale(player->velocity, GetFrameTime()) + ); + + // Camera things. + player->camera.position = player->position; + player->camera.target = Vector3Add(player->position, player->direction); + + // Draw 3d scene. + BeginMode3D(shooterScreen->player.camera); + + DrawGrid(32, 2.0); + + EndMode3D(); +} + +void closeShooterScreen(ShooterScreen* shooterScreen) +{ +} + +void enterShooterScreen(Game* game) +{ + game->currentScreen = SHOOTER_SCREEN; + DisableCursor(); +} +void leaveShooterScreen(Game* game) +{ + EnableCursor(); +} diff --git a/src/shooterScreen.h b/src/shooterScreen.h new file mode 100644 index 0000000..9bbc188 --- /dev/null +++ b/src/shooterScreen.h @@ -0,0 +1,31 @@ +#include "gameCommon.h" + +#ifndef SHOOTER_SCREEN_H +#define SHOOTER_SCREEN_H + +#define PLAYER_HEIGHT 2.0 +#define MOUSE_SPEED 0.01 +#define PLAYER_SPEED 10.0 + +typedef struct ShooterPlayer { + Camera3D camera; + + Vector3 position; + Vector3 direction; + Vector3 velocity; + + Vector2 cameraAngle; +} ShooterPlayer; + +typedef struct ShooterScreen { + ShooterPlayer player; +} ShooterScreen; + +void initShooterScreeen(ShooterScreen* shooterScreen, Game* game); +void updateShooterScreen(ShooterScreen* shooterScreen, Game* game); +void closeShooterScreen(ShooterScreen* shooterScreen); + +void enterShooterScreen(Game* game); +void leaveShooterScreen(Game* game); + +#endif |