Added editor functionality to edit bound boxes
This commit is contained in:
1 parent
22b0e1992f
commit
4b868f47c2
12 files changed
+779
-307
No files matched your search
@@ -93,10 +93,23 @@ namespace ZL {
|
||||
InteractiveObjectData data;
|
||||
data.base = parseGameObjectData(item);
|
||||
data.interactionRadius = item.value("interactionRadius", 2.0f);
|
||||
data.approachRadius = item.value("approachRadius", data.interactionRadius);
|
||||
data.activateFunctionName = item.value("activateFunction", "");
|
||||
data.pivotX = item.value("pivotX", 0.0f);
|
||||
data.pivotY = item.value("pivotY", 0.0f);
|
||||
data.pivotZ = item.value("pivotZ", 0.0f);
|
||||
data.boundsMinX = item.value("boundsMinX", 0.0f);
|
||||
data.boundsMinY = item.value("boundsMinY", 0.0f);
|
||||
data.boundsMinZ = item.value("boundsMinZ", 0.0f);
|
||||
data.boundsMaxX = item.value("boundsMaxX", 0.0f);
|
||||
data.boundsMaxY = item.value("boundsMaxY", 0.0f);
|
||||
data.boundsMaxZ = item.value("boundsMaxZ", 0.0f);
|
||||
if (item.contains("interactionPositionX")) {
|
||||
data.hasInteractionPosition = true;
|
||||
data.interactionPositionX = item.value("interactionPositionX", 0.0f);
|
||||
data.interactionPositionY = item.value("interactionPositionY", 0.0f);
|
||||
data.interactionPositionZ = item.value("interactionPositionZ", 0.0f);
|
||||
}
|
||||
if (!data.base.meshPath.empty())
|
||||
objects.push_back(std::move(data));
|
||||
}
|
||||
@@ -182,8 +195,26 @@ namespace ZL {
|
||||
InteractiveObject intObj;
|
||||
intObj.loadedObject = buildLoadedObject(data.base, renderer, zipPath);
|
||||
intObj.interactionRadius = data.interactionRadius;
|
||||
intObj.approachRadius = data.approachRadius;
|
||||
intObj.activateFunctionName = data.activateFunctionName;
|
||||
intObj.pivot = Eigen::Vector3f(data.pivotX, data.pivotY, data.pivotZ);
|
||||
intObj.boundsMin = Eigen::Vector3f(data.boundsMinX, data.boundsMinY, data.boundsMinZ);
|
||||
intObj.boundsMax = Eigen::Vector3f(data.boundsMaxX, data.boundsMaxY, data.boundsMaxZ);
|
||||
intObj.hasInteractionPosition = data.hasInteractionPosition;
|
||||
if (data.hasInteractionPosition)
|
||||
intObj.interactionPosition = Eigen::Vector3f(data.interactionPositionX, data.interactionPositionY, data.interactionPositionZ);
|
||||
|
||||
// Store source data needed for serialization.
|
||||
intObj.loadedObject.texturePath = data.base.texturePath;
|
||||
intObj.loadedObject.textureDarkandsPath = data.base.textureDarkandsPath;
|
||||
intObj.loadedObject.meshPath = data.base.meshPath;
|
||||
intObj.loadedObject.meshRotationX = data.base.rotationX;
|
||||
intObj.loadedObject.meshRotationY = data.base.rotationY;
|
||||
intObj.loadedObject.meshRotationZ = data.base.rotationZ;
|
||||
intObj.loadedObject.meshScale = data.base.scale;
|
||||
intObj.jsonPositionX = data.base.positionX;
|
||||
intObj.jsonPositionY = data.base.positionY;
|
||||
intObj.jsonPositionZ = data.base.positionZ;
|
||||
|
||||
intObj.loadedObject.mesh.RefreshVBO();
|
||||
|
||||
|
||||
@@ -29,10 +29,15 @@ namespace ZL {
|
||||
struct InteractiveObjectData {
|
||||
GameObjectData base;
|
||||
float interactionRadius = 2.0f;
|
||||
float approachRadius = 2.0f;
|
||||
std::string activateFunctionName;
|
||||
float pivotX = 0.0f;
|
||||
float pivotY = 0.0f;
|
||||
float pivotZ = 0.0f;
|
||||
float boundsMinX = 0.0f, boundsMinY = 0.0f, boundsMinZ = 0.0f;
|
||||
float boundsMaxX = 0.0f, boundsMaxY = 0.0f, boundsMaxZ = 0.0f;
|
||||
bool hasInteractionPosition = false;
|
||||
float interactionPositionX = 0.0f, interactionPositionY = 0.0f, interactionPositionZ = 0.0f;
|
||||
};
|
||||
|
||||
struct NpcData {
|
||||
|
||||
@@ -16,6 +16,12 @@ namespace ZL {
|
||||
std::shared_ptr<Texture> textureDarklands;
|
||||
VertexRenderStruct mesh;
|
||||
std::string name;
|
||||
// Source paths and baked transform — populated by GameObjectLoader, used for serialization.
|
||||
std::string texturePath;
|
||||
std::string textureDarkandsPath;
|
||||
std::string meshPath;
|
||||
float meshRotationX = 0.f, meshRotationY = 0.f, meshRotationZ = 0.f;
|
||||
float meshScale = 1.f;
|
||||
};
|
||||
|
||||
struct InteractiveObject {
|
||||
@@ -26,6 +32,14 @@ namespace ZL {
|
||||
float scale = 1.0f; // uniform scale
|
||||
float alpha = 1.0f; // opacity: 1=opaque, 0=fully transparent
|
||||
float interactionRadius;
|
||||
float approachRadius = 2.0f;
|
||||
Eigen::Vector3f boundsMin = Eigen::Vector3f::Zero();
|
||||
Eigen::Vector3f boundsMax = Eigen::Vector3f::Zero();
|
||||
Eigen::Vector3f interactionPosition = Eigen::Vector3f::Zero();
|
||||
// Original JSON position before mesh-centering offset applied at load time — needed for serialization.
|
||||
float jsonPositionX = 0.f, jsonPositionY = 0.f, jsonPositionZ = 0.f;
|
||||
|
||||
bool hasInteractionPosition = false;
|
||||
bool isActive = true;
|
||||
bool isAnimating = false; // true while a timed animation is running
|
||||
std::string activateFunctionName;
|
||||
|
||||
Reference in new issue
Block a user