use of net.drewke.tdme.engine.Object3D in project tdme by andreasdr.
the class EngineTest method doPlayerControl.
/**
* Do player control
* @param idx
* @param key left
* @param key right
* @param key up
*/
private void doPlayerControl(int idx, boolean keyLeft, boolean keyRight, boolean keyUp) {
float fps = engine.getTiming().getCurrentFPS();
Object3D player = players.get(idx);
BoundingVolume playerBoundingVolumeTransformed = playerBoundingVolumesTransformed.get(idx);
Rotations rotations = player.getRotations();
Rotation r = rotations.get(0);
player.update();
Vector3 movement = new Vector3();
// left, right
if (keyRight)
r.setAngle(r.getAngle() - (135f / fps));
if (keyLeft)
r.setAngle(r.getAngle() + (135f / fps));
if (keyRight || keyLeft) {
player.update();
playerBoundingVolumeTransformed.fromBoundingVolumeWithTransformations(playerBoundingVolume, player);
}
// forward
if (keyUp) {
// apply movement
r.getQuaternion().multiply(new Vector3(0f, 0f, 1f), movement);
movement.scale(1.50f / fps);
player.getTranslation().add(movement);
player.update();
playerBoundingVolumeTransformed.fromBoundingVolumeWithTransformations(playerBoundingVolume, player);
// walking animation
if (player.getAnimation().equals("walk") == false) {
player.setAnimation("walk");
}
} else {
// still animation
if (player.getAnimation().equals("walk") == true) {
player.setAnimation("still");
}
}
// check if collides with cube
if (playerBoundingVolumeTransformed.doesCollideWith(cubeBoundingVolumeTransformed, movement, collision) == true && collision.hasPenetration() == true) {
System.out.println("cube: " + collision);
// yep, move object out of collision
player.getTranslation().sub(collision.getNormal().clone().scale(collision.getPenetration()));
player.update();
playerBoundingVolumeTransformed.fromBoundingVolumeWithTransformations(playerBoundingVolume, player);
}
// check if collides with barrel
if (CollisionDetection.getInstance().doCollide((Capsule) playerBoundingVolumeTransformed, (ConvexMesh) barrelBoundingVolumeTransformed, movement, collision) == true && collision.hasPenetration() == true) {
System.out.println("barrel: " + collision);
// yep, move object out of collision
player.getTranslation().sub(collision.getNormal().clone().scale(collision.getPenetration()));
player.update();
playerBoundingVolumeTransformed.fromBoundingVolumeWithTransformations(playerBoundingVolume, player);
}
// check if collides with other players
for (int i = 0; i < players.size(); i++) {
// do not check with same player
if (idx == i)
continue;
// do collide?
if (playerBoundingVolumeTransformed.doesCollideWith(playerBoundingVolumesTransformed.get(i), movement, collision) == true && collision.hasPenetration()) {
System.out.println("player: " + collision);
// yep, move object out of collision
player.getTranslation().sub(collision.getNormal().clone().scale(collision.getPenetration()));
player.update();
playerBoundingVolumeTransformed.fromBoundingVolumeWithTransformations(playerBoundingVolume, player);
}
}
}
use of net.drewke.tdme.engine.Object3D in project tdme by andreasdr.
the class PhysicsTest1 method init.
/*
* (non-Javadoc)
* @see com.jogamp.opengl.GLEventListener#init(com.jogamp.opengl.GLAutoDrawable)
*/
public void init(GLAutoDrawable drawable) {
drawable.getGL().setSwapInterval(0);
engine.init(drawable);
Object3D entity;
// cam
Camera cam = engine.getCamera();
cam.setZNear(0.10f);
cam.setZFar(50.00f);
cam.getLookFrom().set(0f, 4f * 2.5f, -6f * 2.5f);
cam.getLookAt().set(0f, 0.0f, 0f);
cam.computeUpVector(cam.getLookFrom(), cam.getLookAt(), cam.getUpVector());
// lights
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(0f, 20000f, 0f, 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);
// ground
OrientedBoundingBox ground = new OrientedBoundingBox(new Vector3(0f, 0f, 0f), OrientedBoundingBox.AABB_AXIS_X.clone(), OrientedBoundingBox.AABB_AXIS_Y.clone(), OrientedBoundingBox.AABB_AXIS_Z.clone(), new Vector3(8f, 1f, 8f));
Model groundModel = PrimitiveModel.createModel(ground, "ground_model");
groundModel.getMaterials().get("tdme.primitive.material").getAmbientColor().set(0.8f, 0.8f, 0.8f, 1f);
groundModel.getMaterials().get("tdme.primitive.material").getDiffuseColor().set(1f, 1f, 1f, 1f);
entity = new Object3D("ground", groundModel);
// entity.getRotations().add(new Rotation(10f, OrientedBoundingBox.AABB_AXIS_Z.clone()));
entity.update();
engine.addEntity(entity);
world.addStaticRigidBody("ground", true, RIGID_TYPEID_STANDARD, entity, ground, 0.5f);
// side
OrientedBoundingBox side = new OrientedBoundingBox(new Vector3(0f, 0f, 0f), OrientedBoundingBox.AABB_AXIS_X.clone(), OrientedBoundingBox.AABB_AXIS_Y.clone(), OrientedBoundingBox.AABB_AXIS_Z.clone(), new Vector3(1f, 16f, 8f));
Model sideModel = PrimitiveModel.createModel(side, "side_model");
sideModel.getMaterials().get("tdme.primitive.material").getAmbientColor().set(0.8f, 0.8f, 0.8f, 1f);
sideModel.getMaterials().get("tdme.primitive.material").getDiffuseColor().set(1f, 1f, 1f, 1f);
// far
OrientedBoundingBox nearFar = new OrientedBoundingBox(new Vector3(0f, 0f, 0f), OrientedBoundingBox.AABB_AXIS_X.clone(), OrientedBoundingBox.AABB_AXIS_Y.clone(), OrientedBoundingBox.AABB_AXIS_Z.clone(), new Vector3(8f, 16f, 1f));
Model nearFarModel = PrimitiveModel.createModel(nearFar, "far_model");
nearFarModel.getMaterials().get("tdme.primitive.material").getAmbientColor().set(0.8f, 0.8f, 0.8f, 1f);
nearFarModel.getMaterials().get("tdme.primitive.material").getDiffuseColor().set(1f, 1f, 1f, 1f);
// far
entity = new Object3D("far", nearFarModel);
entity.getTranslation().addZ(+9f);
entity.update();
engine.addEntity(entity);
world.addStaticRigidBody("far", true, RIGID_TYPEID_STANDARD, entity, nearFar, 0.5f);
// near
entity = new Object3D("near", nearFarModel);
entity.getTranslation().addZ(-9f);
entity.getEffectColorMul().set(1f, 1f, 1f, 0f);
entity.update();
engine.addEntity(entity);
world.addStaticRigidBody("near", true, RIGID_TYPEID_STANDARD, entity, nearFar, 0.5f);
// side left
entity = new Object3D("sideright", sideModel);
entity.getTranslation().addX(-9f);
entity.update();
engine.addEntity(entity);
world.addStaticRigidBody("sideright", true, RIGID_TYPEID_STANDARD, entity, side, 0.5f);
// side right
entity = new Object3D("sideleft", sideModel);
entity.getTranslation().addX(9f);
entity.update();
engine.addEntity(entity);
world.addStaticRigidBody("sideleft", true, RIGID_TYPEID_STANDARD, entity, side, 0.5f);
// box
OrientedBoundingBox box = new OrientedBoundingBox(new Vector3(0f, 0f, 0f), OrientedBoundingBox.AABB_AXIS_X.clone(), OrientedBoundingBox.AABB_AXIS_Y.clone(), OrientedBoundingBox.AABB_AXIS_Z.clone(), new Vector3(0.6f, 0.6f, 0.6f));
Model boxModel = PrimitiveModel.createModel(box, "box_model");
boxModel.getMaterials().get("tdme.primitive.material").getAmbientColor().set(0.8f, 0.5f, 0.5f, 1f);
boxModel.getMaterials().get("tdme.primitive.material").getDiffuseColor().set(1f, 0f, 0f, 1f);
// boxes
for (int i = 0; i < BOX_COUNT; i++) {
entity = new Object3D("box" + i, boxModel);
entity.setDynamicShadowingEnabled(true);
entity.getTranslation().addY(10f + i * 3.0f);
entity.getTranslation().addX(-2f + i * 0.1f);
entity.update();
engine.addEntity(entity);
world.addRigidBody("box" + i, true, RIGID_TYPEID_STANDARD, entity, box, 0f, 1f, 100f, RigidBody.computeInertiaMatrix(box, 100f, 1f, 1f, 1f));
}
// stack
for (int i = 0; i < BOXSTACK_COUNT; i++) {
entity = new Object3D("box" + (BOX_COUNT + i), boxModel);
entity.setDynamicShadowingEnabled(true);
entity.getTranslation().addY(1.6f + (i * 1.2f));
entity.getTranslation().addX(+3f);
entity.getTranslation().addZ(-5f);
entity.update();
engine.addEntity(entity);
world.addRigidBody("box" + (BOX_COUNT + i), true, RIGID_TYPEID_STANDARD, entity, box, 0f, 1f, 100f, RigidBody.computeInertiaMatrix(box, 100f, 1f, 1f, 1f));
}
// sphere
Sphere sphere = new Sphere(new Vector3(0f, 0f, 0f), 0.4f);
Model sphereModel = PrimitiveModel.createModel(sphere, "sphere_model");
sphereModel.getMaterials().get("tdme.primitive.material").getAmbientColor().set(0.5f, 0.8f, 0.8f, 1f);
sphereModel.getMaterials().get("tdme.primitive.material").getDiffuseColor().set(0f, 1f, 1f, 1f);
// spheres
for (int i = 0; i < SPHERE_COUNT; i++) {
entity = new Object3D("sphere" + i, sphereModel);
entity.setDynamicShadowingEnabled(true);
entity.getTranslation().addY(12f + (i * 1f));
entity.getTranslation().addX(0.45f * i - 3f);
entity.getTranslation().addZ(0.1f * i - 3f);
entity.update();
engine.addEntity(entity);
world.addRigidBody("sphere" + i, true, RIGID_TYPEID_STANDARD, entity, sphere, 0.75f, 0.4f, 10f, RigidBody.computeInertiaMatrix(sphere, 10f, 1f, 1f, 1f));
}
// sphere
Capsule capsule = new Capsule(new Vector3(0f, 0.5f, 0f), new Vector3(0f, -0.5f, 0f), 0.25f);
Model capsuleModel = PrimitiveModel.createModel(capsule, "capsule_model");
capsuleModel.getMaterials().get("tdme.primitive.material").getAmbientColor().set(0.8f, 0.0f, 0.8f, 1f);
capsuleModel.getMaterials().get("tdme.primitive.material").getDiffuseColor().set(1f, 0f, 1f, 1f);
//
for (int i = 0; i < CAPSULE_COUNT; i++) {
entity = new Object3D("capsule" + i, capsuleModel);
entity.setDynamicShadowingEnabled(true);
entity.getTranslation().addY(14f + (i * 2f));
entity.getTranslation().addX((i * 0.5f));
// entity.getPivot().set(capsule.getCenter());
entity.update();
engine.addEntity(entity);
world.addRigidBody("capsule" + i, true, RIGID_TYPEID_STANDARD, entity, capsule, 0.0f, 0.4f, 3f, RigidBody.computeInertiaMatrix(capsule, 3f, 1f, 1f, 1f));
}
// sphere
//Capsule capsuleBig = new Capsule(
// new Vector3(0f,+1f,0f),
// new Vector3(0f,-1f,0f),
// 0.5f
//);
OrientedBoundingBox capsuleBig = new OrientedBoundingBox(new Vector3(0f, 0f, 0f), OrientedBoundingBox.AABB_AXIS_X.clone(), OrientedBoundingBox.AABB_AXIS_Y.clone(), OrientedBoundingBox.AABB_AXIS_Z.clone(), new Vector3(0.5f, 1f, 0.5f));
Model capsuleBigModel = PrimitiveModel.createModel(capsuleBig, "capsulebig_model");
capsuleBigModel.getMaterials().get("tdme.primitive.material").getAmbientColor().set(1f, 0.8f, 0.8f, 1f);
capsuleBigModel.getMaterials().get("tdme.primitive.material").getDiffuseColor().set(1f, 0f, 0f, 1f);
System.out.println(capsuleBig.getCenter());
//
entity = new Object3D("capsulebig1", capsuleBigModel);
entity.setDynamicShadowingEnabled(true);
entity.getTranslation().addY(5f);
entity.getTranslation().addX(-2f);
entity.update();
engine.addEntity(entity);
world.addRigidBody("capsulebig1", true, RIGID_TYPEID_STANDARD, entity, capsuleBig, 0f, 1f, 80f, RigidBody.getNoRotationInertiaMatrix());
//
entity = new Object3D("capsulebig2", capsuleBigModel);
entity.setDynamicShadowingEnabled(true);
entity.getTranslation().addY(5f);
entity.getTranslation().addX(+2f);
entity.update();
engine.addEntity(entity);
world.addRigidBody("capsulebig2", true, RIGID_TYPEID_STANDARD, entity, capsuleBig, 0f, 1f, 100f, RigidBody.getNoRotationInertiaMatrix());
try {
// load barrel, set up bounding volume
Model _barrel = DAEReader.read("resources/tests/models/barrel", "barrel.dae");
// _barrel.getImportTransformationsMatrix().scale(2f);
ConvexMesh barrelBoundingVolume = new ConvexMesh(new Object3DModel(_barrel));
// set up barrel 1 in 3d engine
entity = new Object3D("barrel1", _barrel);
entity.setDynamicShadowingEnabled(true);
entity.getTranslation().addY(5f);
entity.getTranslation().addX(+4f);
entity.getScale().set(2f, 2f, 2f);
entity.update();
engine.addEntity(entity);
world.addRigidBody("barrel1", true, RIGID_TYPEID_STANDARD, entity, barrelBoundingVolume, 0f, 1f, 100f, RigidBody.computeInertiaMatrix(barrelBoundingVolume, 100f, 1f, 1f, 1f));
// set up barrel 2 in 3d engine
entity = new Object3D("barrel2", _barrel);
entity.setDynamicShadowingEnabled(true);
entity.getTranslation().addY(5f);
entity.getTranslation().addX(+6f);
entity.getScale().set(2f, 2f, 2f);
entity.update();
engine.addEntity(entity);
world.addRigidBody("barrel2", true, RIGID_TYPEID_STANDARD, entity, barrelBoundingVolume, 0f, 1f, 100f, RigidBody.computeInertiaMatrix(barrelBoundingVolume, 100f, 1f, 1f, 1f));
// load cone, set up bounding volume
Model _cone = DAEReader.read("resources/tests/models/cone", "cone.dae");
// _barrel.getImportTransformationsMatrix().scale(2f);
ConvexMesh coneBoundingVolume = new ConvexMesh(new Object3DModel(_cone));
// set up cone 1 in 3d engine
entity = new Object3D("cone1", _cone);
entity.setDynamicShadowingEnabled(true);
entity.getTranslation().addY(5f);
entity.getTranslation().addX(-4f);
entity.getScale().set(3f, 3f, 3f);
entity.update();
engine.addEntity(entity);
world.addRigidBody("cone1", true, RIGID_TYPEID_STANDARD, entity, coneBoundingVolume, 0f, 1f, 100f, RigidBody.computeInertiaMatrix(coneBoundingVolume, 100f, 1f, 1f, 1f));
// set up cone 1 in 3d engine
entity = new Object3D("cone2", _cone);
entity.setDynamicShadowingEnabled(true);
entity.getTranslation().addY(5f);
entity.getTranslation().addX(-5f);
entity.getScale().set(3f, 3f, 3f);
entity.update();
engine.addEntity(entity);
world.addRigidBody("cone2", true, RIGID_TYPEID_STANDARD, entity, coneBoundingVolume, 0f, 1f, 100f, RigidBody.computeInertiaMatrix(coneBoundingVolume, 100f, 1f, 1f, 1f));
// load cone, set up bounding volume
Model _tire = DAEReader.read("resources/tests/models/tire", "tire.dae");
// _barrel.getImportTransformationsMatrix().scale(2f);
ConvexMesh tireBoundingVolume = new ConvexMesh(new Object3DModel(_tire));
// set up tire 1 in 3d engine
entity = new Object3D("tire1", _tire);
entity.setDynamicShadowingEnabled(true);
entity.getRotations().add(new Rotation(90f, new Vector3(1f, 0f, 0f)));
entity.getTranslation().addY(5f);
entity.getTranslation().addX(-4f);
entity.getTranslation().addZ(-2f);
entity.getScale().set(2f, 2f, 2f);
entity.update();
engine.addEntity(entity);
world.addRigidBody("tire1", true, RIGID_TYPEID_STANDARD, entity, tireBoundingVolume, 0f, 1f, 100f, RigidBody.computeInertiaMatrix(tireBoundingVolume, 100f, 1f, 1f, 1f));
// set up tire 1 in 3d engine
entity = new Object3D("tire2", _tire);
entity.setDynamicShadowingEnabled(true);
entity.getRotations().add(new Rotation(90f, new Vector3(1f, 0f, 0f)));
entity.getTranslation().addY(5f);
entity.getTranslation().addX(-6f);
entity.getTranslation().addZ(-2f);
entity.getScale().set(2f, 2f, 2f);
entity.update();
engine.addEntity(entity);
world.addRigidBody("tire2", true, RIGID_TYPEID_STANDARD, entity, tireBoundingVolume, 0f, 1f, 100f, RigidBody.computeInertiaMatrix(tireBoundingVolume, 100f, 1f, 1f, 1f));
} catch (Exception e) {
e.printStackTrace();
}
}
use of net.drewke.tdme.engine.Object3D 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);
}
use of net.drewke.tdme.engine.Object3D in project tdme by andreasdr.
the class LevelEditorView method pasteObjects.
/**
* Paste objects
*/
private void pasteObjects() {
// determine top left of paste objects
float pasteObjectsMinX = Float.MAX_VALUE;
float pasteObjectsMinZ = Float.MAX_VALUE;
float pasteObjectsMinY = Float.MIN_VALUE;
for (LevelEditorObject object : pasteObjects) {
BoundingVolume obv = object.getEntity().getModel().getBoundingBox();
BoundingVolume cbv = obv.clone();
cbv.fromBoundingVolumeWithTransformations(obv, object.getTransformations());
float[] objectBBMinXYZ = ((BoundingBox) cbv).getMin().getArray();
if (objectBBMinXYZ[0] < pasteObjectsMinX)
pasteObjectsMinX = objectBBMinXYZ[0];
if (objectBBMinXYZ[1] < pasteObjectsMinY)
pasteObjectsMinY = objectBBMinXYZ[1];
if (objectBBMinXYZ[2] < pasteObjectsMinZ)
pasteObjectsMinZ = objectBBMinXYZ[2];
}
// determine top left of selected objects
float selectedObjectsMinX = Float.MAX_VALUE;
float selectedObjectsMinZ = Float.MAX_VALUE;
float selectedObjectsMaxY = Float.MIN_VALUE;
for (Entity object : selectedObjects) {
LevelEditorObject levelEditorObject = level.getObjectById(object.getId());
if (levelEditorObject == null)
continue;
BoundingVolume obv = levelEditorObject.getEntity().getModel().getBoundingBox();
BoundingVolume cbv = obv.clone();
cbv.fromBoundingVolumeWithTransformations(obv, levelEditorObject.getTransformations());
float[] objectBBMinXYZ = ((BoundingBox) cbv).getMin().getArray();
float[] objectBBMaxXYZ = ((BoundingBox) cbv).getMax().getArray();
if (objectBBMinXYZ[0] < selectedObjectsMinX)
selectedObjectsMinX = objectBBMinXYZ[0];
if (objectBBMaxXYZ[1] > selectedObjectsMaxY)
selectedObjectsMaxY = objectBBMaxXYZ[1];
if (objectBBMinXYZ[2] < selectedObjectsMinZ)
selectedObjectsMinZ = objectBBMinXYZ[2];
}
// paste objects
for (LevelEditorObject pasteObject : pasteObjects) {
// get selected level entity if it is one
LevelEditorEntity pasteModel = pasteObject.getEntity();
// create level entity, copy transformations from original
Transformations levelEditorObjectTransformations = new Transformations();
levelEditorObjectTransformations.fromTransformations(pasteObject.getTransformations());
// compute new translation
float objectDiffX = pasteObject.getTransformations().getTranslation().getX() - pasteObjectsMinX;
float objectDiffY = pasteObject.getTransformations().getTranslation().getY() - pasteObjectsMinY;
float objectDiffZ = pasteObject.getTransformations().getTranslation().getZ() - pasteObjectsMinZ;
levelEditorObjectTransformations.getTranslation().setX(selectedObjectsMinX + objectDiffX);
levelEditorObjectTransformations.getTranslation().setY(selectedObjectsMaxY + objectDiffY);
levelEditorObjectTransformations.getTranslation().setZ(selectedObjectsMinZ + objectDiffZ);
levelEditorObjectTransformations.update();
// check if entity already exists
for (int i = 0; i < level.getObjectCount(); i++) {
LevelEditorObject levelEditorObject = level.getObjectAt(i);
if (levelEditorObject.getEntity() == pasteModel && levelEditorObject.getTransformations().getTranslation().equals(levelEditorObjectTransformations.getTranslation())) {
// we already have a object with selected model on this translation
return;
}
}
// create new level editor object
LevelEditorObject levelEditorObject = new LevelEditorObject(pasteModel.getName() + "_" + level.allocateObjectId(), "", levelEditorObjectTransformations, pasteModel);
// copy properties
for (PropertyModelClass property : pasteObject.getProperties()) {
levelEditorObject.addProperty(property.getName(), property.getValue());
}
// add to level
level.addObject(levelEditorObject);
// add to 3d engine
Object3D object = new Object3D(levelEditorObject.getId(), levelEditorObject.getEntity().getModel());
object.fromTransformations(levelEditorObjectTransformations);
object.setPickable(true);
engine.addEntity(object);
}
// add to objects listbox
levelEditorScreenController.setObjectListbox(level.getObjectIdsIterator());
}
use of net.drewke.tdme.engine.Object3D in project tdme by andreasdr.
the class Level method addLevel.
/**
* Add level to engine
* @param engine
* @param level
* @param add empties
* @param add trigger
* @param dynamic shadowing
* @param pickable
* @param translation
*/
public static void addLevel(Engine engine, LevelEditorLevel level, boolean addEmpties, boolean addTrigger, boolean dynamicShadowing, boolean pickable, Vector3 translation) {
// load level objects
for (int i = 0; i < level.getObjectCount(); i++) {
LevelEditorObject object = level.getObjectAt(i);
Properties properties = object.getTotalProperties();
// skip on empties or trigger
if (addEmpties == false && object.getEntity().getType() == EntityType.EMPTY)
continue;
if (addTrigger == false && object.getEntity().getType() == EntityType.TRIGGER)
continue;
// add to 3d engine
Entity entity = null;
if (object.getEntity().getModel() != null) {
entity = new Object3D(object.getId(), object.getEntity().getModel());
} else if (object.getEntity().getType() == EntityType.PARTICLESYSTEM) {
entity = createParticleSystem(object.getEntity().getParticleSystem(), object.getId(), false);
}
// skip if we have no entity
if (entity == null)
continue;
// apply transformations
entity.fromTransformations(object.getTransformations());
// apply translation
if (translation != null) {
entity.getTranslation().add(translation);
}
// pickable
entity.setPickable(pickable);
// dynamic shadowing
PropertyModelClass shadowingProperty = properties.getProperty("shadowing");
boolean omitShadowing = shadowingProperty != null && shadowingProperty.getValue().equalsIgnoreCase("false");
entity.setDynamicShadowingEnabled(omitShadowing == true ? false : dynamicShadowing);
// do not scale empties
if (object.getEntity().getType() == EntityType.EMPTY) {
entity.getScale().set(MathTools.sign(entity.getScale().getX()), MathTools.sign(entity.getScale().getY()), MathTools.sign(entity.getScale().getZ()));
}
// update
entity.update();
// add
engine.addEntity(entity);
}
}
Aggregations