Skip to content

Commit 110ca74

Browse files
committed
Added bounding box visualization to entity editor, added bounding box field to entity prop sheet, changed sprite editor zoom to a slider instead of a drop down
1 parent 15c00bb commit 110ca74

File tree

7 files changed

+52
-31
lines changed

7 files changed

+52
-31
lines changed

Core/Contents/Source/PolyEntity.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ Entity *Entity::Clone(bool deepClone, bool ignoreEditorOnly) const {
105105
void Entity::applyClone(Entity *clone, bool deepClone, bool ignoreEditorOnly) const {
106106
clone->ownsChildren = ownsChildren;
107107
clone->setPosition(position);
108-
clone->setRotationEuler(rotation);
108+
clone->setRotationByQuaternion(rotationQuat);
109109
clone->setScale(scale);
110110
clone->color = color;
111111
clone->custEntityType = custEntityType;

IDE/Contents/Include/PolycodeEntityEditor.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,8 @@ class EntityEditorMainView : public UIElement {
192192

193193
void didPlaceEntity(Entity *entity);
194194

195+
void setBBox();
196+
195197
Entity *getObjectRoot();
196198
void setObjectRoot(SceneEntityInstance *entity);
197199

@@ -226,6 +228,8 @@ class EntityEditorMainView : public UIElement {
226228
SceneLight *customLight1;
227229
SceneLight *customLight2;
228230

231+
ScenePrimitive *bBoxVis;
232+
229233
Entity *objectRootBase;
230234
Entity *iconBase;
231235
SceneEntityInstance *objectRootInstance;

IDE/Contents/Include/PolycodeProps.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,7 @@ class EntitySheet : public PropSheet {
521521
StringProp *tagProp;
522522
ColorProp *colorProp;
523523
ComboProp *blendingProp;
524+
Vector3Prop *bBoxProp;
524525
};
525526

526527
class ShaderPassesSheet : public PropSheet {

IDE/Contents/Include/PolycodeSpriteEditor.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ class SpritePreviewSheet : public PropSheet {
6565
void setSprite(SceneSprite *sprite);
6666

6767
protected:
68-
ComboProp *zoomProp;
68+
SliderProp *zoomProp;
6969
SpritePreviewProp *previewProp;
7070
};
7171

IDE/Contents/Source/PolycodeEntityEditor.cpp

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -325,8 +325,8 @@ EntityEditorMainView::EntityEditorMainView(PolycodeEditor *editor) {
325325
this->editor = editor;
326326
mainScene = new Scene(Scene::SCENE_3D, true);
327327

328-
// mainScene->getDefaultCamera()->frustumCulling = false;
329-
// mainScene->doVisibilityChecking(false);
328+
mainScene->getDefaultCamera()->frustumCulling = false;
329+
mainScene->doVisibilityChecking(false);
330330

331331
renderTexture = new SceneRenderTexture(mainScene, mainScene->getDefaultCamera(), 512, 512);
332332
mainScene->clearColor.setColor(0.2, 0.2, 0.2, 1.0);
@@ -383,7 +383,7 @@ EntityEditorMainView::EntityEditorMainView(PolycodeEditor *editor) {
383383

384384
mainScene->getDefaultCamera()->setPosition(10, 10, 10);
385385
mainScene->getDefaultCamera( )->lookAt(Vector3());
386-
mainScene->getDefaultCamera()->setClippingPlanes(0.01, 10000);
386+
mainScene->getDefaultCamera()->setClippingPlanes(0.01, 1000);
387387

388388
grid = new EditorGrid();
389389
grid->addEventListener(this, Event::CHANGE_EVENT);
@@ -482,6 +482,12 @@ EntityEditorMainView::EntityEditorMainView(PolycodeEditor *editor) {
482482
iconVisibilitySelector->setPosition(230, 2);
483483
iconVisibilitySelector->addEventListener(this, UIEvent::SELECT_EVENT);
484484

485+
bBoxVis = new ScenePrimitive(ScenePrimitive::TYPE_BOX, 1.0, 1.0, 1.0);
486+
bBoxVis->overlayWireframe = true;
487+
bBoxVis->wireFrameColor = Color(0.3, 0.5, 1.0, 0.5);
488+
bBoxVis->color.a = 0.0;
489+
bBoxVis->setBlendingMode(Renderer::BLEND_MODE_NORMAL);
490+
mainScene->addChild(bBoxVis);
485491

486492
editorMode = EDITOR_MODE_3D;
487493

@@ -506,6 +512,7 @@ void EntityEditorMainView::doAction(String actionName, PolycodeEditorActionData
506512
}
507513
}
508514
transformGizmo->setTransformSelection(selectedEntities);
515+
setBBox();
509516
} else if(actionName == "scale") {
510517
for(int i=0; i < selectedEntities.size(); i++) {
511518
if(i < sceneData->entries.size()) {
@@ -650,6 +657,8 @@ void EntityEditorMainView::Update() {
650657
icons[i]->rebuildTransformMatrix();
651658
icons[i]->recalculateAABBAllChildren();
652659
}
660+
661+
setBBox();
653662
}
654663

655664
void EntityEditorMainView::createIcon(Entity *entity, String iconFile) {
@@ -959,6 +968,7 @@ void EntityEditorMainView::deleteSelected(bool doAction) {
959968

960969
selectedEntities.clear();
961970
transformGizmo->setTransformSelection(selectedEntities);
971+
setBBox();
962972
dispatchEvent(new Event(), Event::CHANGE_EVENT);
963973
}
964974

@@ -1274,6 +1284,7 @@ void EntityEditorMainView::selectAll(bool doAction) {
12741284
}
12751285
}
12761286
transformGizmo->setTransformSelection(selectedEntities);
1287+
setBBox();
12771288
dispatchEvent(new Event(), Event::CHANGE_EVENT);
12781289
}
12791290

@@ -1295,6 +1306,7 @@ void EntityEditorMainView::selectNone(bool doAction) {
12951306
}
12961307
selectedEntities.clear();
12971308
transformGizmo->setTransformSelection(selectedEntities);
1309+
setBBox();
12981310
dispatchEvent(new Event(), Event::CHANGE_EVENT);
12991311
}
13001312

@@ -1406,11 +1418,30 @@ void EntityEditorMainView::selectEntity(Entity *targetEntity, bool addToSelectio
14061418
beforeData = NULL;
14071419
}
14081420

1421+
1422+
14091423
transformGizmo->setTransformSelection(selectedEntities);
1424+
setBBox();
14101425
dispatchEvent(new Event(), Event::CHANGE_EVENT);
14111426

14121427
}
14131428

1429+
void EntityEditorMainView::setBBox() {
1430+
if(selectedEntities.size() > 0) {
1431+
bBoxVis->visible = true;
1432+
1433+
Entity *targetEntity = selectedEntities[0];
1434+
bBoxVis->setPrimitiveOptions(ScenePrimitive::TYPE_BOX, targetEntity->getLocalBoundingBox().x, targetEntity->getLocalBoundingBox().y, targetEntity->getLocalBoundingBox().z);
1435+
1436+
Matrix4 mat = targetEntity->getConcatenatedMatrix();
1437+
bBoxVis->setTransformByMatrixPure(mat);
1438+
bBoxVis->dirtyMatrix(false);
1439+
1440+
} else {
1441+
bBoxVis->visible = false;
1442+
}
1443+
}
1444+
14141445
Entity *EntityEditorMainView::getObjectRoot() {
14151446
return sceneObjectRoot;
14161447
}

IDE/Contents/Source/PolycodeProps.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2923,7 +2923,10 @@ EntitySheet::EntitySheet() : PropSheet("ENTITY", "entity"){
29232923

29242924
blendingProp = new ComboProp("Blend mode");
29252925
addProp(blendingProp);
2926-
2926+
2927+
bBoxProp = new Vector3Prop("Bounding box");
2928+
addProp(bBoxProp);
2929+
29272930
blendingProp->comboEntry->addComboItem("None");
29282931
blendingProp->comboEntry->addComboItem("Normal");
29292932
blendingProp->comboEntry->addComboItem("Lighten");
@@ -2952,6 +2955,8 @@ void EntitySheet::handleEvent(Event *event) {
29522955
entity->color = colorProp->get();
29532956
}else if(event->getDispatcher() == idProp && event->getEventCode() == Event::CHANGE_EVENT) {
29542957
entity->id = idProp->get();
2958+
}else if(event->getDispatcher() == bBoxProp && event->getEventCode() == Event::CHANGE_EVENT) {
2959+
entity->setLocalBoundingBox(bBoxProp->get());
29552960
} else if(event->getDispatcher() == tagProp && event->getEventCode() == Event::CHANGE_EVENT) {
29562961

29572962
String tagString = "";
@@ -2991,6 +2996,8 @@ void EntitySheet::setEntity(Entity *entity) {
29912996
colorProp->set(entity->color);
29922997
blendingProp->set(entity->blendingMode);
29932998

2999+
bBoxProp->set(entity->getLocalBoundingBox());
3000+
29943001
enabled = true;
29953002
} else {
29963003
enabled = false;

IDE/Contents/Source/PolycodeSpriteEditor.cpp

Lines changed: 3 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -114,41 +114,19 @@ SpriteAnimationEntry::~SpriteAnimationEntry() {
114114
}
115115

116116
SpritePreviewSheet::SpritePreviewSheet() : PropSheet("SPRITE PREVIEW", ""){
117-
zoomProp = new ComboProp("Zoom");
117+
zoomProp = new SliderProp("Zoom", 0.1, 16);
118118
addProp(zoomProp);
119119
zoomProp->addEventListener(this, Event::CHANGE_EVENT);
120120

121-
zoomProp->comboEntry->addComboItem("No Zoom");
122-
zoomProp->comboEntry->addComboItem("Zoom 2x");
123-
zoomProp->comboEntry->addComboItem("Zoom 4x");
124-
zoomProp->comboEntry->addComboItem("Zoom 8x");
125-
zoomProp->comboEntry->addComboItem("Zoom 16x");
126-
127-
zoomProp->set(0);
121+
zoomProp->set(1.0);
128122

129123
previewProp = new SpritePreviewProp();
130124
addProp(previewProp);
131125
}
132126

133127
void SpritePreviewSheet::handleEvent(Event *event) {
134128
if(event->getDispatcher() == zoomProp) {
135-
switch (zoomProp->get()) {
136-
case 1:
137-
previewProp->setSpriteScale(2.0);
138-
break;
139-
case 2:
140-
previewProp->setSpriteScale(4.0);
141-
break;
142-
case 3:
143-
previewProp->setSpriteScale(8.0);
144-
break;
145-
case 4:
146-
previewProp->setSpriteScale(16.0);
147-
break;
148-
default:
149-
previewProp->setSpriteScale(1.0);
150-
break;
151-
}
129+
previewProp->setSpriteScale(zoomProp->get());
152130

153131
if(previewProp->previewSprite) {
154132
propHeight = (previewProp->previewSprite->getHeight() * previewProp->previewSprite->getScale().y) + zoomProp->getHeight()+ 50;

0 commit comments

Comments
 (0)