aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authornathansmith117 <thenathansmithsmith@gmail.com>2024-05-06 17:51:39 +0000
committernathansmith117 <thenathansmithsmith@gmail.com>2024-05-06 17:51:39 +0000
commitc475f3de248a25a999dafd4792d0454eb55191c1 (patch)
tree9fed15b875176bf7bd6ca6d26c9b0d1e3fa8e984 /src
parenta62dd3774512041a71f708c0e891893febb8b19e (diff)
downloadPenguinYippies-c475f3de248a25a999dafd4792d0454eb55191c1.tar.gz
PenguinYippies-c475f3de248a25a999dafd4792d0454eb55191c1.tar.bz2
PenguinYippies-c475f3de248a25a999dafd4792d0454eb55191c1.zip
Builtin shooter thingy going well
Diffstat (limited to 'src')
-rw-r--r--src/game.c7
-rw-r--r--src/game.h5
-rw-r--r--src/gameScreen.c8
-rw-r--r--src/shooterScreen.c100
-rw-r--r--src/shooterScreen.h31
5 files changed, 149 insertions, 2 deletions
diff --git a/src/game.c b/src/game.c
index c8b711c..6f74c58 100644
--- a/src/game.c
+++ b/src/game.c
@@ -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);
diff --git a/src/game.h b/src/game.h
index 3c4ec5d..a930a5b 100644
--- a/src/game.h
+++ b/src/game.h
@@ -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