Search in sources :

Example 21 with Entity

use of net.drewke.tdme.engine.Entity in project tdme by andreasdr.

the class LevelEditorView method objectDataApply.

/**
	 * On object data apply
	 * @param name
	 * @param description
	 */
public boolean objectDataApply(String name, String description) {
    if (selectedObjects.size() != 1)
        return false;
    // we only accept a single selection
    Entity selectedObject = selectedObjects.get(0);
    // skip if level editor internal object
    if (selectedObject.getId().startsWith("leveleditor."))
        return false;
    // check if not a internal leveleditor object
    LevelEditorObject levelEditorObject = level.getObjectById(selectedObject.getId());
    // we need a associated object in level 
    if (levelEditorObject == null)
        return false;
    // we always can safely set the description
    levelEditorObject.setDescription(description);
    // did id changed
    if (levelEditorObject.getId().equals(name) == false) {
        // yep, check if name is already in use
        if (engine.getEntity(name) != null) {
            return false;
        }
        // remove from engine, level and selection
        String oldId = levelEditorObject.getId();
        level.removeObject(levelEditorObject.getId());
        engine.removeEntity(levelEditorObject.getId());
        selectedObjectsById.clear();
        selectedObjects.clear();
        // set up id
        levelEditorObject.setId(name);
        // add to level, 3d engine
        level.addObject(levelEditorObject);
        Object3D object = new Object3D(levelEditorObject.getId(), levelEditorObject.getEntity().getModel());
        object.fromTransformations(levelEditorObject.getTransformations());
        object.setPickable(true);
        setStandardObjectColorEffect(object);
        setHighlightObjectColorEffect(object);
        engine.addEntity(object);
        // add to selected objects
        selectedObjects.add(object);
        selectedObjectsById.put(object.getId(), object);
        // update in objects listbox
        levelEditorScreenController.setObjectListbox(level.getObjectIdsIterator());
    }
    // set description
    levelEditorObject.setDescription(description);
    //
    return true;
}
Also used : Entity(net.drewke.tdme.engine.Entity) LevelEditorEntity(net.drewke.tdme.tools.shared.model.LevelEditorEntity) FacesEntity(net.drewke.tdme.engine.model.FacesEntity) LevelEditorObject(net.drewke.tdme.tools.shared.model.LevelEditorObject) Object3D(net.drewke.tdme.engine.Object3D)

Example 22 with Entity

use of net.drewke.tdme.engine.Entity in project tdme by andreasdr.

the class LevelEditorView method updateGUIElements.

/**
	 * Update GUI elements
	 * 	screen caption
	 *  level size
	 *  selected object
	 *		object properties
	 *		object 3d transformations
	 *		object data  
	 */
