Automation/src/map/node.cpp
Quantum 39d055f5d6
Cleanup
Removed old prints
Fixed a possibly uninitialized variable in node.cpp
Removed unused `vector2.h` include
2021-08-01 21:10:43 -04:00

119 lines
2.5 KiB
C++

#include "map/node.h"
#include "tiles/dirt.h"
#include "tiles/grass.h"
#include "tiles/stone.h"
#include "tiles/rainbow.h"
Node::Node(const Node &other) {
if(other.m_tile) {
m_tile = other.m_tile->clone();
m_tile->set_node(this);
}
if(other.m_entity) {
m_entity = other.m_entity->clone();
m_entity->set_node(this);
}
m_pos = other.m_pos;
m_size = other.m_size;
}
Node::~Node() {
if(m_tile) delete m_tile;
if(m_entity) delete m_entity;
}
void Node::set_tile(Tile *tile) {
if(!tile) {
std::cout << "Tried to set null tile!" << std::endl;
return;
}
if(m_tile) {
delete m_tile;
m_tile = nullptr;
}
if(m_entity) {
delete m_entity;
m_entity = nullptr;
}
m_tile = tile;
m_tile->set_node(this);
set_entity(m_tile->create_entity());
}
void Node::set_entity(Entity *entity) {
if(!entity)
return;
if(m_entity) {
delete m_entity;
m_entity = nullptr;
}
m_entity = entity;
m_entity->set_node(this);
}
void Node::update(double dt) {
if(m_entity)
m_entity->update(dt);
}
void Node::render(Render r) {
if(m_tile)
m_tile->render(r);
}
std::ostream &operator<<(std::ostream &os, const Node &node) {
os.write(reinterpret_cast<const char *>(&node.m_size), sizeof(node.m_size));
if(node.m_tile) {
os << '\x01';
os << *node.m_tile;
} else {
os << '\x00';
}
return os;
}
std::istream &operator>>(std::istream &is, Node &node) {
is.read(reinterpret_cast<char *>(&node.m_size), sizeof(node.m_size));
uint8_t has_tile = 0;
is.read(reinterpret_cast<char *>(&has_tile), sizeof(has_tile));
if(has_tile) {
int id = 0;
// TODO: Move / figure this shit out
is.read(reinterpret_cast<char *>(&id), sizeof(id));
Tile *tile = nullptr;
switch(id) {
case -1:
tile = new Tile();
break;
case 1:
tile = new Dirt();
break;
case 2:
tile = new Grass();
break;
case 3:
tile = new Stone();
break;
case 4:
tile = new Rainbow();
break;
default:
std::cout << "Invalid tile" << std::endl;
break;
}
if(tile) node.set_tile(tile);
is >> *node.m_tile;
}
return is;
}