Browse Source

somewhat synchronize light server stuff

feature/replace-renderer
Martin Dørum 3 years ago
parent
commit
9eeb30960f

+ 1
- 1
libswan/include/swan/Game.h View File



std::unique_ptr<World> world_ = NULL; std::unique_ptr<World> world_ = NULL;
Cygnet::Renderer renderer_; Cygnet::Renderer renderer_;
Cygnet::RenderCamera cam_{.zoom = 0.25};
Cygnet::RenderCamera cam_{.zoom = 0.125};


private: private:
std::bitset<SDL_NUM_SCANCODES> pressedKeys_; std::bitset<SDL_NUM_SCANCODES> pressedKeys_;

+ 4
- 5
libswan/include/swan/LightServer.h View File

void onLightRemoved(TilePos pos, float level); void onLightRemoved(TilePos pos, float level);
void onChunkAdded(ChunkPos pos, NewLightChunk &&chunk); void onChunkAdded(ChunkPos pos, NewLightChunk &&chunk);
void onChunkRemoved(ChunkPos pos); void onChunkRemoved(ChunkPos pos);
void flip();


private: private:
static constexpr int LIGHT_CUTOFF_DIST = 64; static constexpr int LIGHT_CUTOFF_DIST = 64;
inline void LightServer::onSolidBlockAdded(TilePos pos) { inline void LightServer::onSolidBlockAdded(TilePos pos) {
std::lock_guard<std::mutex> lock(mut_); std::lock_guard<std::mutex> lock(mut_);
buffers_[buffer_].push_back({ Event::Tag::BLOCK_ADDED, pos, { .i = 0 } }); buffers_[buffer_].push_back({ Event::Tag::BLOCK_ADDED, pos, { .i = 0 } });
cond_.notify_one();
} }


inline void LightServer::onSolidBlockRemoved(TilePos pos) { inline void LightServer::onSolidBlockRemoved(TilePos pos) {
std::lock_guard<std::mutex> lock(mut_); std::lock_guard<std::mutex> lock(mut_);
buffers_[buffer_].push_back({ Event::Tag::BLOCK_REMOVED, pos, { .i = 0 } }); buffers_[buffer_].push_back({ Event::Tag::BLOCK_REMOVED, pos, { .i = 0 } });
cond_.notify_one();
} }


inline void LightServer::onLightAdded(TilePos pos, float level) { inline void LightServer::onLightAdded(TilePos pos, float level) {
std::lock_guard<std::mutex> lock(mut_); std::lock_guard<std::mutex> lock(mut_);
buffers_[buffer_].push_back({ Event::Tag::LIGHT_ADDED, pos, { .f = level } }); buffers_[buffer_].push_back({ Event::Tag::LIGHT_ADDED, pos, { .f = level } });
cond_.notify_one();
} }


inline void LightServer::onLightRemoved(TilePos pos, float level) { inline void LightServer::onLightRemoved(TilePos pos, float level) {
std::lock_guard<std::mutex> lock(mut_); std::lock_guard<std::mutex> lock(mut_);
buffers_[buffer_].push_back({ Event::Tag::LIGHT_REMOVED, pos, { .f = level } }); buffers_[buffer_].push_back({ Event::Tag::LIGHT_REMOVED, pos, { .f = level } });
cond_.notify_one();
} }


inline void LightServer::onChunkAdded(Vec2i pos, NewLightChunk &&chunk) { inline void LightServer::onChunkAdded(Vec2i pos, NewLightChunk &&chunk) {
buffers_[buffer_].push_back({ Event::Tag::CHUNK_ADDED, pos, buffers_[buffer_].push_back({ Event::Tag::CHUNK_ADDED, pos,
{ .i = (int)newChunkBuffers_[buffer_].size() } }); { .i = (int)newChunkBuffers_[buffer_].size() } });
newChunkBuffers_[buffer_].push_back(std::move(chunk)); newChunkBuffers_[buffer_].push_back(std::move(chunk));
cond_.notify_one();
} }


inline void LightServer::onChunkRemoved(Vec2i pos) { inline void LightServer::onChunkRemoved(Vec2i pos) {
std::lock_guard<std::mutex> lock(mut_); std::lock_guard<std::mutex> lock(mut_);
buffers_[buffer_].push_back({ Event::Tag::CHUNK_REMOVED, pos, { .i = 0 } }); buffers_[buffer_].push_back({ Event::Tag::CHUNK_REMOVED, pos, { .i = 0 } });
}

inline void LightServer::flip() {
cond_.notify_one(); cond_.notify_one();
} }



+ 2
- 2
libswan/src/Game.cc View File

cam_.zoom += (float)wasWheelScrolled() * 0.1f * cam_.zoom; cam_.zoom += (float)wasWheelScrolled() * 0.1f * cam_.zoom;
if (cam_.zoom > 1) if (cam_.zoom > 1)
cam_.zoom = 1; cam_.zoom = 1;
else if (cam_.zoom < 0.05)
cam_.zoom = 0.05;
else if (cam_.zoom < 0.025)
cam_.zoom = 0.025;


world_->update(dt); world_->update(dt);



+ 4
- 1
libswan/src/WorldPlane.cc View File

} }
} }


for (auto &coll: entColls_)
for (auto &coll: entColls_) {
coll->draw(ctx, rnd); coll->draw(ctx, rnd);
}

lighting_->flip();


/* /*
if (debugBoxes_.size() > 0) { if (debugBoxes_.size() > 0) {

Loading…
Cancel
Save