private void updateGUIElements() {
    levelEditorScreenController.setScreenCaption("Level Editor - " + level.getFileName());
    levelEditorScreenController.setLevelSize(level.getDimension().getX(), level.getDimension().getZ(), level.getDimension().getY());
    if (selectedObjects.size() == 1) {
        Entity selectedObject = selectedObjects.get(0);
        if (selectedObject != null && selectedObject.getId().startsWith("leveleditor.") == false) {
            LevelEditorObject levelEditorObject = level.getObjectById(selectedObject.getId());
            PropertyModelClass preset = levelEditorObject.getProperty("preset");
            levelEditorScreenController.setObjectProperties(preset != null ? preset.getValue() : "", levelEditorObject.getProperties(), null);
            levelEditorScreenController.setObject(selectedObject.getTranslation(), selectedObject.getScale(), selectedObject.getRotations().get(level.getRotationOrder().getAxisXIndex()).getAngle(), selectedObject.getRotations().get(level.getRotationOrder().getAxisYIndex()).getAngle(), selectedObject.getRotations().get(level.getRotationOrder().getAxisZIndex()).getAngle());
            // determine center
            Vector3 objectCenter = null;
            if (levelEditorObject.getEntity().getModel() != null) {
                BoundingVolume bv = levelEditorObject.getEntity().getModel().getBoundingBox().clone();
                bv.fromBoundingVolumeWithTransformations(bv, levelEditorObject.getTransformations());
                objectCenter = bv.getCenter();
            } else {
                // TODO: this is not the center, applies currently to particle systems
                objectCenter = levelEditorObject.getTransformations().getTranslation();
            }
            //
            levelEditorScreenController.setObjectData(levelEditorObject.getId(), levelEditorObject.getDescription(), levelEditorObject.getEntity().getName(), objectCenter);
        } else {
            levelEditorScreenController.unsetObjectData();
            levelEditorScreenController.unsetObject();
            levelEditorScreenController.unsetObjectProperties();
        }
    } else if (selectedObjects.size() > 1) {
        levelEditorScreenController.unsetObjectData();
        levelEditorScreenController.setObject(new Vector3(0f, 0f, 0f), new Vector3(1f, 1f, 1f), 0f, 0f, 0f);
        levelEditorScreenController.unsetObjectProperties();
    } else if (selectedObjects.size() == 0) {
        levelEditorScreenController.unsetObjectData();
        levelEditorScreenController.unsetObject();
        levelEditorScreenController.unsetObjectProperties();
    }
    // set up lights
    for (int i = 0; i < 4; i++) {
        levelEditorScreenController.setLight(i, level.getLightAt(i).getAmbient(), level.getLightAt(i).getDiffuse(), level.getLightAt(i).getSpecular(), level.getLightAt(i).getPosition(), level.getLightAt(i).getConstantAttenuation(), level.getLightAt(i).getLinearAttenuation(), level.getLightAt(i).getQuadraticAttenuation(), level.getLightAt(i).getSpotTo(), level.getLightAt(i).getSpotDirection(), level.getLightAt(i).getSpotExponent(), level.getLightAt(i).getSpotCutOff(), level.getLightAt(i).isEnabled());
    }
}
Also used : Entity(net.drewke.tdme.engine.Entity) LevelEditorEntity(net.drewke.tdme.tools.shared.model.LevelEditorEntity) FacesEntity(net.drewke.tdme.engine.model.FacesEntity) PropertyModelClass(net.drewke.tdme.tools.shared.model.PropertyModelClass) BoundingVolume(net.drewke.tdme.engine.primitives.BoundingVolume) Vector3(net.drewke.tdme.math.Vector3) LevelEditorObject(net.drewke.tdme.tools.shared.model.LevelEditorObject)

Example 23 with Entity

use of net.drewke.tdme.engine.Entity in project tdme by andreasdr.

the class TriggerView method initModel.

/**
	 * Init entity
	 */
protected void initModel(GLAutoDrawable drawable) {
    if (entity == null)
        return;
    // set up entity in engine
    Tools.setupEntity(entity, engine, cameraRotationInputHandler.getLookFromRotations(), cameraRotationInputHandler.getScale());
    // Make entity screenshot
    Tools.oseThumbnail(drawable, entity);
    // max axis dimension
    cameraRotationInputHandler.setMaxAxisDimension(Tools.computeMaxAxisDimension(entity.getModel().getBoundingBox()));
    // set up engine object settings
    Entity model = engine.getEntity("model");
    Entity ground = engine.getEntity("ground");
    model.setDynamicShadowingEnabled(false);
    ground.setEnabled(false);
    Entity modelBoundingVolume = engine.getEntity("model_bv");
    if (modelBoundingVolume != null) {
        modelBoundingVolume.setEnabled(false);
    }
    // 
    updateGUIElements();
}
Also used : Entity(net.drewke.tdme.engine.Entity) LevelEditorEntity(net.drewke.tdme.tools.shared.model.LevelEditorEntity)

Example 24 with Entity

use of net.drewke.tdme.engine.Entity in project tdme by andreasdr.

the class Tools method setupEntity.

/**
	 * Set up entity in given engine with look from rotations and scale
	 * @param entity
	 * @param engine
	 * @param look from rotations
	 * @param scale
	 */
