Search in sources :

Example 1 with Entity

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

the class EntityBoundingVolumeView method updateModelBoundingVolume.

/**
	 * Update model bounding volume
	 * @param entity
	 * @param idx
	 */
private void updateModelBoundingVolume(LevelEditorEntity entity, int idx) {
    LevelEditorEntityBoundingVolume entityBoundingVolume = entity.getBoundingVolumeAt(idx);
    // remove old bv
    String id = EntityBoundingVolumeSubScreenController.MODEL_BOUNDINGVOLUME_IDS[idx];
    Entity modelBoundingVolumeObject = engine.getEntity(id);
    if (modelBoundingVolumeObject != null) {
        engine.removeEntity(id);
    }
    // add new bv
    if (entityBoundingVolume.getModel() == null)
        return;
    modelBoundingVolumeObject = new Object3D(id, entityBoundingVolume.getModel());
    modelBoundingVolumeObject.setEnabled(false);
    engine.addEntity(modelBoundingVolumeObject);
}
Also used : LevelEditorEntityBoundingVolume(net.drewke.tdme.tools.shared.model.LevelEditorEntityBoundingVolume) Entity(net.drewke.tdme.engine.Entity) LevelEditorEntity(net.drewke.tdme.tools.shared.model.LevelEditorEntity) Object3D(net.drewke.tdme.engine.Object3D)

Example 2 with Entity

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

the class PointsParticleSystemEntityInternal method updateParticles.

/*
	 * (non-Javadoc)
	 * @see net.drewke.tdme.engine.subsystems.particlesystem.ParticleSystemEntity#update(net.drewke.tdme.engine.Engine)
	 */
public void updateParticles() {
    if (enabled == false || active == false)
        return;
    // bounding box transformed min, max xyz 
    float[] bbMinXYZ = boundingBoxTransformed.getMin().getArray();
    float[] bbMaxXYZ = boundingBoxTransformed.getMax().getArray();
    //
    boolean haveBoundingBox = false;
    //
    float distanceFromCamera;
    Matrix4x4 modelViewMatrix = renderer.getModelViewMatrix();
    // compute distance from camera
    distanceFromCamera = -point.getZ();
    // process particles
    pointsRenderPool.reset();
    int activeParticles = 0;
    long timeDelta = engine.getTiming().getDeltaTime();
    for (int i = 0; i < particles.length; i++) {
        Particle particle = particles[i];
        if (particle.active == false)
            continue;
        // life time
        particle.lifeTimeCurrent += timeDelta;
        // crop to max life time
        if (particle.lifeTimeCurrent >= particle.lifeTimeMax) {
            particle.active = false;
            continue;
        }
        // add gravity if our particle have a noticeable mass
        if (particle.mass > MathTools.EPSILON)
            particle.velocity.subY(0.5f * MathTools.g * (float) timeDelta / 1000f);
        // TODO:
        //	maybe take air resistance into account like a huge paper needs more time to fall than a sphere of paper
        //	or heat for smoke or fire, whereas having no mass for those particles works around this problem for now
        // translation
        particle.position.add(velocityForTime.set(particle.velocity).scale((float) timeDelta / 1000f));
        // color
        float[] color = particle.color.getArray();
        float[] colorAdd = particle.colorAdd.getArray();
        color[0] += colorAdd[0] * (float) timeDelta;
        color[1] += colorAdd[1] * (float) timeDelta;
        color[2] += colorAdd[2] * (float) timeDelta;
        color[3] += colorAdd[3] * (float) timeDelta;
        // transform particle position to camera space
        modelViewMatrix.multiply(particle.position, point);
        // check for collision
        if (doCollisionTests == true) {
            for (Entity entity : engine.getPartition().getObjectsNearTo(particle.position)) {
                // skip on our self
                if (entity == this)
                    continue;
                // skip on other particle systems
                if (entity instanceof ParticleSystemEntity)
                    continue;
                // do we have a collision?
                if (entity.getBoundingBoxTransformed().containsPoint(particle.position)) {
                    particle.active = false;
                    continue;
                }
            }
        }
        // 
        activeParticles++;
        // compute distance from camera
        distanceFromCamera = -point.getZ();
        // set up bounding box
        float[] positionXYZ = particle.position.getArray();
        if (haveBoundingBox == false) {
            System.arraycopy(positionXYZ, 0, bbMinXYZ, 0, 3);
            System.arraycopy(positionXYZ, 0, bbMaxXYZ, 0, 3);
            haveBoundingBox = true;
        } else {
            if (positionXYZ[0] < bbMinXYZ[0])
                bbMinXYZ[0] = positionXYZ[0];
            if (positionXYZ[1] < bbMinXYZ[1])
                bbMinXYZ[1] = positionXYZ[1];
            if (positionXYZ[2] < bbMinXYZ[2])
                bbMinXYZ[2] = positionXYZ[2];
            if (positionXYZ[0] > bbMaxXYZ[0])
                bbMaxXYZ[0] = positionXYZ[0];
            if (positionXYZ[1] > bbMaxXYZ[1])
                bbMaxXYZ[1] = positionXYZ[1];
            if (positionXYZ[2] > bbMaxXYZ[2])
                bbMaxXYZ[2] = positionXYZ[2];
        }
        // 
        pointsRenderPool.addPoint(point, particle.color, distanceFromCamera);
    }
    // auto disable particle system if no more active particles
    if (activeParticles == 0) {
        active = false;
        return;
    }
    // scale a bit up to make picking work better
    boundingBoxTransformed.getMin().sub(0.1f);
    boundingBoxTransformed.getMax().add(0.1f);
    // compute bounding boxes
    boundingBoxTransformed.update();
    boundingBox.fromBoundingVolumeWithTransformations(boundingBoxTransformed, inverseTransformation);
}
Also used : Entity(net.drewke.tdme.engine.Entity) Matrix4x4(net.drewke.tdme.math.Matrix4x4)

