Files
streaming_world/src/modules/stream/stream.h

61 lines
1.5 KiB
C++

#ifndef STREAM_H_
#define STREAM_H_
#include <vector>
#include <unordered_map>
#include <tuple>
#include <algorithm>
#include <scene/3d/spatial.h>
#include <core/io/config_file.h>
class VoxelViewer;
class VoxelLodTerrain;
class BuildingsData;
class StreamWorld : public Spatial {
GDCLASS(StreamWorld, Spatial)
private:
VoxelViewer *viewer;
VoxelLodTerrain *terrain;
Node *current_scene;
ConfigFile config;
using tile_key_t = std::tuple<int, int>;
struct tile_hash : public std::unary_function<key_t, std::size_t> {
std::size_t operator()(const tile_key_t &k) const
{
return std::get<0>(k) ^ std::get<1>(k);
}
};
using tile_map_t = std::unordered_map<const tile_key_t,
std::vector<String>, tile_hash>;
Vector3 eye;
tile_map_t tiles;
tile_map_t loaded_tiles;
int world_extent;
int tile_size;
int view_distance;
bool initialized;
int current_x, current_z;
void _notification(int which);
void create_tilemap();
void update_view();
void viewer_dead();
void terrain_dead();
void load_tile(int tx, int ty);
void erase_tile(int tx, int ty);
void load_building(const String &key);
void unload_building(const String &key);
void request_item(int type, const String &key);
void update_items();
void remove_building(const String &key);
void remove_generated_stuff();
void place_zebras();
void undo();
static void _bind_methods();
public:
void run_command(const String &command, const Array &args);
StreamWorld();
~StreamWorld();
static void cleanup();
};
#endif