public static void setupEntity(LevelEditorEntity entity, Engine engine, Transformations lookFromRotations, float scale) {
    if (entity == null)
        return;
    // entity bounding box
    BoundingBox entityBoundingBox = null;
    // add model to engine
    if (entity.getType() == EntityType.PARTICLESYSTEM) {
        entityBoundingBox = new BoundingBox(new Vector3(-0.5f, 0f, -0.5f), new Vector3(0.5f, 3f, 0.5f));
        Entity particleSystemObject = Level.createParticleSystem(entity.getParticleSystem(), "model", true);
        if (particleSystemObject != null) {
            engine.addEntity(particleSystemObject);
        }
    } else {
        entityBoundingBox = entity.getModel().getBoundingBox();
        Object3D modelObject = new Object3D("model", entity.getModel());
        modelObject.setDynamicShadowingEnabled(true);
        engine.addEntity(modelObject);
    }
    // create ground object
    Model ground = createGroundModel((entityBoundingBox.getMax().getX() - entityBoundingBox.getMin().getX()) * 1f, (entityBoundingBox.getMax().getZ() - entityBoundingBox.getMin().getZ()) * 1f, entityBoundingBox.getMin().getY() - MathTools.EPSILON);
    // add ground to engine
    Object3D groundObject = new Object3D("ground", ground);
    groundObject.setEnabled(false);
    engine.addEntity(groundObject);
    // add bounding volume if we have any
    for (int i = 0; i < entity.getBoundingVolumeCount(); i++) {
        LevelEditorEntityBoundingVolume boundingVolume = entity.getBoundingVolumeAt(i);
        if (boundingVolume.getModel() == null)
            continue;
        Object3D modelBoundingVolumeObject = new Object3D("model_bv." + i, boundingVolume.getModel());
        modelBoundingVolumeObject.setEnabled(false);
        engine.addEntity(modelBoundingVolumeObject);
    }
    // set up lights
    for (Light light : engine.getLights()) light.setEnabled(false);
    Light light0 = engine.getLightAt(0);
    light0.getAmbient().set(1.0f, 1.0f, 1.0f, 1.0f);
    light0.getDiffuse().set(0.5f, 0.5f, 0.5f, 1f);
    light0.getSpecular().set(1f, 1f, 1f, 1f);
    light0.getPosition().set(entityBoundingBox.getMin().getX() + ((entityBoundingBox.getMax().getX() - entityBoundingBox.getMin().getX()) / 2f), //modelBoundingBox.getMax().getY(),
    entityBoundingBox.getMin().getY() + ((entityBoundingBox.getMax().getY() - entityBoundingBox.getMin().getY()) / 2f), -entityBoundingBox.getMin().getZ() * 4f, 1f);
    light0.getSpotDirection().set(0f, 0f, 0f).sub(new Vector3(light0.getPosition().getArray()));
    light0.setConstantAttenuation(0.5f);
    light0.setLinearAttenuation(0f);
    light0.setQuadraticAttenuation(0f);
    light0.setSpotExponent(0f);
    light0.setSpotCutOff(180f);
    light0.setEnabled(true);
    // model dimension
    Vector3 dimension = entityBoundingBox.getMax().clone().sub(entityBoundingBox.getMin());
    // determine max dimension on each axis
    float maxAxisDimension = computeMaxAxisDimension(entityBoundingBox);
    // set up cam
    Camera cam = engine.getCamera();
    cam.setZNear(maxAxisDimension / 5000f);
    cam.setZFar(maxAxisDimension);
    // look at
    Vector3 lookAt = entityBoundingBox.getMin().clone().add(dimension.clone().scale(0.5f));
    cam.getLookAt().set(lookAt);
    // look at -> look to vector
    Vector3 lookAtToFromVector = new Vector3(0f, 0f, +(maxAxisDimension * 1.2f));
    // apply look from rotations
    Vector3 lookAtToFromVectorTransformed = new Vector3();
    Vector3 lookAtToFromVectorScaled = new Vector3();
    Vector3 upVector = new Vector3();
    lookFromRotations.getTransformationsMatrix().multiply(lookAtToFromVector, lookAtToFromVectorTransformed);
    lookAtToFromVectorScaled.set(lookAtToFromVectorTransformed).scale(scale);
    lookFromRotations.getRotations().get(2).getQuaternion().multiply(new Vector3(0f, 1f, 0f), upVector);
    // look from with rotations
    Vector3 lookFrom = lookAt.clone().add(lookAtToFromVectorScaled);
    cam.getLookFrom().set(lookFrom);
    // up vector
    cam.getUpVector().set(upVector);
}
Also used : LevelEditorEntityBoundingVolume(net.drewke.tdme.tools.shared.model.LevelEditorEntityBoundingVolume) Entity(net.drewke.tdme.engine.Entity) LevelEditorEntity(net.drewke.tdme.tools.shared.model.LevelEditorEntity) FacesEntity(net.drewke.tdme.engine.model.FacesEntity) Light(net.drewke.tdme.engine.Light) BoundingBox(net.drewke.tdme.engine.primitives.BoundingBox) Model(net.drewke.tdme.engine.model.Model) Vector3(net.drewke.tdme.math.Vector3) Camera(net.drewke.tdme.engine.Camera) Object3D(net.drewke.tdme.engine.Object3D)