Example 3 with Entity

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

the class EmptyView 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 4 with Entity

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

the class LevelEditorView method objectPropertiesPreset.

/**
	 * Apply object property preset
	 * @param preset id
	 */
public void objectPropertiesPreset(String presetId) {
    if (selectedObjects.size() != 1)
        return;
    // handle single object
    Entity selectedObject = selectedObjects.get(0);
    LevelEditorObject levelEditorObject = level.getObjectById(selectedObject.getId());
    if (levelEditorObject == null)
        return;
    // clear object properties
    levelEditorObject.clearProperties();
    // add object properties by preset if missing
    ArrayList<PropertyModelClass> objectPropertyPresetVector = LevelPropertyPresets.getInstance().getObjectPropertiesPresets().get(presetId);
    if (objectPropertyPresetVector != null) {
        for (PropertyModelClass objectPropertyPreset : objectPropertyPresetVector) {
            levelEditorObject.addProperty(objectPropertyPreset.getName(), objectPropertyPreset.getValue());
        }
    }
    // update object properties to gui
    levelEditorScreenController.setObjectProperties(presetId, levelEditorObject.getProperties(), null);
}
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) LevelEditorObject(net.drewke.tdme.tools.shared.model.LevelEditorObject)

Example 5 with Entity

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

the class LevelEditorView method updateGrid.

/**
	 * Update dynamic grid
	 */
private void updateGrid() {
    // check if to display grid
    if (gridEnabled == false)
        return;
    // TODO: use pool
    // check if to move grid
    int centerX = (int) gridCenter.getX();
    int centerZ = (int) gridCenter.getZ();
    int centerLastX = gridCenterLast == null ? centerX : (int) gridCenterLast.getX();
    int centerLastZ = gridCenterLast == null ? centerZ : (int) gridCenterLast.getZ();
    if (gridCenterLast != null && (centerLastX != centerX || centerLastZ != centerZ) == false) {
        return;
    }
    int gridDimensionLeft = GRID_DIMENSION_X + (centerLastX < centerX ? centerX - centerLastX : 0);
    int gridDimensionRight = GRID_DIMENSION_X + (centerLastX > centerX ? centerLastX - centerX : 0);
    int gridDimensionNear = GRID_DIMENSION_Y + (centerLastZ < centerZ ? centerZ - centerLastZ : 0);
    int gridDimensionFar = GRID_DIMENSION_Y + (centerLastZ > centerZ ? centerLastZ - centerZ : 0);
    // create ground plates
    int addedCells = 0;
    int removedCells = 0;
    int reAddedCells = 0;
    for (int gridZ = -gridDimensionNear; gridZ < gridDimensionFar; gridZ++) for (int gridX = -gridDimensionLeft; gridX < gridDimensionRight; gridX++) {
        String objectId = "leveleditor.ground@" + (centerX + gridX) + "," + (centerZ + gridZ);
        Entity _object = engine.getEntity(objectId);
        if (gridX < -GRID_DIMENSION_X || gridX >= GRID_DIMENSION_X || gridZ < -GRID_DIMENSION_Y || gridZ >= GRID_DIMENSION_Y) {
            if (_object != null) {
                engine.removeEntity(objectId);
                removedCells++;
            }
        } else if (_object == null) {
            _object = selectedObjectsById.get(objectId);
            if (_object != null) {
                engine.addEntity(_object);
                reAddedCells++;
            } else {
                _object = new Object3D(objectId, levelEditorGround);
                _object.getRotations().add(new Rotation(0f, level.getRotationOrder().getAxis0()));
                _object.getRotations().add(new Rotation(0f, level.getRotationOrder().getAxis1()));
                _object.getRotations().add(new Rotation(0f, level.getRotationOrder().getAxis2()));
                _object.getTranslation().set(centerX + (float) gridX * groundPlateWidth, gridY - 0.05f, centerZ + (float) gridZ * groundPlateDepth);
                //_object.setDynamicShadowingEnabled(false); // TODO
                _object.setEnabled(true);
                _object.setPickable(true);
                _object.update();
                setStandardObjectColorEffect(_object);
                engine.addEntity(_object);
                addedCells++;
            }
        }
    }
    // System.out.println("readded: " + reAddedCells + ", added: " + addedCells + ", removed: " + removedCells + ", total:" + engine.getEntityCount());
    if (gridCenterLast == null)
        gridCenterLast = new Vector3();
    gridCenterLast.set(gridCenter);
}
Also used : Entity(net.drewke.tdme.engine.Entity) LevelEditorEntity(net.drewke.tdme.tools.shared.model.LevelEditorEntity) FacesEntity(net.drewke.tdme.engine.model.FacesEntity) Vector3(net.drewke.tdme.math.Vector3) Rotation(net.drewke.tdme.engine.Rotation) Object3D(net.drewke.tdme.engine.Object3D)

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