*
This commit is contained in:
@@ -136,6 +136,8 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
for(const auto& [key, resource] : newOrChanged) {
|
for(const auto& [key, resource] : newOrChanged) {
|
||||||
|
result.push_back(key);
|
||||||
|
|
||||||
makeUnready(key);
|
makeUnready(key);
|
||||||
ModelObject model;
|
ModelObject model;
|
||||||
std::string type = "unknown";
|
std::string type = "unknown";
|
||||||
@@ -152,7 +154,6 @@ public:
|
|||||||
for(const PreparedModel::Cuboid& cb : pm.Cuboids) {
|
for(const PreparedModel::Cuboid& cb : pm.Cuboids) {
|
||||||
glm::vec3 min = glm::min(cb.From, cb.To), max = glm::max(cb.From, cb.To);
|
glm::vec3 min = glm::min(cb.From, cb.To), max = glm::max(cb.From, cb.To);
|
||||||
|
|
||||||
|
|
||||||
for(const auto& [face, params] : cb.Faces) {
|
for(const auto& [face, params] : cb.Faces) {
|
||||||
glm::vec2 from_uv = {params.UV[0], params.UV[1]}, to_uv = {params.UV[2], params.UV[3]};
|
glm::vec2 from_uv = {params.UV[0], params.UV[1]}, to_uv = {params.UV[2], params.UV[3]};
|
||||||
|
|
||||||
@@ -246,6 +247,7 @@ public:
|
|||||||
}
|
}
|
||||||
} catch(const std::exception& exc) {
|
} catch(const std::exception& exc) {
|
||||||
LOG.warn() << "Не удалось распарсить модель " << type << ":\n\t" << exc.what();
|
LOG.warn() << "Не удалось распарсить модель " << type << ":\n\t" << exc.what();
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
Models.insert({key, std::move(model)});
|
Models.insert({key, std::move(model)});
|
||||||
@@ -386,8 +388,42 @@ public:
|
|||||||
std::vector<AssetsNodestate> onNodestateChanges(std::vector<std::tuple<AssetsNodestate, Resource>> newOrChanged, std::vector<AssetsNodestate> lost, std::vector<AssetsModel> changedModels) {
|
std::vector<AssetsNodestate> onNodestateChanges(std::vector<std::tuple<AssetsNodestate, Resource>> newOrChanged, std::vector<AssetsNodestate> lost, std::vector<AssetsModel> changedModels) {
|
||||||
std::vector<AssetsNodestate> result;
|
std::vector<AssetsNodestate> result;
|
||||||
|
|
||||||
|
for(ResourceId lostId : lost) {
|
||||||
|
auto iterNodestate = Nodestates.find(lostId);
|
||||||
|
if(iterNodestate == Nodestates.end())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
result.push_back(lostId);
|
||||||
|
Nodestates.erase(iterNodestate);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(const auto& [key, resource] : newOrChanged) {
|
||||||
|
result.push_back(key);
|
||||||
|
|
||||||
|
PreparedNodeState nodestate;
|
||||||
|
std::string type = "unknown";
|
||||||
|
|
||||||
|
try {
|
||||||
|
std::u8string_view data((const char8_t*) resource.data(), resource.size());
|
||||||
|
if(data.starts_with((const char8_t*) "bn")) {
|
||||||
|
type = "InternalBinary";
|
||||||
|
// Компилированный nodestate внутреннего формата
|
||||||
|
nodestate = PreparedNodeState(data);
|
||||||
|
} else if(data.starts_with((const char8_t*) "{")) {
|
||||||
|
type = "InternalJson";
|
||||||
|
// nodestate в json формате
|
||||||
|
}
|
||||||
|
} catch(const std::exception& exc) {
|
||||||
|
LOG.warn() << "Не удалось распарсить nodestate " << type << ":\n\t" << exc.what();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Nodestates.insert({key, std::move(nodestate)});
|
||||||
|
}
|
||||||
|
|
||||||
|
std::sort(result.begin(), result.end());
|
||||||
|
auto eraseIter = std::unique(result.begin(), result.end());
|
||||||
|
result.erase(eraseIter, result.end());
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -402,7 +438,11 @@ public:
|
|||||||
// statesInfo - Описание состояний ноды
|
// statesInfo - Описание состояний ноды
|
||||||
// states - Текущие значения состояний ноды
|
// states - Текущие значения состояний ноды
|
||||||
std::vector<Model> getModelsForNode(AssetsNodestate id, const std::vector<StateInfo>& statesInfo, const std::unordered_map<std::string, int>& states) {
|
std::vector<Model> getModelsForNode(AssetsNodestate id, const std::vector<StateInfo>& statesInfo, const std::unordered_map<std::string, int>& states) {
|
||||||
|
auto iterNodestate = Nodestates.find(id);
|
||||||
|
if(iterNodestate == Nodestates.end())
|
||||||
|
return {};
|
||||||
|
|
||||||
|
iterNodestate->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -868,9 +868,11 @@ PreparedNodeState::PreparedNodeState(const std::string_view modid, const sol::ta
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PreparedNodeState::PreparedNodeState(const std::u8string& data) {
|
PreparedNodeState::PreparedNodeState(const std::u8string_view data) {
|
||||||
Net::LinearReader lr(data);
|
Net::LinearReader lr(data);
|
||||||
|
|
||||||
|
lr.read<uint16_t>();
|
||||||
|
|
||||||
uint16_t size;
|
uint16_t size;
|
||||||
lr >> size;
|
lr >> size;
|
||||||
|
|
||||||
|
|||||||
@@ -653,7 +653,7 @@ struct PreparedNodeState {
|
|||||||
|
|
||||||
PreparedNodeState(const std::string_view modid, const js::object& profile);
|
PreparedNodeState(const std::string_view modid, const js::object& profile);
|
||||||
PreparedNodeState(const std::string_view modid, const sol::table& profile);
|
PreparedNodeState(const std::string_view modid, const sol::table& profile);
|
||||||
PreparedNodeState(const std::u8string& data);
|
PreparedNodeState(const std::u8string_view data);
|
||||||
|
|
||||||
PreparedNodeState() = default;
|
PreparedNodeState() = default;
|
||||||
PreparedNodeState(const PreparedNodeState&) = default;
|
PreparedNodeState(const PreparedNodeState&) = default;
|
||||||
|
|||||||
@@ -180,6 +180,10 @@ protected:
|
|||||||
: Pos(pos), Input(input)
|
: Pos(pos), Input(input)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
LinearReader(const std::u8string_view input, size_t pos = 0)
|
||||||
|
: Pos(pos), Input(input)
|
||||||
|
{}
|
||||||
|
|
||||||
LinearReader(const LinearReader&) = delete;
|
LinearReader(const LinearReader&) = delete;
|
||||||
LinearReader(LinearReader&&) = delete;
|
LinearReader(LinearReader&&) = delete;
|
||||||
LinearReader& operator=(const LinearReader&) = delete;
|
LinearReader& operator=(const LinearReader&) = delete;
|
||||||
@@ -226,7 +230,7 @@ protected:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
size_t Pos = 0;
|
size_t Pos = 0;
|
||||||
const std::u8string& Input;
|
const std::u8string_view Input;
|
||||||
};
|
};
|
||||||
|
|
||||||
class SmartPacket : public Packet {
|
class SmartPacket : public Packet {
|
||||||
|
|||||||
Reference in New Issue
Block a user