Files
2026-10-02 14:40:41 -05:00

76 lines
2.4 KiB
C++

#pragma once
#include <array>
#include <cstdint>
#include <memory>
#include <string>
#include <vector>
namespace dingosdk {
enum class EditorPreviewAction { begin_move, begin_place, update, commit, cancel };
struct EditorTransform {
std::uint64_t id{};
std::array<float, 3> position{};
std::array<float, 4> rotation{0, 0, 0, 1};
float scale{1};
};
struct EditorPreviewRequest {
EditorPreviewAction action{};
std::uint64_t generation{}, revision{}, token{}, sequence{}, object{};
std::string item;
std::array<float, 3> position{};
std::array<float, 4> rotation{0, 0, 0, 1};
float scale{1};
std::vector<EditorTransform> transforms;
};
struct EditorSurfaceRequest {
std::uint64_t generation{}, id{};
std::array<float, 3> origin{}, direction{};
float grid{};
bool picking{};
};
struct EditorSelectionRequest {
std::uint64_t generation{};
std::vector<std::uint64_t> objects;
};
struct EditorSurfaceHit {
std::uint64_t generation{}, id{};
bool available{}, hit{};
std::array<float, 3> position{};
std::uint64_t entity{}, object{};
};
struct EditorAsset {
std::string key, title, category;
};
struct EditorObject {
std::uint64_t id{};
std::string item;
std::array<float, 3> position{};
std::array<float, 4> rotation{0, 0, 0, 1};
bool spawned{};
float scale{1};
};
struct EditorPasteRequest {
std::uint64_t generation{}, revision{};
std::vector<EditorObject> objects;
};
// A mod with a parks/ folder (Mods/<folder>/parks/<map>.park.json).
struct EditorParkMod {
std::string folder, title, author, version, description;
bool enabled{}, has_map{}; // has_map: it has a park for the current base map
std::vector<std::string> maps;
};
struct ParkEditorModel {
bool available{}, busy{}, failed{}, can_undo{}, can_redo{};
std::uint64_t generation{}, revision{};
std::string map, status;
std::vector<EditorObject> objects;
std::shared_ptr<const std::vector<EditorAsset>> assets;
std::vector<EditorParkMod> park_mods;
std::vector<std::string> legacy_parks; // parks saved before park mods; convertible
std::string project; // mod folder the editor saves to; empty = unsaved
bool can_load_parks{}; // false for multiplayer guests: only the host loads parks
EditorSurfaceHit surface;
std::uint64_t preview_token{};
};
} // namespace dingosdk