partway to floating island object
This commit is contained in:
parent
bbb2325e86
commit
2049692634
@ -2,7 +2,7 @@
|
||||
"objects" : [
|
||||
|
||||
{
|
||||
"itemId" : "crateWooden",
|
||||
"objectId" : "crateWooden",
|
||||
"modelPath" : "Models/crate2.fbx",
|
||||
"tokens" : [
|
||||
"GRAVITY",
|
||||
@ -19,5 +19,8 @@
|
||||
}
|
||||
}
|
||||
|
||||
],
|
||||
"files" : [
|
||||
"Data/objects/floatingisland.json"
|
||||
]
|
||||
}
|
||||
24
assets/Data/objects/floatingisland.json
Normal file
24
assets/Data/objects/floatingisland.json
Normal file
@ -0,0 +1,24 @@
|
||||
{
|
||||
"objects" : [
|
||||
|
||||
{
|
||||
"objectId" : "floatingisland1",
|
||||
"modelPath" : "Models/floatingisland1.fbx",
|
||||
"tokens" : [
|
||||
"DISABLE_COLLISION_REACTION",
|
||||
"TERRAIN_COLLISION"
|
||||
],
|
||||
"collidable": {
|
||||
"type" : "CYLINDER",
|
||||
"dimension1" : 1.7,
|
||||
"dimension2" : 1.7,
|
||||
"dimension3" : 1.7,
|
||||
"offsetX" : 0,
|
||||
"offsetY" : -1.7,
|
||||
"offsetZ" : 0
|
||||
}
|
||||
}
|
||||
|
||||
],
|
||||
"files" : []
|
||||
}
|
||||
BIN
assets/Models/floatingisland1.fbx
Normal file
BIN
assets/Models/floatingisland1.fbx
Normal file
Binary file not shown.
@ -407,6 +407,12 @@
|
||||
"/Textures/shrine2Stairs.png",
|
||||
"/Textures/shrine2Stairs.png"
|
||||
]
|
||||
},
|
||||
"Models/floatingisland1.fbx" : {
|
||||
"Cube" : [
|
||||
"/Textures/floatingisland1.png",
|
||||
"/Textures/floatingisland1.png"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
assets/Textures/floatingisland1.png
Normal file
BIN
assets/Textures/floatingisland1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.5 MiB |
@ -13,6 +13,7 @@ import electrosphere.game.collision.CollisionEngine;
|
||||
import electrosphere.entity.types.creature.CreatureUtils;
|
||||
import electrosphere.entity.types.debug.DebugVisualizerUtils;
|
||||
import electrosphere.entity.types.item.ItemUtils;
|
||||
import electrosphere.entity.types.object.ObjectUtils;
|
||||
import electrosphere.game.client.cells.DrawCellManager;
|
||||
import electrosphere.game.client.player.ClientPlayerData;
|
||||
import electrosphere.game.client.terrain.manager.ClientTerrainManager;
|
||||
@ -677,7 +678,11 @@ public class LoadingThread extends Thread {
|
||||
EntityUtils.initiallyPositionEntity(sword, new Vector3d(1,0.4f,2));
|
||||
EntityUtils.getRotation(sword).set(new Quaternionf().rotationY((float)(Math.PI/2.0)));
|
||||
|
||||
|
||||
//floating island 1
|
||||
Entity island1 = ObjectUtils.spawnBasicObject("floatingisland1");
|
||||
EntityUtils.getRotation(island1).set(new Quaternionf().rotationX(-(float)(Math.PI/2.0)));
|
||||
EntityUtils.getScale(island1).set(0.3f);
|
||||
EntityUtils.initiallyPositionEntity(island1, new Vector3d(5,0.5,5));
|
||||
|
||||
//work on ez volumetrics shader
|
||||
// Entity myCube = EntityUtils.spawnDrawableEntity("Models/unitcube.fbx");
|
||||
|
||||
@ -144,6 +144,10 @@ public class EntityManager {
|
||||
public List<Entity> getCollidables(){
|
||||
return collidableList;
|
||||
}
|
||||
|
||||
public void deregisterCollidableEntity(Entity e){
|
||||
collidableList.remove(e);
|
||||
}
|
||||
|
||||
public void registerTargetableEntity(Entity e){
|
||||
targetableList.add(e);
|
||||
|
||||
@ -143,7 +143,7 @@ public class EntityUtils {
|
||||
}
|
||||
}
|
||||
//reposition entity
|
||||
CollisionObjUtils.positionCharacter(entity, Globals.spawnPoint);
|
||||
CollisionObjUtils.positionCharacter(entity, position);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -33,15 +33,24 @@ public class CollidableTree {
|
||||
Collidable collidable;
|
||||
Quaternionf angularVelocity = new Quaternionf(0,0,0,0);
|
||||
Vector4d cumulativeTorque = new Vector4d(0,0,0,0);
|
||||
|
||||
boolean applyImpulses = true;
|
||||
|
||||
static final float DELTA_T = 0.01f;
|
||||
|
||||
|
||||
public CollidableTree(Entity e, Collidable collidable, CollisionObject body){
|
||||
parent = e;
|
||||
this.collidable = collidable;
|
||||
this.body = body;
|
||||
}
|
||||
|
||||
public CollidableTree(Entity e, Collidable collidable, CollisionObject body, boolean applyImpulses){
|
||||
parent = e;
|
||||
this.collidable = collidable;
|
||||
this.body = body;
|
||||
this.applyImpulses = applyImpulses;
|
||||
}
|
||||
|
||||
static int incrementer = 0;
|
||||
|
||||
public void simulate(){
|
||||
@ -186,7 +195,9 @@ public class CollidableTree {
|
||||
}
|
||||
|
||||
//make sure we're in a valid (World bounds) position
|
||||
newPosition.add(offsetVector);
|
||||
if(applyImpulses){
|
||||
newPosition.add(offsetVector);
|
||||
}
|
||||
if(!Globals.collisionEngine.checkCanOccupyPosition(Globals.commonWorldData, parent, newPosition)){
|
||||
newPosition = Globals.collisionEngine.suggestMovementPosition(Globals.commonWorldData, parent, newPosition);
|
||||
}
|
||||
|
||||
@ -178,7 +178,9 @@ public class CollisionObjUtils {
|
||||
EntityUtils.getPosition(e).set(position);
|
||||
Quaternionf rotation = EntityUtils.getRotation(e);
|
||||
CollisionObject body = getCollisionBody(e);
|
||||
PhysicsUtils.setRigidBodyTransform(new Vector3f((float)position.x,(float)position.y,(float)position.z), rotation, body);
|
||||
if(body != null){
|
||||
PhysicsUtils.setRigidBodyTransform(new Vector3f((float)position.x,(float)position.y,(float)position.z), rotation, body);
|
||||
}
|
||||
}
|
||||
|
||||
public static Collidable getCollidable(Entity e){
|
||||
|
||||
133
src/main/java/electrosphere/entity/types/object/ObjectUtils.java
Normal file
133
src/main/java/electrosphere/entity/types/object/ObjectUtils.java
Normal file
@ -0,0 +1,133 @@
|
||||
package electrosphere.entity.types.object;
|
||||
|
||||
import org.joml.Matrix4f;
|
||||
import org.joml.Vector3f;
|
||||
|
||||
import electrosphere.collision.dispatch.CollisionObject;
|
||||
import electrosphere.entity.Entity;
|
||||
import electrosphere.entity.EntityDataStrings;
|
||||
import electrosphere.entity.EntityUtils;
|
||||
import electrosphere.entity.state.IdleTree;
|
||||
import electrosphere.entity.state.collidable.CollidableTree;
|
||||
import electrosphere.entity.state.gravity.GravityTree;
|
||||
import electrosphere.entity.state.inventory.InventoryState;
|
||||
import electrosphere.entity.state.inventory.InventoryUtils;
|
||||
import electrosphere.entity.state.inventory.UnrelationalInventoryState;
|
||||
import electrosphere.entity.state.life.LifeState;
|
||||
import electrosphere.entity.types.collision.CollisionObjUtils;
|
||||
import electrosphere.game.collision.PhysicsUtils;
|
||||
import electrosphere.game.collision.collidable.Collidable;
|
||||
import electrosphere.game.data.creature.type.CollidableTemplate;
|
||||
import electrosphere.game.data.object.type.ObjectData;
|
||||
import electrosphere.main.Globals;
|
||||
import electrosphere.renderer.actor.Actor;
|
||||
import electrosphere.renderer.actor.ActorUtils;
|
||||
|
||||
public class ObjectUtils {
|
||||
|
||||
public static Entity spawnBasicObject(String type){
|
||||
ObjectData rawType = Globals.gameConfigCurrent.getObjectTypeLoader().getObject(type);
|
||||
Entity rVal = EntityUtils.spawnDrawableEntity(rawType.getModelPath());
|
||||
Actor creatureActor = EntityUtils.getActor(rVal);
|
||||
//forward-searching tokens
|
||||
boolean collisionMakeDynamic = true;
|
||||
for(String token : rawType.getTokens()){
|
||||
switch(token){
|
||||
case "DISABLE_COLLISION_REACTION": {
|
||||
collisionMakeDynamic = false;
|
||||
} break;
|
||||
}
|
||||
}
|
||||
//main entity construction
|
||||
if(rawType.getCollidable() != null){
|
||||
CollidableTemplate physicsTemplate = rawType.getCollidable();
|
||||
CollisionObject rigidBody;
|
||||
Collidable collidable;
|
||||
float mass = 1.0f;
|
||||
Matrix4f inertiaTensor;
|
||||
Vector3f scale;
|
||||
switch(physicsTemplate.getType()){
|
||||
case "CYLINDER":
|
||||
rigidBody = PhysicsUtils.getCylinderObject(new Vector3f(physicsTemplate.getDimension1(),physicsTemplate.getDimension2(),physicsTemplate.getDimension3()));
|
||||
collidable = new Collidable(rVal, Collidable.TYPE_OBJECT);
|
||||
rVal.putData(EntityDataStrings.PHYSICS_COLLISION_BODY, rigidBody);
|
||||
rVal.putData(EntityDataStrings.PHYSICS_COLLISION_BODY_OFFSET, new Vector3f(physicsTemplate.getOffsetX(),physicsTemplate.getOffsetY(),physicsTemplate.getOffsetZ()));
|
||||
rVal.putData(EntityDataStrings.PHYSICS_MODEL_TEMPLATE, physicsTemplate);
|
||||
rVal.putData(EntityDataStrings.PHYSICS_COLLIDABLE, collidable);
|
||||
rVal.putData(EntityDataStrings.COLLIDABLE_TREE, new CollidableTree(rVal,collidable,rigidBody, collisionMakeDynamic));
|
||||
|
||||
scale = new Vector3f(physicsTemplate.getDimension1(),physicsTemplate.getDimension2(),physicsTemplate.getDimension3());
|
||||
rVal.putData(EntityDataStrings.PHYSICS_MASS, mass);
|
||||
//inertia tensor
|
||||
//https://scienceworld.wolfram.com/physics/MomentofInertiaCylinder.html
|
||||
inertiaTensor = new Matrix4f();
|
||||
inertiaTensor.m00(mass * scale.y * scale.y / 12.0f + mass * scale.x * scale.x / 4.0f);
|
||||
inertiaTensor.m11(mass * scale.y * scale.y / 12.0f + mass * scale.x * scale.x / 4.0f);
|
||||
inertiaTensor.m22(mass * scale.x * scale.x / 2.0f);
|
||||
rVal.putData(EntityDataStrings.PHYSICS_INVERSE_INERTIA_TENSOR, inertiaTensor.invert());
|
||||
|
||||
Globals.collisionEngine.registerPhysicsEntity(rVal);
|
||||
Globals.collisionEngine.registerCollisionObject(rigidBody, collidable);
|
||||
break;
|
||||
case "CUBE":
|
||||
rigidBody = PhysicsUtils.getCubeObject(new Vector3f(physicsTemplate.getDimension1(),physicsTemplate.getDimension2(),physicsTemplate.getDimension3()));
|
||||
collidable = new Collidable(rVal, Collidable.TYPE_OBJECT);
|
||||
rVal.putData(EntityDataStrings.PHYSICS_COLLISION_BODY, rigidBody);
|
||||
rVal.putData(EntityDataStrings.PHYSICS_COLLISION_BODY_OFFSET, new Vector3f(physicsTemplate.getOffsetX(),physicsTemplate.getOffsetY(),physicsTemplate.getOffsetZ()));
|
||||
rVal.putData(EntityDataStrings.PHYSICS_MODEL_TEMPLATE, physicsTemplate);
|
||||
rVal.putData(EntityDataStrings.PHYSICS_COLLIDABLE, collidable);
|
||||
rVal.putData(EntityDataStrings.COLLIDABLE_TREE, new CollidableTree(rVal,collidable,rigidBody, collisionMakeDynamic));
|
||||
|
||||
scale = new Vector3f(physicsTemplate.getDimension1(),physicsTemplate.getDimension2(),physicsTemplate.getDimension3());
|
||||
rVal.putData(EntityDataStrings.PHYSICS_MASS, mass);
|
||||
//inertia tensor
|
||||
//https://hepweb.ucsd.edu/ph110b/110b_notes/node26.html
|
||||
inertiaTensor = new Matrix4f().identity().scale(mass * scale.x * scale.x / 6.0f).m33(1);
|
||||
rVal.putData(EntityDataStrings.PHYSICS_INVERSE_INERTIA_TENSOR, inertiaTensor.invert());
|
||||
|
||||
Globals.collisionEngine.registerPhysicsEntity(rVal);
|
||||
Globals.collisionEngine.registerCollisionObject(rigidBody, collidable);
|
||||
break;
|
||||
}
|
||||
Globals.collisionEngine.registerDynamicPhysicsEntity(rVal);
|
||||
Globals.entityManager.registerCollidableEntity(rVal);
|
||||
}
|
||||
for(String token : rawType.getTokens()){
|
||||
switch(token){
|
||||
case "BLENDER_TRANSFORM":
|
||||
ActorUtils.applyBlenderTransformer(rVal);
|
||||
break;
|
||||
case "GRAVITY":
|
||||
Collidable collidable = (Collidable)rVal.getData(EntityDataStrings.PHYSICS_COLLIDABLE);
|
||||
CollisionObject collisionObject = (CollisionObject)rVal.getData(EntityDataStrings.PHYSICS_COLLISION_BODY);
|
||||
GravityTree gravityTree = new GravityTree(rVal,collidable,collisionObject,30);
|
||||
// gravityTree.setCollisionObject(collisionObject, collidable);
|
||||
rVal.putData(EntityDataStrings.GRAVITY_ENTITY, true);
|
||||
rVal.putData(EntityDataStrings.GRAVITY_TREE, gravityTree);
|
||||
Globals.entityManager.registerGravityEntity(rVal);
|
||||
break;
|
||||
case "TARGETABLE":
|
||||
Globals.entityManager.registerTargetableEntity(rVal);
|
||||
break;
|
||||
case "INVENTORY":
|
||||
rVal.putData(EntityDataStrings.NATURAL_INVENTORY,UnrelationalInventoryState.createUnrelationalInventory(10));
|
||||
InventoryUtils.setInventoryState(rVal, InventoryState.createInventoryState(rVal));
|
||||
break;
|
||||
case "OUTLINE":
|
||||
rVal.putData(EntityDataStrings.DRAW_OUTLINE, true);
|
||||
break;
|
||||
case "TERRAIN_COLLISION": {
|
||||
CollisionObjUtils.getCollidable(rVal).overrideType(Collidable.TYPE_TERRAIN);
|
||||
} break;
|
||||
}
|
||||
}
|
||||
//add health system
|
||||
// rVal.putData(EntityDataStrings.LIFE_STATE, new LifeState(rVal, rawType.getHealthSystem()));
|
||||
// Globals.entityManager.registerLifeStateEntity(rVal);
|
||||
//idle tree & generic stuff all objects have
|
||||
rVal.putData(EntityDataStrings.IDLE_TREE, new IdleTree(rVal));
|
||||
rVal.putData(EntityDataStrings.DRAW_CAST_SHADOW, true);
|
||||
return rVal;
|
||||
}
|
||||
|
||||
}
|
||||
@ -151,6 +151,9 @@ public class CollisionEngine {
|
||||
case Collidable.TYPE_ITEM:
|
||||
receiver.addImpulse(new Impulse(normal, localPosition, worldPos, magnitude, Collidable.TYPE_ITEM));
|
||||
break;
|
||||
case Collidable.TYPE_OBJECT:
|
||||
receiver.addImpulse(new Impulse(normal, localPosition, worldPos, magnitude, Collidable.TYPE_OBJECT));
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case Collidable.TYPE_ITEM:
|
||||
@ -177,6 +180,9 @@ public class CollisionEngine {
|
||||
case Collidable.TYPE_ITEM:
|
||||
receiver.addImpulse(new Impulse(normal, localPosition, worldPos, magnitude, Collidable.TYPE_ITEM));
|
||||
break;
|
||||
case Collidable.TYPE_OBJECT:
|
||||
receiver.addImpulse(new Impulse(normal, localPosition, worldPos, magnitude, Collidable.TYPE_OBJECT));
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -296,6 +302,10 @@ public class CollisionEngine {
|
||||
public void registerDynamicPhysicsEntity(Entity dynamicEntity){
|
||||
dynamicPhysicsEntities.add(dynamicEntity);
|
||||
}
|
||||
|
||||
public void deregisterDynamicPhysicsEntity(Entity dynamicEntity){
|
||||
dynamicPhysicsEntities.remove(dynamicEntity);
|
||||
}
|
||||
|
||||
public List<Entity> getDynamicPhysicsEntities(){
|
||||
return dynamicPhysicsEntities;
|
||||
|
||||
@ -28,6 +28,7 @@ public class Collidable {
|
||||
public static final String TYPE_STRUCTURE = "structure";
|
||||
public static final String TYPE_ITEM = "item";
|
||||
public static final String TYPE_FORCE = "force";
|
||||
public static final String TYPE_OBJECT = "object";
|
||||
|
||||
|
||||
public Collidable(Entity parent, String type){
|
||||
@ -50,6 +51,10 @@ public class Collidable {
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void overrideType(String type){
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public void clear(){
|
||||
impulses.clear();
|
||||
|
||||
@ -9,6 +9,8 @@ import electrosphere.game.data.creature.type.attack.AttackMoveResolver;
|
||||
import electrosphere.game.data.creature.type.model.CreatureTypeMap;
|
||||
import electrosphere.game.data.foliage.type.model.FoliageTypeMap;
|
||||
import electrosphere.game.data.item.type.model.ItemTypeMap;
|
||||
import electrosphere.game.data.object.type.ObjectData;
|
||||
import electrosphere.game.data.object.type.model.ObjectTypeLoader;
|
||||
import electrosphere.game.data.object.type.model.ObjectTypeMap;
|
||||
import electrosphere.game.data.structure.type.model.StructureTypeMap;
|
||||
import electrosphere.game.server.race.model.RaceMap;
|
||||
@ -25,7 +27,7 @@ public class Config {
|
||||
StructureTypeMap structureTypeMap;
|
||||
ItemTypeMap itemMap;
|
||||
FoliageTypeMap foliageMap;
|
||||
ObjectTypeMap objectMap;
|
||||
ObjectTypeLoader objectTypeLoader;
|
||||
SymbolMap symbolMap;
|
||||
RaceMap raceMap;
|
||||
|
||||
@ -35,7 +37,7 @@ public class Config {
|
||||
config.itemMap = FileUtils.loadObjectFromAssetPath("Data/items.json", ItemTypeMap.class);
|
||||
config.structureTypeMap = FileUtils.loadObjectFromAssetPath("Data/structures.json", StructureTypeMap.class);
|
||||
config.foliageMap = FileUtils.loadObjectFromAssetPath("Data/foliage.json", FoliageTypeMap.class);
|
||||
config.objectMap = FileUtils.loadObjectFromAssetPath("Data/objects.json", ObjectTypeMap.class);
|
||||
config.objectTypeLoader = loadObjectTypes("Data/objects.json");
|
||||
config.symbolMap = FileUtils.loadObjectFromAssetPath("Data/symbolism.json", SymbolMap.class);
|
||||
config.raceMap = FileUtils.loadObjectFromAssetPath("Data/races.json", RaceMap.class);
|
||||
return config;
|
||||
@ -76,6 +78,32 @@ public class Config {
|
||||
return loader;
|
||||
}
|
||||
|
||||
static List<ObjectData> readObjectTypeFile(String filename){
|
||||
List<ObjectData> typeList = new LinkedList<ObjectData>();
|
||||
ObjectTypeMap typeMap = FileUtils.loadObjectFromAssetPath(filename, ObjectTypeMap.class);
|
||||
//push the types from this file
|
||||
for(ObjectData type : typeMap.getObjects()){
|
||||
typeList.add(type);
|
||||
}
|
||||
//push types from any other files
|
||||
for(String filepath : typeMap.getFiles()){
|
||||
List<ObjectData> parsedTypeList = readObjectTypeFile(filepath);
|
||||
for(ObjectData type : parsedTypeList){
|
||||
typeList.add(type);
|
||||
}
|
||||
}
|
||||
return typeList;
|
||||
}
|
||||
|
||||
static ObjectTypeLoader loadObjectTypes(String initialPath) {
|
||||
ObjectTypeLoader loader = new ObjectTypeLoader();
|
||||
List<ObjectData> typeList = readObjectTypeFile(initialPath);
|
||||
for(ObjectData type : typeList){
|
||||
loader.putObject(type.getObjectId(), type);
|
||||
}
|
||||
return loader;
|
||||
}
|
||||
|
||||
public CreatureTypeLoader getCreatureTypeLoader() {
|
||||
return creatureTypeLoader;
|
||||
}
|
||||
@ -99,5 +127,9 @@ public class Config {
|
||||
public RaceMap getRaceMap() {
|
||||
return raceMap;
|
||||
}
|
||||
|
||||
public ObjectTypeLoader getObjectTypeLoader() {
|
||||
return objectTypeLoader;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -4,7 +4,7 @@ import electrosphere.entity.types.hitbox.HitboxData;
|
||||
import electrosphere.game.data.creature.type.CollidableTemplate;
|
||||
import java.util.List;
|
||||
|
||||
public class Object {
|
||||
public class ObjectData {
|
||||
|
||||
String objectId;
|
||||
String modelPath;
|
||||
@ -0,0 +1,22 @@
|
||||
package electrosphere.game.data.object.type.model;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import electrosphere.game.data.object.type.ObjectData;
|
||||
|
||||
public class ObjectTypeLoader {
|
||||
|
||||
Map<String,ObjectData> objectMap = new HashMap<String,ObjectData>();
|
||||
|
||||
public void putObject(String name, ObjectData type){
|
||||
objectMap.put(name,type);
|
||||
}
|
||||
|
||||
public ObjectData getObject(String name){
|
||||
return objectMap.get(name);
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,18 +1,20 @@
|
||||
package electrosphere.game.data.object.type.model;
|
||||
|
||||
import electrosphere.game.data.object.type.Object;
|
||||
import electrosphere.game.data.object.type.ObjectData;
|
||||
import java.util.List;
|
||||
|
||||
public class ObjectTypeMap {
|
||||
List<Object> objects;
|
||||
|
||||
public List<Object> getObjects() {
|
||||
List<ObjectData> objects;
|
||||
List<String> files;
|
||||
|
||||
public List<ObjectData> getObjects() {
|
||||
return objects;
|
||||
}
|
||||
|
||||
public Object getObject(String name){
|
||||
Object rVal = null;
|
||||
for(Object item : objects){
|
||||
public ObjectData getObject(String name){
|
||||
ObjectData rVal = null;
|
||||
for(ObjectData item : objects){
|
||||
if(item.getObjectId().equals(name)){
|
||||
rVal = item;
|
||||
break;
|
||||
@ -20,5 +22,9 @@ public class ObjectTypeMap {
|
||||
}
|
||||
return rVal;
|
||||
}
|
||||
|
||||
public List<String> getFiles(){
|
||||
return files;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -784,7 +784,7 @@ public class RenderingEngine {
|
||||
// Vector3f scale = EntityUtils.getScale(physicsEntity);
|
||||
Quaternionf rotation = EntityUtils.getRotation(physicsEntity);
|
||||
//calculate camera-modified vector3f
|
||||
Vector3f cameraModifiedPosition = new Vector3f((float)position.x,(float)position.y,(float)position.z).sub(CameraEntityUtils.getCameraCenter(Globals.playerCamera));
|
||||
Vector3f cameraModifiedPosition = new Vector3f((float)position.x,(float)position.y,(float)position.z).add(template.getOffsetX(),template.getOffsetY(),template.getOffsetZ()).sub(CameraEntityUtils.getCameraCenter(Globals.playerCamera));
|
||||
modelTransformMatrix.identity();
|
||||
modelTransformMatrix.translate(cameraModifiedPosition);
|
||||
modelTransformMatrix.rotate(rotation);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user