Search in sources :

Example 16 with Matrix4x4

use of net.drewke.tdme.math.Matrix4x4 in project tdme by andreasdr.

the class PointParticleEmitter method fromTransformations.

/*
	 * (non-Javadoc)
	 * @see net.drewke.tdme.engine.subsystems.particlesystem.ParticleEmitter#fromTransformations(net.drewke.tdme.engine.Transformations)
	 */
public void fromTransformations(Transformations transformations) {
    //
    Matrix4x4 transformationsMatrix = transformations.getTransformationsMatrix();
    // apply translations
    transformationsMatrix.multiply(position, positionTransformed);
}
Also used : Matrix4x4(net.drewke.tdme.math.Matrix4x4)

Example 17 with Matrix4x4

use of net.drewke.tdme.math.Matrix4x4 in project tdme by andreasdr.

the class Object3DBase method createTransformationsMatrices.

/**
	 * Creates all groups transformation matrices
	 * @param groups
	 * @depth
	 */
protected void createTransformationsMatrices(HashMap<String, Group> groups) {
    // iterate through groups
    for (Group group : groups.getValuesIterator()) {
        // put and associate transformation matrices with group
        transformationsMatrices.put(group.getId(), new Matrix4x4().identity());
        // calculate sub groups
        HashMap<String, Group> subGroups = group.getSubGroups();
        if (subGroups.size() > 0) {
            createTransformationsMatrices(subGroups);
        }
    }
}
Also used : Group(net.drewke.tdme.engine.model.Group) Matrix4x4(net.drewke.tdme.math.Matrix4x4)

Example 18 with Matrix4x4

use of net.drewke.tdme.math.Matrix4x4 in project tdme by andreasdr.

the class ParticleSystemScreenController method setParticleSystemEmitter.

/**
	 * Set particle system emitter
	 */
