Networked Dimensions, dimension transitions, & dimension change functions!
parent
eea04c091b
commit
45646b4769
|
@ -9,7 +9,6 @@
|
|||
</inspection_tool>
|
||||
<inspection_tool class="LongLine" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
<inspection_tool class="OCDFAInspection" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||
<inspection_tool class="OCInconsistentNaming" enabled="true" level="WEAK WARNING" enabled_by_default="true" />
|
||||
<inspection_tool class="SpellCheckingInspection" enabled="false" level="TYPO" enabled_by_default="false">
|
||||
<option name="processCode" value="true" />
|
||||
<option name="processLiterals" value="true" />
|
||||
|
|
|
@ -61,7 +61,7 @@ Api::Usertype::Dimension Api::Usertype::ServerPlayer::get_dimension() {
|
|||
}
|
||||
|
||||
void Api::Usertype::ServerPlayer::set_dimension(const std::string& identifier) {
|
||||
player->setDim(player->getDim()->getWorld().getDimension(identifier));
|
||||
player->setDim(player->getDim()->getWorld().getDimension(identifier), true);
|
||||
}
|
||||
|
||||
sol::object Api::Usertype::ServerPlayer::get_hand_list(sol::this_state s) {
|
||||
|
|
|
@ -188,6 +188,7 @@ void LocalDimension::serverEntitiesInfo(Deserializer& e) {
|
|||
|
||||
while (!d.atEnd()) {
|
||||
switch (d.readE<NetField>()) {
|
||||
case NetField::DIM: activeEntity->setDim(world.getDimension(d.read<unsigned int>())); break;
|
||||
case NetField::POS: activeEntity->setPos(d.read<glm::vec3>()); break;
|
||||
case NetField::VEL: activeEntity->setVel(d.read<glm::vec3>()); break;
|
||||
case NetField::ROT: activeEntity->setRot(d.read<glm::vec3>()); break;
|
||||
|
|
|
@ -29,7 +29,8 @@ void ServerDimension::update(double delta) {
|
|||
|
||||
bool clientNearby = false;
|
||||
for (auto& player : static_cast<ServerWorld&>(world).getClients().players) {
|
||||
if (player->getDim()->getInd() == ind) {
|
||||
// TODO: Re-enable then **once** file saving is implemented.
|
||||
// if (player->getDim()->getInd() == ind) {
|
||||
auto clientPos = Space::MapBlock::world::fromBlock(player->getPos());
|
||||
if (abs(clientPos.x - mb->pos.x) <= discardRange.x + 1
|
||||
&& abs(clientPos.y - mb->pos.y) <= discardRange.y + 1
|
||||
|
@ -37,7 +38,7 @@ void ServerDimension::update(double delta) {
|
|||
clientNearby = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// }
|
||||
}
|
||||
|
||||
if (!clientNearby) region.second->remove(i);
|
||||
|
|
|
@ -4,10 +4,16 @@
|
|||
|
||||
#include <iostream>
|
||||
|
||||
#include "world/dim/Dimension.h"
|
||||
#include "ServerLuaEntity.h"
|
||||
|
||||
#include "util/net/Serializer.h"
|
||||
|
||||
void ServerLuaEntity::setDim(DimensionPtr dim) {
|
||||
Entity::setDim(dim);
|
||||
dirtyFields.emplace(NetField::DIM);
|
||||
}
|
||||
|
||||
void ServerLuaEntity::setPos(glm::vec3 position) {
|
||||
Entity::setPos(position);
|
||||
dirtyFields.emplace(NetField::POS);
|
||||
|
@ -70,6 +76,7 @@ std::string ServerLuaEntity::serialize() {
|
|||
Serializer s;
|
||||
s.append<unsigned int>(id);
|
||||
|
||||
if (dirtyFields.count(NetField::DIM) || fullSend) s.appendE(NetField::DIM) .append(dim->getInd());
|
||||
if (dirtyFields.count(NetField::POS) || fullSend) s.appendE(NetField::POS) .append(pos);
|
||||
if (dirtyFields.count(NetField::VEL) || fullSend) s.appendE(NetField::VEL) .append(vel);
|
||||
if (dirtyFields.count(NetField::SCALE) || fullSend) s.appendE(NetField::SCALE) .append(scale);
|
||||
|
|
|
@ -19,6 +19,7 @@ public:
|
|||
LuaEntity(game, dim), Entity(game, dim) {
|
||||
setId(id); };
|
||||
|
||||
virtual void setDim(DimensionPtr dim) override;
|
||||
virtual void setPos(glm::vec3 position) override;
|
||||
virtual void setVel(glm::vec3 vel) override;
|
||||
virtual void setRot(glm::vec3 rot) override;
|
||||
|
|
|
@ -53,6 +53,7 @@ void LocalPlayer::handleAssertion(Deserializer &d) {
|
|||
default: std::cout << "Invalid assertion." << std::endl; break;
|
||||
|
||||
case NetField::ID: setId(d.read<unsigned int>()); break;
|
||||
case NetField::DIM: setDim(world.getDimension(d.read<unsigned int>())); break;
|
||||
case NetField::POS: setPos(d.read<glm::vec3>()); break;
|
||||
case NetField::VEL: setVel(d.read<glm::vec3>()); break;
|
||||
case NetField::LOOK_YAW: setYaw(d.read<float>()); break;
|
||||
|
|
|
@ -10,11 +10,9 @@
|
|||
#include "util/net/Serializer.h"
|
||||
#include "world/dim/Dimension.h"
|
||||
|
||||
//TODO: For some reason this function being defined causes a segfault, but setPos, setVel, etc doesn't.
|
||||
|
||||
void Player::setDim(DimensionPtr dim, bool assert) {
|
||||
Entity::setDim(dim);
|
||||
// if (assert) assertField(Serializer().appendE(NetField::DIM).append(dim->getInd()).packet());
|
||||
if (assert) assertField(Serializer().appendE(NetField::DIM).append(dim->getInd()).packet());
|
||||
}
|
||||
|
||||
void Player::setPos(glm::vec3 pos, bool assert) {
|
||||
|
|
|
@ -38,6 +38,14 @@ void ServerPlayer::handleAssertion(Deserializer &d) {
|
|||
}
|
||||
}
|
||||
|
||||
void ServerPlayer::setDim(DimensionPtr dim, bool assert) {
|
||||
Player::setDim(dim, assert);
|
||||
|
||||
// Force a generation flush.
|
||||
lastPos = glm::vec3(INFINITY);
|
||||
changedMapBlocks = true;
|
||||
}
|
||||
|
||||
void ServerPlayer::setPos(glm::vec3 pos, bool assert) {
|
||||
glm::vec3 lastMapBlock = Space::MapBlock::world::fromBlock(this->pos);
|
||||
glm::vec3 newMapBlock = Space::MapBlock::world::fromBlock(pos);
|
||||
|
@ -53,4 +61,4 @@ InventoryPtr ServerPlayer::getInventory() {
|
|||
|
||||
ENetPeer* ServerPlayer::getPeer() {
|
||||
return client.peer;
|
||||
}
|
||||
}
|
|
@ -26,6 +26,7 @@ public:
|
|||
virtual void assertField(Packet packet) override;
|
||||
virtual void handleAssertion(Deserializer& d) override;
|
||||
|
||||
virtual void setDim(DimensionPtr dim, bool assert = false) override;
|
||||
virtual void setPos(glm::vec3 pos, bool assert = false) override;
|
||||
|
||||
virtual InventoryPtr getInventory() override;
|
||||
|
|
|
@ -7,8 +7,8 @@ zepha.register_block("@aurailus:crazyblocks:box", {
|
|||
model = "base:block",
|
||||
textures = {"zeus:default:oak_log_side", "zeus:default:oak_planks"},
|
||||
on_interact = function(dim, pos, player)
|
||||
print("Interacted with pandora's box")
|
||||
player:set_dimension("zeus:world:endless_desert")
|
||||
local in_desert = player:get_dimension().identifier == 'zeus:world:endless_desert'
|
||||
player:set_dimension(in_desert and "zeus:world:default" or "zeus:world:endless_desert")
|
||||
-- inventory.open_chest()
|
||||
end
|
||||
})
|
|
@ -31,6 +31,6 @@ if zepha.server then
|
|||
hw:add_stack({"zeus:default:dirt", 32})
|
||||
-- hw:add_stack({"@aurailus:crazyblocks:stacker", 1})
|
||||
-- hw:add_stack({"@aurailus:crazyblocks:inventory", 1})
|
||||
hw:add_stack({"@aurailus:crazyblocks:box", 1})
|
||||
hw:add_stack({"@aurailus:crazyblocks:box", 5})
|
||||
end)
|
||||
end
|
|
@ -9,6 +9,11 @@ zepha.register_entity("zeus:default:test", {
|
|||
})
|
||||
self.object.anims:set_anim("walk")
|
||||
self.object.anims:play()
|
||||
|
||||
zepha.after(function()
|
||||
-- local in_desert = self.object.dimension.identifier == 'zeus:world:endless_desert'
|
||||
-- player:set_dimension(in_desert and "zeus:world:default" or "zeus:world:endless_desert")
|
||||
end, 2)
|
||||
end,
|
||||
on_update = function(self, delta)
|
||||
self.object.pos = self.object.pos +
|
||||
|
|
Loading…
Reference in New Issue