Grid base

This commit is contained in:
Rendo 2026-03-11 18:48:29 +05:00
commit 0432d6932c
11 changed files with 81 additions and 14 deletions

20
assets/map Normal file
View file

@ -0,0 +1,20 @@
######### #########
# #
# #
# #
# P #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
######### #########

BIN
assets/sprites/wall.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 B

View file

@ -2,4 +2,3 @@
-lraylib
-lstdc++
-lm
-v

View file

@ -1,9 +1,10 @@
CFLAGS=$(shell cat compiler_flags.txt)
CP=clang
CFLAGS=$(shell cat compiler_flags.txt | tr '\n' ' ')
FILES=$(wildcard src/*.cpp)
build/raylib-test-linux.x86_64 : $(FILES)
mkdir -p build
clang $(FILES) $(CFLAGS) -o build/raylib-test-linux.x86_64
$(CP) $(FILES) $(CFLAGS) -o build/raylib-test-linux.x86_64
clean :

View file

@ -5,7 +5,7 @@
// Pacman definitions
Rectangle Pacman::getTextureRect(){
Rectangle Pacman::getTextureRect() const{
Rectangle result;
result.x = 0;
result.y = facing*16;
@ -53,7 +53,7 @@ void Pacman::tick() {
}
}
void Pacman::draw() {
void Pacman::draw() const {
// Drawing
DrawTextureRec(this->texture, this->getTextureRect(), this->position, WHITE);
}
@ -72,7 +72,7 @@ void Wall::ready() {
// Set neigbors depending on state
}
void Wall::draw() {
void Wall::draw() const {
// Draw based on neighbors
}

View file

@ -8,9 +8,11 @@ class Entity{
public:
virtual ~Entity(){}
Vector2 position;
virtual void ready() {}
virtual void process() {}
virtual void draw() {}
virtual void draw() const {}
virtual void tick() {}
};
@ -19,16 +21,15 @@ class Pacman : public Entity{
const int speed = 16;
private:
Texture2D texture;
Vector2 position;
int facing;
Rectangle getTextureRect();
Rectangle getTextureRect() const;
public:
Pacman();
Pacman(Vector2 position);
~Pacman();
void tick() override;
void draw() override;
void draw() const override;
};
class Wall : public Entity {
@ -38,7 +39,7 @@ class Wall : public Entity {
Wall();
~Wall();
void ready() override;
void draw() override;
void draw() const override;
};
#endif

View file

@ -35,3 +35,7 @@ int main() {
return 0;
}
void load_map(const char * path){
}

8
src/maploader.cpp Normal file
View file

@ -0,0 +1,8 @@
#include "maploader.h"
#include <fstream>
#include "world.h"
void loadmap() {
}

6
src/maploader.h Normal file
View file

@ -0,0 +1,6 @@
#ifndef MAPLOADER_H
#define MAPLOADER_H
void loadmap();
#endif

View file

@ -21,6 +21,8 @@ void World::setup(){
void World::process(){
this->clock += GetFrameTime();
this->update_grid();
for(int i = 0; i < this->entities.size(); i++) {
this->entities[i]->process();
if (this->clock>=this->seconds_per_tick) {
@ -33,12 +35,31 @@ void World::process(){
}
}
void World::draw() {
void World::draw() const {
for(int i = 0; i < this->entities.size(); i++) {
this->entities[i]->draw();
}
}
int indexify_position(Vector2 vector){
return (int)(vector.x / 16.0) + GRID_COLUMNS * (int)(vector.y / 16.0);
}
void World::update_grid() {
for(int i = 0; i < GRID_CAPACITY; i++)
this->grid[i] = nullptr;
for(int i = 0; i < this->entities.size(); i++)
{
int indexified_position = indexify_position(this->entities[i]->position);
if (indexified_position < 0 || indexified_position >= GRID_CAPACITY)
continue;
grid[indexified_position] = this->entities[i];
}
}
World create_world_with(float seconds_per_tick){
World result = World();

View file

@ -4,6 +4,10 @@
#include "components.h"
#include <vector>
const int GRID_ROWS = 20;
const int GRID_COLUMNS = 20;
const int GRID_CAPACITY = GRID_COLUMNS*GRID_ROWS;
/// Class that holds information about game world
class World {
public:
@ -11,6 +15,7 @@ class World {
~World();
std::vector<Entity*> entities; /// Main subjects of game world.
Entity* grid[GRID_CAPACITY]; /// Grid representation
float seconds_per_tick; /// Internal clock speed
void setup(); /// Sets up game world.
@ -19,14 +24,16 @@ class World {
void process(); /// Should be called every frame. Calls
/// process() on every entity
void draw(); /// Should be called at the end of frame.
void draw() const; /// Should be called at the end of frame.
/// Calls draw() on every entity
private:
float clock;
void update_grid();
};
static World world; /// World singleton
World create_world_with(float seconds_per_tick);
int indexify_position(Vector2 vector);
#endif