public void setParticleSystemEmitter() {
    particleSystemEmitter.getActiveConditions().removeAll();
    LevelEditorEntityParticleSystem particleSystem = view.getEntity().getParticleSystem();
    switch(particleSystem.getEmitter()) {
        case NONE:
            {
                particleSystemEmitters.getController().setValue(value.set(EMITTER_NONE));
                particleSystemEmitter.getActiveConditions().add(EMITTER_NONE);
                break;
            }
        case POINT_PARTICLE_EMITTER:
            {
                particleSystemEmitters.getController().setValue(value.set(EMITTER_POINTPARTICLEEMITTER));
                particleSystemEmitter.getActiveConditions().add(EMITTER_POINTPARTICLEEMITTER);
                PointParticleEmitter emitter = particleSystem.getPointParticleEmitter();
                ppeCount.getController().setValue(value.set(emitter.getCount()));
                ppeLifeTime.getController().setValue(value.set((int) emitter.getLifeTime()));
                ppeLifeTimeRnd.getController().setValue(value.set((int) emitter.getLifeTimeRnd()));
                ppeMass.getController().setValue(value.set(emitter.getMass(), 4));
                ppeMassRnd.getController().setValue(value.set(emitter.getMassRnd(), 4));
                ppePosition.getController().setValue(value.set(Tools.formatVector3(emitter.getPosition())));
                ppeVelocity.getController().setValue(value.set(Tools.formatVector3(emitter.getVelocity())));
                ppeVelocityRnd.getController().setValue(value.set(Tools.formatVector3(emitter.getVelocityRnd())));
                ppeColorStart.getController().setValue(value.set(Tools.formatColor4(emitter.getColorStart())));
                ppeColorEnd.getController().setValue(value.set(Tools.formatColor4(emitter.getColorEnd())));
                break;
            }
        case BOUNDINGBOX_PARTICLE_EMITTER:
            {
                particleSystemEmitters.getController().setValue(value.set(EMITTER_BOUNDINGBOXPARTICLEEMITTER));
                particleSystemEmitter.getActiveConditions().add(EMITTER_BOUNDINGBOXPARTICLEEMITTER);
                BoundingBoxParticleEmitter emitter = particleSystem.getBoundingBoxParticleEmitters();
                bbpeCount.getController().setValue(value.set(emitter.getCount()));
                bbpeLifeTime.getController().setValue(value.set((int) emitter.getLifeTime()));
                bbpeLifeTimeRnd.getController().setValue(value.set((int) emitter.getLifeTimeRnd()));
                bbpeMass.getController().setValue(value.set(emitter.getMass(), 4));
                bbpeMassRnd.getController().setValue(value.set(emitter.getMassRnd(), 4));
                bbpeVelocity.getController().setValue(value.set(Tools.formatVector3(emitter.getVelocity())));
                bbpeVelocityRnd.getController().setValue(value.set(Tools.formatVector3(emitter.getVelocityRnd())));
                bbpeColorStart.getController().setValue(value.set(Tools.formatColor4(emitter.getColorStart())));
                bbpeColorEnd.getController().setValue(value.set(Tools.formatColor4(emitter.getColorEnd())));
                bbpeObbCenter.getController().setValue(value.set(Tools.formatVector3(emitter.getObbCenter())));
                bbpeObbHalfextension.getController().setValue(value.set(Tools.formatVector3(emitter.getObbHalfextension())));
                // set up rotation matrix to extract euler angles
                Vector3 rotation = new Vector3();
                Matrix4x4 rotationMatrix = new Matrix4x4().identity();
                rotationMatrix.setAxes(emitter.getObbAxis0(), emitter.getObbAxis1(), emitter.getObbAxis2());
                rotationMatrix.computeEulerAngles(rotation);
                // set up rotation
                bbpeObbRotationX.getController().setValue(value.set(Tools.formatFloat(rotation.getX())));
                bbpeObbRotationY.getController().setValue(value.set(Tools.formatFloat(rotation.getY())));
                bbpeObbRotationZ.getController().setValue(value.set(Tools.formatFloat(rotation.getZ())));
                break;
            }
        case CIRCLE_PARTICLE_EMITTER:
            {
                particleSystemEmitters.getController().setValue(value.set(EMITTER_CIRCLEPARTICLEEMITTER));
                particleSystemEmitter.getActiveConditions().add(EMITTER_CIRCLEPARTICLEEMITTER);
                CircleParticleEmitter emitter = particleSystem.getCircleParticleEmitter();
                cpeCount.getController().setValue(value.set(emitter.getCount()));
                cpeLifeTime.getController().setValue(value.set((int) emitter.getLifeTime()));
                cpeLifeTimeRnd.getController().setValue(value.set((int) emitter.getLifeTimeRnd()));
                cpeMass.getController().setValue(value.set(emitter.getMass(), 4));
                cpeMassRnd.getController().setValue(value.set(emitter.getMassRnd(), 4));
                cpeVelocity.getController().setValue(value.set(Tools.formatVector3(emitter.getVelocity())));
                cpeVelocityRnd.getController().setValue(value.set(Tools.formatVector3(emitter.getVelocityRnd())));
                cpeColorStart.getController().setValue(value.set(Tools.formatColor4(emitter.getColorStart())));
                cpeColorEnd.getController().setValue(value.set(Tools.formatColor4(emitter.getColorEnd())));
                cpeCenter.getController().setValue(value.set(Tools.formatVector3(emitter.getCenter())));
                cpeRadius.getController().setValue(value.set(emitter.getRadius(), 4));
                // set up rotation matrix to extract euler angles
                Vector3 rotation = new Vector3();
                Matrix4x4 rotationMatrix = new Matrix4x4().identity();
                rotationMatrix.setAxes(emitter.getAxis0(), Vector3.computeCrossProduct(emitter.getAxis0(), emitter.getAxis1()), emitter.getAxis1());
                rotationMatrix.computeEulerAngles(rotation);
                // set up rotation
                cpeRotationX.getController().setValue(value.set(Tools.formatFloat(rotation.getX())));
                cpeRotationY.getController().setValue(value.set(Tools.formatFloat(rotation.getY())));
                cpeRotationZ.getController().setValue(value.set(Tools.formatFloat(rotation.getZ())));
                break;
            }
        case CIRCLE_PARTICLE_EMITTER_PLANE_VELOCITY:
            {
                particleSystemEmitters.getController().setValue(value.set(EMITTER_CIRCLEPARTICLEEMITTERPLANEVELOCITY));
                particleSystemEmitter.getActiveConditions().add(EMITTER_CIRCLEPARTICLEEMITTERPLANEVELOCITY);
                CircleParticleEmitterPlaneVelocity emitter = particleSystem.getCircleParticleEmitterPlaneVelocity();
                cpepvCount.getController().setValue(value.set(emitter.getCount()));
                cpepvLifeTime.getController().setValue(value.set((int) emitter.getLifeTime()));
                cpepvLifeTimeRnd.getController().setValue(value.set((int) emitter.getLifeTimeRnd()));
                cpepvMass.getController().setValue(value.set(emitter.getMass(), 4));
                cpepvMassRnd.getController().setValue(value.set(emitter.getMassRnd(), 4));
                cpepvVelocity.getController().setValue(value.set(emitter.getVelocity(), 4));
                cpepvVelocityRnd.getController().setValue(value.set(emitter.getVelocityRnd(), 4));
                cpepvColorStart.getController().setValue(value.set(Tools.formatColor4(emitter.getColorStart())));
                cpepvColorEnd.getController().setValue(value.set(Tools.formatColor4(emitter.getColorEnd())));
                cpepvCenter.getController().setValue(value.set(Tools.formatVector3(emitter.getCenter())));
                cpepvRadius.getController().setValue(value.set(emitter.getRadius(), 4));
                // set up rotation matrix to extract euler angles
                Vector3 rotation = new Vector3();
                Matrix4x4 rotationMatrix = new Matrix4x4().identity();
                rotationMatrix.setAxes(emitter.getAxis0(), Vector3.computeCrossProduct(emitter.getAxis0(), emitter.getAxis1()), emitter.getAxis1());
                rotationMatrix.computeEulerAngles(rotation);
                // set up rotation
                cpepvRotationX.getController().setValue(value.set(Tools.formatFloat(rotation.getX())));
                cpepvRotationY.getController().setValue(value.set(Tools.formatFloat(rotation.getY())));
                cpepvRotationZ.getController().setValue(value.set(Tools.formatFloat(rotation.getZ())));
                break;
            }
        case SPHERE_PARTICLE_EMITTER:
            {
                particleSystemEmitters.getController().setValue(value.set(EMITTER_SPHEREPARTICLEEMITTER));
                particleSystemEmitter.getActiveConditions().add(EMITTER_SPHEREPARTICLEEMITTER);
                SphereParticleEmitter emitter = particleSystem.getSphereParticleEmitter();
                speCount.getController().setValue(value.set(emitter.getCount()));
                speLifeTime.getController().setValue(value.set((int) emitter.getLifeTime()));
                speLifeTimeRnd.getController().setValue(value.set((int) emitter.getLifeTimeRnd()));
                speMass.getController().setValue(value.set(emitter.getMass(), 4));
                speMassRnd.getController().setValue(value.set(emitter.getMassRnd(), 4));
                speVelocity.getController().setValue(value.set(Tools.formatVector3(emitter.getVelocity())));
                speVelocityRnd.getController().setValue(value.set(Tools.formatVector3(emitter.getVelocityRnd())));
                speColorStart.getController().setValue(value.set(Tools.formatColor4(emitter.getColorStart())));
                speColorEnd.getController().setValue(value.set(Tools.formatColor4(emitter.getColorEnd())));
                speCenter.getController().setValue(value.set(Tools.formatVector3(emitter.getCenter())));
                speRadius.getController().setValue(value.set(emitter.getRadius(), 4));
                break;
            }
        default:
            System.out.println("ParticleSystemScreenController::onParticleSystemEmitterApply(): unknown particle system emitter '" + particleSystem.getEmitter() + "'");
    }
    // re init entity in view
    view.initParticleSystem();
}
Also used : CircleParticleEmitterPlaneVelocity(net.drewke.tdme.tools.shared.model.LevelEditorEntityParticleSystem.CircleParticleEmitterPlaneVelocity) CircleParticleEmitter(net.drewke.tdme.tools.shared.model.LevelEditorEntityParticleSystem.CircleParticleEmitter) BoundingBoxParticleEmitter(net.drewke.tdme.tools.shared.model.LevelEditorEntityParticleSystem.BoundingBoxParticleEmitter) Vector3(net.drewke.tdme.math.Vector3) LevelEditorEntityParticleSystem(net.drewke.tdme.tools.shared.model.LevelEditorEntityParticleSystem) Matrix4x4(net.drewke.tdme.math.Matrix4x4) SphereParticleEmitter(net.drewke.tdme.tools.shared.model.LevelEditorEntityParticleSystem.SphereParticleEmitter) PointParticleEmitter(net.drewke.tdme.tools.shared.model.LevelEditorEntityParticleSystem.PointParticleEmitter)

