nout-raypractice/include/world.h
2026-08-16 02:40:59 +05:00

72 lines
1.6 KiB
C++

#ifndef WORLD_H
#define WORLD_H
#include "components.h"
#include <raylib.h>
#include <string>
#include <vector>
const int CELL_SIZE = 16;
struct Vector2i{
int x;
int y;
};
enum LevelState{
NotFinished = 0,
Won = 1,
Lost = 2,
};
const int PACMAN_KILLTIME = 45;
/// Class that holds information about game world
class World {
public:
World();
~World();
bool debug = false;
std::vector<Entity*> entities; /// Main subjects of game world.
Entity** grid; /// Grid representation
float seconds_per_tick = 0.; /// Internal clock speed
int width = 0;
int height = 0;
int bound_offset = 1;
int total_scorepoints = 0;
void setup(); /// Sets up game world.
/// Should be called once when entites are set.
void process(); /// Should be called every frame. Calls
/// process() on every entity
void draw() const; /// Should be called at the end of frame.
/// Calls draw() on every entity
void set_size(Vector2i);
int get_capacity() const;
int get_columns() const;
int get_rows() const;
void start_killmode();
bool get_killmode();
void load_atlas();
void lose();
void win();
Texture2D* get_atlas();
int indexify_position(Vector2 vector);
int points = 0;
private:
float clock = 0.;
int pacman_killmod_timer = 0;
int state = 0;
void update_grid();
Texture2D texture_atlas;
};
void create_world_with(float seconds_per_tick);
void init_world();
World& get_world(); // Thanks, 2ndbeam, helps a lot
Vector2i get_map_size(const char* path);
void load_world(World& world, const char* path);
#endif