Example 25 with Entity

use of net.drewke.tdme.engine.Entity in project tdme by andreasdr.

the class LevelEditorView method objectPropertyAdd.

/**
	 * Add a model property
	 * @return success
	 */
public boolean objectPropertyAdd() {
    if (selectedObjects.size() != 1)
        return false;
    // handle single object
    Entity selectedObject = selectedObjects.get(0);
    LevelEditorObject levelEditorObject = level.getObjectById(selectedObject.getId());
    if (levelEditorObject == null)
        return false;
    // try to add property
    if (levelEditorObject.addProperty("new.property", "new.value")) {
        // reload model properties
        levelEditorScreenController.setObjectProperties(null, levelEditorObject.getProperties(), "new.property");
        //
        return true;
    }
    //
    return false;
}
Also used : Entity(net.drewke.tdme.engine.Entity) LevelEditorEntity(net.drewke.tdme.tools.shared.model.LevelEditorEntity) FacesEntity(net.drewke.tdme.engine.model.FacesEntity) LevelEditorObject(net.drewke.tdme.tools.shared.model.LevelEditorObject)

Aggregations

Entity (net.drewke.tdme.engine.Entity)32 LevelEditorEntity (net.drewke.tdme.tools.shared.model.LevelEditorEntity)25 FacesEntity (net.drewke.tdme.engine.model.FacesEntity)22 LevelEditorObject (net.drewke.tdme.tools.shared.model.LevelEditorObject)17 Object3D (net.drewke.tdme.engine.Object3D)8 Vector3 (net.drewke.tdme.math.Vector3)8 PropertyModelClass (net.drewke.tdme.tools.shared.model.PropertyModelClass)6 ArrayList (java.util.ArrayList)4 ObjectParticleSystemEntity (net.drewke.tdme.engine.ObjectParticleSystemEntity)4 PointsParticleSystemEntity (net.drewke.tdme.engine.PointsParticleSystemEntity)4 BoundingVolume (net.drewke.tdme.engine.primitives.BoundingVolume)3 Camera (net.drewke.tdme.engine.Camera)2 Rotation (net.drewke.tdme.engine.Rotation)2 Transformations (net.drewke.tdme.engine.Transformations)2 LevelEditorEntityBoundingVolume (net.drewke.tdme.tools.shared.model.LevelEditorEntityBoundingVolume)2 Light (net.drewke.tdme.engine.Light)1 Model (net.drewke.tdme.engine.model.Model)1 BoundingBox (net.drewke.tdme.engine.primitives.BoundingBox)1 ParticleSystemEntity (net.drewke.tdme.engine.subsystems.particlesystem.ParticleSystemEntity)1 GUIKeyboardEvent (net.drewke.tdme.gui.events.GUIKeyboardEvent)1