Example 19 with Matrix4x4

use of net.drewke.tdme.math.Matrix4x4 in project tdme by andreasdr.

the class EntityBoundingVolumeSubScreenController method setupOrientedBoundingBox.

/**
	 * Setup oriented bounding box
	 * @param idx
	 * @param center
	 * @param axis 0
	 * @param axis 1
	 * @param axis 2
	 * @param half extension
	 */
public void setupOrientedBoundingBox(int idx, Vector3 center, Vector3 axis0, Vector3 axis1, Vector3 axis2, Vector3 halfExtension) {
    // set up rotation maxtrix
    Vector3 rotation = new Vector3();
    Matrix4x4 rotationMatrix = new Matrix4x4().identity();
    rotationMatrix.setAxes(axis0, axis1, axis2);
    rotationMatrix.computeEulerAngles(rotation);
    // set up obb in screen
    selectBoundingVolume(idx, BoundingVolumeType.ORIENTEDBOUNDINGBOX);
    boundingvolumeObbCenter[idx].getController().setValue(value.reset().append(Tools.formatFloat(center.getX())).append(", ").append(Tools.formatFloat(center.getY())).append(", ").append(Tools.formatFloat(center.getZ())));
    boundingvolumeObbHalfextension[idx].getController().setValue(value.reset().append(Tools.formatFloat(halfExtension.getX())).append(", ").append(Tools.formatFloat(halfExtension.getY())).append(", ").append(Tools.formatFloat(halfExtension.getZ())));
    boundingvolumeObbRotationX[idx].getController().setValue(value.set(Tools.formatFloat(rotation.getX())));
    boundingvolumeObbRotationY[idx].getController().setValue(value.set(Tools.formatFloat(rotation.getY())));
    boundingvolumeObbRotationZ[idx].getController().setValue(value.set(Tools.formatFloat(rotation.getZ())));
}
Also used : Vector3(net.drewke.tdme.math.Vector3) Matrix4x4(net.drewke.tdme.math.Matrix4x4)

