Skip to content

Commit 42004fd

Browse files
committed
Fixed entity scene importing in polyimport, added material file generation and material override options to entity scene import, added proper options to 3d asset import dialog in the IDE, entity files now store rotations in quaternions
1 parent ee187d0 commit 42004fd

File tree

9 files changed

+199
-53
lines changed

9 files changed

+199
-53
lines changed

Core/Contents/Include/PolySceneEntityInstance.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class SceneEntityInstance : public Entity {
5555
void clearInstance();
5656

5757
void parseObjectIntoCurve(ObjectEntry *entry, BezierCurve *curve);
58-
Entity *loadObjectEntryIntoEntity(ObjectEntry *entry, Entity *targetEntity = NULL);
58+
Entity *loadObjectEntryIntoEntity(ObjectEntry *entry, Entity *targetEntity = NULL, int entityFileVersion = 1);
5959
bool loadFromFile(const String& fileName);
6060
void applySceneMesh(ObjectEntry *entry, SceneMesh *sceneMesh);
6161

Core/Contents/Source/PolySceneEntityInstance.cpp

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ void SceneEntityInstance::parseObjectIntoCurve(ObjectEntry *entry, BezierCurve *
262262

263263
}
264264

265-
Entity *SceneEntityInstance::loadObjectEntryIntoEntity(ObjectEntry *entry, Entity *targetEntity) {
265+
Entity *SceneEntityInstance::loadObjectEntryIntoEntity(ObjectEntry *entry, Entity *targetEntity, int entityFileVersion) {
266266

267267
Entity *entity = NULL;
268268

@@ -456,7 +456,12 @@ Entity *SceneEntityInstance::loadObjectEntryIntoEntity(ObjectEntry *entry, Entit
456456

457457
entity->setScale((*entry)["sX"]->NumberVal, (*entry)["sY"]->NumberVal, (*entry)["sZ"]->NumberVal);
458458
entity->setPosition((*entry)["pX"]->NumberVal, (*entry)["pY"]->NumberVal, (*entry)["pZ"]->NumberVal);
459-
entity->setRotationEuler(Vector3((*entry)["rX"]->NumberVal, (*entry)["rY"]->NumberVal, (*entry)["rZ"]->NumberVal));
459+
460+
if(entityFileVersion > 1) {
461+
entity->setRotationQuat((*entry)["rW"]->NumberVal, (*entry)["rX"]->NumberVal, (*entry)["rY"]->NumberVal, (*entry)["rZ"]->NumberVal);
462+
} else {
463+
entity->setRotationEuler(Vector3((*entry)["rX"]->NumberVal, (*entry)["rY"]->NumberVal, (*entry)["rZ"]->NumberVal));
464+
}
460465
}
461466

462467
if((*entry)["id"]->stringVal != "") {
@@ -487,7 +492,7 @@ Entity *SceneEntityInstance::loadObjectEntryIntoEntity(ObjectEntry *entry, Entit
487492
if(children) {
488493
for(int i=0; i < children->length; i++) {
489494
ObjectEntry *childEntry = ((*children))[i];
490-
ScreenEntity *childEntity = loadObjectEntryIntoEntity(childEntry);
495+
ScreenEntity *childEntity = loadObjectEntryIntoEntity(childEntry, NULL, entityFileVersion);
491496
entity->addChild(childEntity);
492497
}
493498
}
@@ -529,6 +534,13 @@ bool SceneEntityInstance::loadFromFile(const String& fileName) {
529534
}
530535
}
531536

537+
int entityFileVersion = 1;
538+
539+
ObjectEntry *versionObject = loadObject.root["version"];
540+
if(versionObject) {
541+
entityFileVersion = versionObject->intVal;
542+
}
543+
532544
ObjectEntry *settings = loadObject.root["settings"];
533545
if(settings) {
534546
ObjectEntry *matFiles = (*settings)["matFiles"];
@@ -552,7 +564,7 @@ bool SceneEntityInstance::loadFromFile(const String& fileName) {
552564

553565
ObjectEntry *root = loadObject.root["root"];
554566
if(root) {
555-
loadObjectEntryIntoEntity(root, this);
567+
loadObjectEntryIntoEntity(root, this, entityFileVersion);
556568
}
557569

558570
return true;

IDE/Contents/Include/PolycodeToolLauncher.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class PolycodeToolLauncher {
5353
static void openExternalEditor(String app, String file, String inFolder);
5454
static String generateTempPath(PolycodeProject *project);
5555
static void buildProject(PolycodeProject *project, String destinationPath, bool compileScripts);
56-
static String importAssets(String sourceFile, String inFolder, bool addMeshes, String prefix, bool swapZY, bool generateNormals, bool generateTangents, bool listOnly,bool writeNormals, bool writeTangents, bool writeColors, bool writeBoneWeights, bool writeUVs, bool writeSecondaryUVs, bool exportScene);
56+
static String importAssets(String sourceFile, String inFolder, bool addMeshes, String prefix, bool swapZY, bool generateNormals, bool generateTangents, bool listOnly,bool writeNormals, bool writeTangents, bool writeColors, bool writeBoneWeights, bool writeUVs, bool writeSecondaryUVs, bool exportScene, bool generateMaterialFile, bool overrideMaterials, String materialOverrideName, bool specifyBaseAssetPath, String baseAssetPath);
5757

5858
static void runPolyapp(String polyappPath);
5959
};

IDE/Contents/Include/ToolWindows.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ class AssetImporterWindow : public UIWindow {
9393
void addFile(String fileName);
9494
void setFilesToImport(String files);
9595

96-
void setSourceFileAndTargetFolder(String file, String folder);
96+
void setSourceFileAndTargetFolder(String file, String folder, String projectRelativeFolder);
9797
void refreshPreview();
9898

9999
void handleEvent(Event *event);
@@ -102,7 +102,8 @@ class AssetImporterWindow : public UIWindow {
102102

103103
String file;
104104
String folder;
105-
105+
String projectRelativeFolder;
106+
106107
UIButton *cancelButton;
107108
UIButton *okButton;
108109
std::vector<UILabel*> fileLabels;
@@ -122,6 +123,10 @@ class AssetImporterWindow : public UIWindow {
122123
UICheckBox *exportSecondaryUVs;
123124
UICheckBox *exportScene;
124125

126+
UICheckBox *generateMatFile;
127+
UICheckBox *overrideMaterial;
128+
UITextInput *overrideMaterialInput;
129+
125130
Entity *filesAnchor;
126131
UIScrollContainer *filesScroller;
127132

IDE/Contents/Source/PolycodeEntityEditor.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1859,9 +1859,10 @@ void PolycodeEntityEditor::saveEntityToObjectEntry(Entity *entity, ObjectEntry *
18591859
entry->addChild("sY", entity->getScale().y);
18601860
entry->addChild("sZ", entity->getScale().z);
18611861

1862-
entry->addChild("rX", entity->getPitch());
1863-
entry->addChild("rY", entity->getYaw());
1864-
entry->addChild("rZ", entity->getRoll());
1862+
entry->addChild("rX", entity->getRotationQuat().x);
1863+
entry->addChild("rY", entity->getRotationQuat().y);
1864+
entry->addChild("rZ", entity->getRotationQuat().z);
1865+
entry->addChild("rW", entity->getRotationQuat().w);
18651866

18661867
entry->addChild("pX", entity->getPosition().x);
18671868
entry->addChild("pY", entity->getPosition().y);
@@ -1980,6 +1981,8 @@ void PolycodeEntityEditor::saveFile() {
19801981
}
19811982

19821983
saveObject.root.name = "entity";
1984+
saveObject.root.addChild("version", 2);
1985+
19831986
ObjectEntry *children = saveObject.root.addChild("root");
19841987
saveEntityToObjectEntry(mainView->getObjectRoot(), children);
19851988

IDE/Contents/Source/PolycodeIDEApp.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -570,7 +570,7 @@ void PolycodeIDEApp::importAssets() {
570570

571571
std::vector<String> files = core->openFilePicker(extensions, false);
572572
if(files.size()) {
573-
frame->assetImporterWindow->setSourceFileAndTargetFolder(files[0], projectManager->activeFolder);
573+
frame->assetImporterWindow->setSourceFileAndTargetFolder(files[0], projectManager->activeFolder, projectManager->activeFolder.replace(projectManager->getActiveProject()->getRootFolder(), ""));
574574
frame->showModal(frame->assetImporterWindow);
575575
frame->assetImporterWindow->addEventListener(this, UIEvent::OK_EVENT);
576576
}

IDE/Contents/Source/PolycodeToolLauncher.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ void PolycodeToolLauncher::buildProject(PolycodeProject *project, String destina
113113

114114
}
115115

116-
String PolycodeToolLauncher::importAssets(String sourceFile, String inFolder, bool addMeshes, String prefix, bool swapZY, bool generateNormals, bool generateTangents, bool listOnly, bool writeNormals, bool writeTangents, bool writeColors, bool writeBoneWeights, bool writeUVs, bool writeSecondaryUVs, bool exportScene) {
116+
String PolycodeToolLauncher::importAssets(String sourceFile, String inFolder, bool addMeshes, String prefix, bool swapZY, bool generateNormals, bool generateTangents, bool listOnly, bool writeNormals, bool writeTangents, bool writeColors, bool writeBoneWeights, bool writeUVs, bool writeSecondaryUVs, bool exportScene, bool generateMaterialFile, bool overrideMaterials, String materialOverrideName, bool specifyBaseAssetPath, String baseAssetPath) {
117117

118118
String ret;
119119
String polycodeBasePath = CoreServices::getInstance()->getCore()->getDefaultWorkingDirectory();
@@ -154,9 +154,18 @@ String PolycodeToolLauncher::importAssets(String sourceFile, String inFolder, bo
154154
}
155155
if(exportScene) {
156156
args = "-e "+args;
157+
}
158+
if(generateMaterialFile) {
159+
args = "-f "+args;
160+
}
161+
if(overrideMaterials) {
162+
args = "-o \""+materialOverrideName+"\" "+args;
163+
}
164+
if(specifyBaseAssetPath) {
165+
args = "-x \""+baseAssetPath+"\" "+args;
157166
}
158167
if(prefix != "") {
159-
args = "-p "+prefix+" "+args;
168+
args = "-p \""+prefix+"\" "+args;
160169
}
161170

162171

IDE/Contents/Source/ToolWindows.cpp

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ YesNoCancelPopup::~YesNoCancelPopup() {
197197

198198
}
199199

200-
AssetImporterWindow::AssetImporterWindow() : UIWindow("3D Asset Importer", 650, 280) {
200+
AssetImporterWindow::AssetImporterWindow() : UIWindow("3D Asset Importer", 650, 330) {
201201
filesToImportLabel = new UILabel("Files that will be imported:", 12);
202202
addChild(filesToImportLabel);
203203
filesToImportLabel->setPosition(padding, 35);
@@ -211,12 +211,12 @@ AssetImporterWindow::AssetImporterWindow() : UIWindow("3D Asset Importer", 650,
211211
cancelButton = new UIButton(L"Cancel", 100);
212212
cancelButton->addEventListener(this, UIEvent::CLICK_EVENT);
213213
addChild(cancelButton);
214-
cancelButton->setPosition(padding+650-100-100-10-10, 265);
214+
cancelButton->setPosition(padding+650-100-100-10-10, 315);
215215

216216
okButton = new UIButton(L"OK", 100);
217217
okButton->addEventListener(this, UIEvent::CLICK_EVENT);
218218
addChild(okButton);
219-
okButton->setPosition(padding+650-100-10, 265);
219+
okButton->setPosition(padding+650-100-10, 315);
220220

221221
closeOnEscape = true;
222222

@@ -272,8 +272,21 @@ AssetImporterWindow::AssetImporterWindow() : UIWindow("3D Asset Importer", 650,
272272
addChild(exportSecondaryUVs);
273273

274274
exportScene = new UICheckBox("Export Entity file", false);
275-
exportScene->setPosition(520, 210);
275+
exportScene->setPosition(290, 240);
276276
addChild(exportScene);
277+
278+
generateMatFile = new UICheckBox("Generate material file", false);
279+
generateMatFile->setPosition(450, 240);
280+
addChild(generateMatFile);
281+
282+
overrideMaterial = new UICheckBox("Override materials:", false);
283+
overrideMaterial->setPosition(290, 270);
284+
addChild(overrideMaterial);
285+
286+
overrideMaterialInput = new UITextInput(false, 200, 16);
287+
overrideMaterialInput->setPosition(450, 265);
288+
addChild(overrideMaterialInput);
289+
overrideMaterialInput->setText("Default");
277290

278291
}
279292

@@ -287,7 +300,7 @@ void AssetImporterWindow::handleEvent(Event *event) {
287300
if(usePrefixCheckbox->isChecked() && prefixInput->getText() != "") {
288301
prefixString = prefixInput->getText().replace(" ", "_");
289302
}
290-
PolycodeToolLauncher::importAssets(file, folder, addMeshesCheckbox->isChecked(), prefixString, swapZYAxisCheckbox->isChecked(), generateNormalsCheckbox->isChecked(), generateTangensCheckbox->isChecked(), false, exportNormals->isChecked(), exportTangents->isChecked(), exportColors->isChecked(), exportBoneWeights->isChecked(), exportUVs->isChecked(), exportSecondaryUVs->isChecked(), exportScene->isChecked());
303+
PolycodeToolLauncher::importAssets(file, folder, addMeshesCheckbox->isChecked(), prefixString, swapZYAxisCheckbox->isChecked(), generateNormalsCheckbox->isChecked(), generateTangensCheckbox->isChecked(), false, exportNormals->isChecked(), exportTangents->isChecked(), exportColors->isChecked(), exportBoneWeights->isChecked(), exportUVs->isChecked(), exportSecondaryUVs->isChecked(), exportScene->isChecked(), generateMatFile->isChecked(), overrideMaterial->isChecked(), overrideMaterialInput->getText(), true, projectRelativeFolder);
291304

292305
dispatchEvent(new UIEvent(), UIEvent::OK_EVENT);
293306
dispatchEvent(new UIEvent(), UIEvent::CLOSE_EVENT);
@@ -322,9 +335,10 @@ void AssetImporterWindow::addFile(String fileName) {
322335
fileLabels.push_back(fileLabel);
323336
}
324337

325-
void AssetImporterWindow::setSourceFileAndTargetFolder(String file, String folder) {
338+
void AssetImporterWindow::setSourceFileAndTargetFolder(String file, String folder, String projectRelativeFolder) {
326339
this->file = file;
327340
this->folder = folder;
341+
this->projectRelativeFolder = projectRelativeFolder;
328342
refreshPreview();
329343
}
330344

@@ -333,7 +347,7 @@ void AssetImporterWindow::refreshPreview() {
333347
if(usePrefixCheckbox->isChecked() && prefixInput->getText() != "") {
334348
prefixString = prefixInput->getText().replace(" ", "_");
335349
}
336-
String fileList = PolycodeToolLauncher::importAssets(file, folder, addMeshesCheckbox->isChecked(), prefixString, swapZYAxisCheckbox->isChecked(), generateNormalsCheckbox->isChecked(), generateTangensCheckbox->isChecked(), true, false, false, false, false, false, false, false);
350+
String fileList = PolycodeToolLauncher::importAssets(file, folder, addMeshesCheckbox->isChecked(), prefixString, swapZYAxisCheckbox->isChecked(), generateNormalsCheckbox->isChecked(), generateTangensCheckbox->isChecked(), true, false, false, false, false, false, false, false, false, false, "", false, "");
337351
setFilesToImport(fileList);
338352
}
339353

0 commit comments

Comments
 (0)