jumpartifact.com_demo_0/src/screen_trunner.h

75 lines
1.6 KiB
C
Raw Normal View History

#ifndef JUMPARTIFACT_DOT_COM_DEMO_0_TANK_RUNNER_H_
#define JUMPARTIFACT_DOT_COM_DEMO_0_TANK_RUNNER_H_
#include "screen.h"
// standard library includes
#include <array>
#include <bitset>
2023-08-08 02:33:07 +00:00
#include <optional>
// third party includes
#include <raylib.h>
constexpr float POS_VALUE_INC_RATE = 0.2F;
2023-08-07 03:54:23 +00:00
constexpr float CAMERA_UPDATE_RATE = 1.0F;
2023-08-08 02:33:07 +00:00
constexpr unsigned int SURFACE_UNIT_WIDTH = 51;
constexpr unsigned int SURFACE_UNIT_HEIGHT = 51;
constexpr float SURFACE_X_OFFSET = (float)SURFACE_UNIT_WIDTH / 2.0F - 0.5F;
constexpr float SURFACE_Y_OFFSET = (float)SURFACE_UNIT_HEIGHT / 2.0F - 0.5F;
2023-08-08 02:33:07 +00:00
constexpr float SURFACE_HEIGHT_INTERVAL = 0.5F;
class TRunnerScreen : public Screen {
public:
TRunnerScreen(std::weak_ptr<ScreenStack> stack);
~TRunnerScreen() override;
bool update(float dt) override;
bool draw() override;
private:
enum Pixel : unsigned char {
PIXEL_BLANK,
PIXEL_BLACK,
PIXEL_RED,
PIXEL_GREEN,
PIXEL_BLUE,
PIXEL_YELLOW,
PIXEL_CYAN,
PIXEL_MAGENTA,
PIXEL_ORANGE,
PIXEL_BROWN,
PIXEL_TURQUOISE,
PIXEL_SKY,
PIXEL_WHITE
};
2023-08-08 02:33:07 +00:00
struct SurfaceUnit {
float nw, ne, sw, se;
};
static Color PixelToColor(Pixel p);
2023-08-08 02:33:07 +00:00
std::array<std::optional<SurfaceUnit>,
SURFACE_UNIT_WIDTH * SURFACE_UNIT_HEIGHT>
surface;
2023-08-07 03:54:23 +00:00
Camera3D camera;
std::bitset<64> flags;
2023-08-04 05:32:05 +00:00
Model TEMP_cube_model;
Texture2D TEMP_cube_texture;
Matrix TEMP_matrix;
2023-08-07 03:54:23 +00:00
Vector3 camera_pos;
Vector3 camera_target;
float pos_value;
float mouse_px;
float mouse_pz;
unsigned int idx_hit;
2023-08-07 03:54:23 +00:00
void camera_to_targets(float dt);
};
#endif