Example 20 with Matrix4x4

use of net.drewke.tdme.math.Matrix4x4 in project tdme by andreasdr.

the class DAEReader method readLevel.

/**
	 * Reads Collada DAE file level
	 * @param path name
	 * @param file name
	 * @throws Exception
	 * @return Model instance
	 */
public static LevelEditorLevel readLevel(String pathName, String fileName) throws Exception {
    // (re)create tm files folder
    File tmFilesFolder = new File(pathName + "/" + fileName + "-models");
    if (tmFilesFolder.exists()) {
        tmFilesFolder.delete();
    }
    tmFilesFolder.mkdir();
    // create level
    LevelEditorLevel levelEditorLevel = new LevelEditorLevel();
    LevelPropertyPresets.getInstance().setDefaultLevelProperties(levelEditorLevel);
    // load dae xml document
    DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    Document document = builder.parse(FileSystem.getInstance().getInputStream(pathName, fileName));
    Element xmlRoot = document.getDocumentElement();
    // authoring tool
    AuthoringTool authoringTool = getAuthoringTool(xmlRoot);
    // up vector and rotation order
    UpVector upVector = getUpVector(xmlRoot);
    RotationOrder rotationOrder = null;
    switch(upVector) {
        case Y_UP:
            rotationOrder = RotationOrder.ZYX;
        case Z_UP:
            rotationOrder = RotationOrder.YZX;
    }
    levelEditorLevel.setRotationOrder(rotationOrder);
    // parse scene from xml
    String xmlSceneId = null;
    Element xmlScene = getChildrenByTagName(xmlRoot, "scene").get(0);
    for (Element xmlInstanceVisualscene : getChildrenByTagName(xmlScene, "instance_visual_scene")) {
        xmlSceneId = xmlInstanceVisualscene.getAttribute("url").substring(1);
    }
    // check for xml scene id
    if (xmlSceneId == null) {
        throw new ModelFileIOException("No scene id found");
    }
    // parse visual scenes
    Element xmlLibraryVisualScenes = getChildrenByTagName(xmlRoot, "library_visual_scenes").get(0);
    for (Element xmlLibraryVisualScene : getChildrenByTagName(xmlLibraryVisualScenes, "visual_scene")) {
        String xmlVisualSceneId = xmlLibraryVisualScene.getAttribute("id");
        if (xmlVisualSceneId.equals(xmlSceneId)) {
            // default FPS
            float fps = 30f;
            // parse frames per second
            List<Element> xmlExtraNodes = getChildrenByTagName(xmlLibraryVisualScene, "extra");
            if (xmlExtraNodes.isEmpty() == false) {
                Element xmlExtraNode = xmlExtraNodes.get(0);
                for (Element xmlTechnique : getChildrenByTagName(xmlExtraNode, "technique")) {
                    List<Element> xmlFrameRateNodes = getChildrenByTagName(xmlTechnique, "frame_rate");
                    if (xmlFrameRateNodes.isEmpty() == false) {
                        fps = Float.parseFloat(xmlFrameRateNodes.get(0).getTextContent());
                        break;
                    }
                }
            }
            // visual scene root nodes
            LevelEditorEntityLibrary entityLibrary = levelEditorLevel.getEntityLibrary();
            LevelEditorEntity emptyEntity = null;
            int nodeIdx = 0;
            for (Element xmlNode : getChildrenByTagName(xmlLibraryVisualScene, "node")) {
                // derive model name from node id
                String modelName = xmlNode.getAttribute("id");
                // replace blender _|-NUMBER, not sure if this is a good idea for all cases, we will see
                modelName = modelName.replaceAll("[\\-\\_]{1}+[0-9]+$", "");
                // replace number at the end still, not sure if this is a good idea for all cases, we will see
                modelName = modelName.replaceAll("[0-9]+$", "");
                // check if name is available, if not extend with numbers :DDD
                boolean haveName = entityLibrary.getEntityCount() == 0;
                if (haveName == false) {
                    for (int i = 0; i < 10000; i++) {
                        haveName = true;
                        String modelNameTry = modelName + (i == 0 ? "" : String.valueOf(i));
                        for (int entityIdx = 0; entityIdx < entityLibrary.getEntityCount(); entityIdx++) {
                            LevelEditorEntity entity = entityLibrary.getEntityAt(entityIdx);
                            if (entity.getName().equals(modelNameTry) == true) {
                                haveName = false;
                                break;
                            }
                        }
                        if (haveName == true) {
                            modelName = modelNameTry;
                            break;
                        }
                    }
                }
                // do we have a name now?
                if (haveName == false) {
                    // nope, cant imagine this will happen 
                    System.out.println("DAEReader::readLevel(): Skipping model '" + modelName + "' as no name could be created for it.");
                    continue;
                }
                // 	create model
                Model model = new Model(pathName + File.separator + fileName + '-' + modelName, fileName + '-' + modelName, upVector, rotationOrder, null);
                // import matrix
                setupModelImportRotationMatrix(xmlRoot, model);
                Matrix4x4 modelImportRotationMatrix = new Matrix4x4(model.getImportTransformationsMatrix());
                setupModelImportScaleMatrix(xmlRoot, model);
                // translation, scaling, rotation
                Vector3 translation = new Vector3();
                Vector3 scale = new Vector3();
                Vector3 rotation = new Vector3();
                Vector3 xAxis = new Vector3();
                Vector3 yAxis = new Vector3();
                Vector3 zAxis = new Vector3();
                // set up local transformations matrix
                Matrix4x4 nodeTransformationsMatrix = null;
                List<Element> xmlMatrixElements = getChildrenByTagName(xmlNode, "matrix");
                if (xmlMatrixElements.size() == 1) {
                    String xmlMatrix = xmlMatrixElements.get(0).getTextContent();
                    StringTokenizer t = new StringTokenizer(xmlMatrix, " \n\r");
                    // 
                    nodeTransformationsMatrix = new Matrix4x4(Float.parseFloat(t.nextToken()), Float.parseFloat(t.nextToken()), Float.parseFloat(t.nextToken()), Float.parseFloat(t.nextToken()), Float.parseFloat(t.nextToken()), Float.parseFloat(t.nextToken()), Float.parseFloat(t.nextToken()), Float.parseFloat(t.nextToken()), Float.parseFloat(t.nextToken()), Float.parseFloat(t.nextToken()), Float.parseFloat(t.nextToken()), Float.parseFloat(t.nextToken()), Float.parseFloat(t.nextToken()), Float.parseFloat(t.nextToken()), Float.parseFloat(t.nextToken()), Float.parseFloat(t.nextToken())).transpose();
                }
                // check if we have node transformations matrix
                if (nodeTransformationsMatrix == null) {
                    throw new ModelFileIOException("missing node transformations matrix for node " + xmlNode.getAttribute("id"));
                }
                // extract coordinate system axes
                nodeTransformationsMatrix.getAxes(xAxis, yAxis, zAxis);
                nodeTransformationsMatrix.getTranslation(translation);
                nodeTransformationsMatrix.getScale(scale);
                // normalize coordinate axes
                xAxis.normalize();
                yAxis.normalize();
                zAxis.normalize();
                // write back normalized x axis
                nodeTransformationsMatrix.setAxes(xAxis, yAxis, zAxis);
                // TODO: move me into Matrix4x4 decomposing code?
                if ((upVector == UpVector.Y_UP && Vector3.computeDotProduct(Vector3.computeCrossProduct(xAxis, yAxis), zAxis) < 0.0f) || (upVector == UpVector.Z_UP && Vector3.computeDotProduct(Vector3.computeCrossProduct(xAxis, zAxis), yAxis) < 0.0f)) {
                    // negate axes
                    xAxis.scale(-1f);
                    yAxis.scale(-1f);
                    zAxis.scale(-1f);
                    // and write back to node transformation matrices
                    nodeTransformationsMatrix.setAxes(xAxis, yAxis, zAxis);
                    // scale
                    scale.scale(-1f);
                }
                // determine rotation
                nodeTransformationsMatrix.computeEulerAngles(rotation);
                // apply model import matrix
                modelImportRotationMatrix.multiply(scale, scale);
                modelImportRotationMatrix.multiply(rotation, rotation);
                model.getImportTransformationsMatrix().multiply(translation, translation);
                // set up frames per seconds
                model.setFPS(fps);
                // read sub groups
                Group group = readVisualSceneNode(authoringTool, pathName, model, null, xmlRoot, xmlNode, fps);
                if (group != null) {
                    group.getTransformationsMatrix().identity();
                    model.getSubGroups().put(group.getId(), group);
                    model.getGroups().put(group.getId(), group);
                }
                // set up joints
                ModelHelper.setupJoints(model);
                // fix animation length
                ModelHelper.fixAnimationLength(model);
                // prepare for indexed rendering
                ModelHelper.prepareForIndexedRendering(model);
                // check if empty model
                EntityType entityType = EntityType.MODEL;
                ModelStatistics modelStatistics = ModelUtilities.computeModelStatistics(model);
                if (modelStatistics.getOpaqueFaceCount() == 0 && modelStatistics.getTransparentFaceCount() == 0) {
                    entityType = EntityType.EMPTY;
                }
                // level editor entity
                LevelEditorEntity levelEditorEntity = null;
                // model
                if (entityType == EntityType.MODEL) {
                    // check if we have that model already
                    for (int i = 0; i < levelEditorLevel.getEntityLibrary().getEntityCount(); i++) {
                        LevelEditorEntity levelEditorEntityCompare = levelEditorLevel.getEntityLibrary().getEntityAt(i);
                        if (levelEditorEntityCompare.getType() != EntityType.MODEL)
                            continue;
                        if (ModelUtilities.equals(model, levelEditorEntityCompare.getModel()) == true) {
                            levelEditorEntity = levelEditorEntityCompare;
                            break;
                        }
                    }
                    // create level editor model, if not yet exists
                    if (levelEditorEntity == null) {
                        // save model
                        TMWriter.write(model, pathName + "/" + fileName + "-models", modelName + ".tm");
                        // create level editor entity
                        levelEditorEntity = entityLibrary.addModel(nodeIdx++, modelName, modelName, pathName + "/" + fileName + "-models", modelName + ".tm", new Vector3());
                    }
                } else // empty
                if (entityType == EntityType.EMPTY) {
                    if (emptyEntity == null) {
                        emptyEntity = entityLibrary.addEmpty(nodeIdx++, "Default Empty", "");
                    }
                    levelEditorEntity = emptyEntity;
                } else {
                    System.out.println("DAEReader::readLevel(): unknown entity type. Skipping");
                    continue;
                }
                // level editor object transformations
                Transformations levelEditorObjectTransformations = new Transformations();
                levelEditorObjectTransformations.getTranslation().set(translation);
                levelEditorObjectTransformations.getRotations().add(new Rotation(rotation.getArray()[rotationOrder.getAxis0VectorIndex()], rotationOrder.getAxis0()));
                levelEditorObjectTransformations.getRotations().add(new Rotation(rotation.getArray()[rotationOrder.getAxis1VectorIndex()], rotationOrder.getAxis1()));
                levelEditorObjectTransformations.getRotations().add(new Rotation(rotation.getArray()[rotationOrder.getAxis2VectorIndex()], rotationOrder.getAxis2()));
                levelEditorObjectTransformations.getScale().set(scale);
                levelEditorObjectTransformations.update();
                // level editor object
                LevelEditorObject object = new LevelEditorObject(xmlNode.getAttribute("id"), xmlNode.getAttribute("id"), levelEditorObjectTransformations, levelEditorEntity);
                // add object to level
                levelEditorLevel.addObject(object);
            }
        }
    }
    // save level
    LevelFileExport.export(pathName + "/" + fileName + ".tl", levelEditorLevel);
    //
    return levelEditorLevel;
}
Also used : Group(net.drewke.tdme.engine.model.Group) Element(org.w3c.dom.Element) Document(org.w3c.dom.Document) ModelStatistics(net.drewke.tdme.engine.subsystems.object.ModelUtilitiesInternal.ModelStatistics) LevelEditorObject(net.drewke.tdme.tools.shared.model.LevelEditorObject) LevelEditorEntity(net.drewke.tdme.tools.shared.model.LevelEditorEntity) UpVector(net.drewke.tdme.engine.model.Model.UpVector) Vector3(net.drewke.tdme.math.Vector3) Rotation(net.drewke.tdme.engine.Rotation) Joint(net.drewke.tdme.engine.model.Joint) Matrix4x4(net.drewke.tdme.math.Matrix4x4) EntityType(net.drewke.tdme.tools.shared.model.LevelEditorEntity.EntityType) LevelEditorEntityLibrary(net.drewke.tdme.tools.shared.model.LevelEditorEntityLibrary) StringTokenizer(java.util.StringTokenizer) LevelEditorLevel(net.drewke.tdme.tools.shared.model.LevelEditorLevel) DocumentBuilder(javax.xml.parsers.DocumentBuilder) RotationOrder(net.drewke.tdme.engine.model.RotationOrder) Model(net.drewke.tdme.engine.model.Model) Transformations(net.drewke.tdme.engine.Transformations) File(java.io.File)

Aggregations

Matrix4x4 (net.drewke.tdme.math.Matrix4x4)21 Group (net.drewke.tdme.engine.model.Group)6 Joint (net.drewke.tdme.engine.model.Joint)5 Vector3 (net.drewke.tdme.math.Vector3)5 StringTokenizer (java.util.StringTokenizer)3 Skinning (net.drewke.tdme.engine.model.Skinning)3 Element (org.w3c.dom.Element)3 ArrayList (java.util.ArrayList)2 Animation (net.drewke.tdme.engine.model.Animation)2 JointWeight (net.drewke.tdme.engine.model.JointWeight)2 HashMap (net.drewke.tdme.utils.HashMap)2 File (java.io.File)1 DocumentBuilder (javax.xml.parsers.DocumentBuilder)1 Entity (net.drewke.tdme.engine.Entity)1 Rotation (net.drewke.tdme.engine.Rotation)1 Transformations (net.drewke.tdme.engine.Transformations)1 Face (net.drewke.tdme.engine.model.Face)1 FacesEntity (net.drewke.tdme.engine.model.FacesEntity)1 Model (net.drewke.tdme.engine.model.Model)1 UpVector (net.drewke.tdme.engine.model.Model.UpVector)1