lib/game: Start working on game internals

Btw: I lost the game.
master
BodgeMaster 2023-01-27 03:32:07 +01:00
parent b07d6e2ff6
commit 6112da2e6f
4 changed files with 103 additions and 0 deletions

0
src/lib/game/block.cpp Normal file
View File

103
src/lib/game/block.hpp Normal file
View File

@ -0,0 +1,103 @@
#pragma once
#include <cstdint>
namespace block {
// For internal use only. These are examples, we will probably need
// a different way of assigning IDs in the future but a list should
// be fine for now, I guess.
// I dont know how Minecraft assigns its IDs or if it even matters
// given that it has used string IDs for a while now. We just need an
// internal way to distinguish between classes.
namespace ids {
const uint16_t AIR = 0;
const uint16_t STONE = 1;
}
// These are intended to be combined using bitwise OR.
namespace collisionBehavior {
// Let the block handle it.
// A function on the relevant block class will deal with it.
const uint8_t UNKNOWN = 0b00000000;
// Collision box inhibits movement?
// (stone or stone slab)
const uint8_t SOLID = 0b00000001;
// Does collision box fill entire block?
// (stone or grass block)
//
// The shape of the collision box is part of the relevant block class
// when this bit is unset.
const uint8_t FULL_BLOCK = 0b00000010;
const uint8_t SOLID_FULL_BLOCK = SOLID | FULL_BLOCK;
// Slow down entities when inside the block?
// (vines or soulsand)
//
// Entities are considered to be inside a given block when rounding
// their coordinates results in the coordinates of the block.
//
// The amount of slowdown is controlled by a function on the relevant
// block class.
const uint8_t SLOWDOWN = 0b00000100;
// Slow down entities when touching the collision box of the block?
// (honey block)
//
// The amount of slowdown is controlled by a function on the relevant
// block class.
const uint8_t SURFACE_SLOWDOWN = 0b00001000;
// Deal damage when entities are inside it?
// (berry bush)
//
// Entities are considered to be inside a given block when rounding
// their coordinates results in the coordinates of the block.
//
// The amount of damage is controlled by a function on the relevant
// block class.
const uint8_t DAMAGE = 0b00010000;
// Deal damage when entities touch the collision box?
// (magma block)
//
// The amount of damage is controlled by a function on the relevant
// block class.
const uint8_t SURFACE_DAMAGE = 0b00010000;
// Is the block bouncy?
// (bed or slime block)
//
// The bounciness of the block is handled by the relevant block class.
const uint8_t BOUNCY = 0b00100000;
}
class Generic {
private:
public:
virtual uint16_t id() = 0;
virtual uint8_t collisionBehavior() = 0;
//TODO: (not pure) virtual functions for collision box, slowdown, damage, bounciness, etc.
//TODO: (not pure) virtual function for hitbox (defaults to full block)
}
class Air {
public:
uint16_t id() {
return ids::AIR;
}
uint8_t collisionBehavior() {
// is a full block but doesn't collide or anything else
return collisionBehavior::FULL_BLOCK;
}
}
BlockGeneric* getNewBlockFromID(uint16_t id) {
//TODO
}
}

0
src/lib/game/entity.cpp Normal file
View File

0
src/lib/game/entity.hpp Normal file
View File