stable load and save for components
parent
6c2a6a38ac
commit
5a9e24a798
|
@ -30,15 +30,16 @@
|
||||||
* @param currentPosition
|
* @param currentPosition
|
||||||
* @constructor
|
* @constructor
|
||||||
*/
|
*/
|
||||||
GameLib.D3.API.ComponentInterface = function(
|
GameLib.D3.API.Component = function(
|
||||||
// General
|
// General
|
||||||
id,
|
id,
|
||||||
name,
|
name,
|
||||||
componentType,
|
componentType,
|
||||||
|
parentEntity,
|
||||||
|
|
||||||
// Camera Component
|
// Camera Component
|
||||||
camera,
|
camera,
|
||||||
parentEntity,
|
|
||||||
|
|
||||||
// Follow Component
|
// Follow Component
|
||||||
targetEntity,
|
targetEntity,
|
||||||
|
@ -83,7 +84,7 @@ GameLib.D3.API.ComponentInterface = function(
|
||||||
this.name = name;
|
this.name = name;
|
||||||
|
|
||||||
if (GameLib.D3.Utils.UndefinedOrNull(componentType)) {
|
if (GameLib.D3.Utils.UndefinedOrNull(componentType)) {
|
||||||
componentType = GameLib.D3.ComponentInterface.COMPONENT_INTERFACE;
|
componentType = GameLib.D3.Component.COMPONENT_INTERFACE;
|
||||||
}
|
}
|
||||||
this.componentType = componentType;
|
this.componentType = componentType;
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
/**
|
/**
|
||||||
* Entity API
|
* Entity API Object (for storing / loading entities to and from API)
|
||||||
* @param id
|
* @param id
|
||||||
* @param name
|
* @param name
|
||||||
* @param ids
|
* @param components GameLib.D3.Component[]
|
||||||
* @param position
|
* @param position
|
||||||
* @param quaternion
|
* @param quaternion
|
||||||
* @param scale
|
* @param scale
|
||||||
|
@ -10,10 +10,10 @@
|
||||||
* @param mesh GameLib.D3.Mesh
|
* @param mesh GameLib.D3.Mesh
|
||||||
* @constructor
|
* @constructor
|
||||||
*/
|
*/
|
||||||
GameLib.D3.API.Entity = function Entity(
|
GameLib.D3.API.Entity = function(
|
||||||
id,
|
id,
|
||||||
name,
|
name,
|
||||||
ids,
|
components,
|
||||||
position,
|
position,
|
||||||
quaternion,
|
quaternion,
|
||||||
scale,
|
scale,
|
||||||
|
@ -30,10 +30,10 @@ GameLib.D3.API.Entity = function Entity(
|
||||||
}
|
}
|
||||||
this.name = name;
|
this.name = name;
|
||||||
|
|
||||||
if (GameLib.D3.Utils.UndefinedOrNull(ids)) {
|
if (GameLib.D3.Utils.UndefinedOrNull(components)) {
|
||||||
ids = [];
|
components = [];
|
||||||
}
|
}
|
||||||
this.ids = ids;
|
this.components = components;
|
||||||
|
|
||||||
if(GameLib.D3.Utils.UndefinedOrNull(position)) {
|
if(GameLib.D3.Utils.UndefinedOrNull(position)) {
|
||||||
position = new GameLib.D3.API.Vector3();
|
position = new GameLib.D3.API.Vector3();
|
||||||
|
@ -50,7 +50,6 @@ GameLib.D3.API.Entity = function Entity(
|
||||||
}
|
}
|
||||||
this.scale = scale;
|
this.scale = scale;
|
||||||
|
|
||||||
|
|
||||||
if (GameLib.D3.Utils.UndefinedOrNull(parentScene)) {
|
if (GameLib.D3.Utils.UndefinedOrNull(parentScene)) {
|
||||||
parentScene = null;
|
parentScene = null;
|
||||||
}
|
}
|
||||||
|
@ -61,44 +60,3 @@ GameLib.D3.API.Entity = function Entity(
|
||||||
}
|
}
|
||||||
this.mesh = mesh;
|
this.mesh = mesh;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
GameLib.D3.Entity = function Entity(
|
|
||||||
id,
|
|
||||||
name,
|
|
||||||
ids,
|
|
||||||
position,
|
|
||||||
quaternion,
|
|
||||||
scale
|
|
||||||
) {
|
|
||||||
this.id = id;
|
|
||||||
|
|
||||||
if (GameLib.D3.Utils.UndefinedOrNull(name)) {
|
|
||||||
name = this.constructor.name;
|
|
||||||
}
|
|
||||||
this.name = name;
|
|
||||||
|
|
||||||
if (GameLib.D3.Utils.UndefinedOrNull(ids)) {
|
|
||||||
ids = [];
|
|
||||||
}
|
|
||||||
this.ids = ids;
|
|
||||||
|
|
||||||
// constructed at runtime
|
|
||||||
this.parentScene = null;
|
|
||||||
this.mesh = null;
|
|
||||||
|
|
||||||
if(GameLib.D3.Utils.UndefinedOrNull(position)) {
|
|
||||||
position = new GameLib.D3.API.Vector3(0, 0, 0);
|
|
||||||
}
|
|
||||||
this.position = position;
|
|
||||||
|
|
||||||
if(GameLib.D3.Utils.UndefinedOrNull(quaternion)) {
|
|
||||||
quaternion = new GameLib.D3.API.Quaternion(0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
this.quaternion = quaternion;
|
|
||||||
|
|
||||||
if(GameLib.D3.Utils.UndefinedOrNull(scale)) {
|
|
||||||
scale = new GameLib.D3.API.Vector3(1, 1, 1);
|
|
||||||
}
|
|
||||||
this.scale = scale;
|
|
||||||
};
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
GameLib.D3.API.Vector4 = function (x, y, z, w) {
|
||||||
|
|
||||||
|
if (GameLib.D3.Utils.UndefinedOrNull(x)) {
|
||||||
|
x = 0;
|
||||||
|
}
|
||||||
|
this.x = x;
|
||||||
|
|
||||||
|
if (GameLib.D3.Utils.UndefinedOrNull(y)) {
|
||||||
|
y = 0;
|
||||||
|
}
|
||||||
|
this.y = y;
|
||||||
|
|
||||||
|
if (GameLib.D3.Utils.UndefinedOrNull(z)) {
|
||||||
|
z = 0;
|
||||||
|
}
|
||||||
|
this.z = z;
|
||||||
|
|
||||||
|
if (GameLib.D3.Utils.UndefinedOrNull(w)) {
|
||||||
|
w = 1;
|
||||||
|
}
|
||||||
|
this.w = w;
|
||||||
|
};
|
|
@ -103,7 +103,9 @@ GameLib.D3.Camera.prototype.createInstance = function(update) {
|
||||||
instance.quaternion.z = this.quaternion.z;
|
instance.quaternion.z = this.quaternion.z;
|
||||||
instance.quaternion.w = this.quaternion.w;
|
instance.quaternion.w = this.quaternion.w;
|
||||||
|
|
||||||
// instance.lookAt(this.lookAt.instance);
|
if (!update) {
|
||||||
|
instance.lookAt(this.lookAt.instance);
|
||||||
|
}
|
||||||
|
|
||||||
instance.updateProjectionMatrix();
|
instance.updateProjectionMatrix();
|
||||||
|
|
||||||
|
|
|
@ -2,15 +2,15 @@
|
||||||
* Runtime color for updating instance objects
|
* Runtime color for updating instance objects
|
||||||
* @param graphics GameLib.D3.Graphics
|
* @param graphics GameLib.D3.Graphics
|
||||||
* @param parentObject GameLib.D3.*
|
* @param parentObject GameLib.D3.*
|
||||||
* @param color GameLib.D3.API.Color
|
* @param apiColor GameLib.D3.API.Color
|
||||||
* @param grain Number
|
* @param grain Number
|
||||||
* @constructor
|
* @constructor
|
||||||
*/
|
*/
|
||||||
GameLib.D3.Color = function RuntimeColor(graphics, parentObject, color, grain) {
|
GameLib.D3.Color = function RuntimeColor(graphics, parentObject, apiColor, grain) {
|
||||||
|
|
||||||
for (var property in color) {
|
for (var property in apiColor) {
|
||||||
if (color.hasOwnProperty(property)) {
|
if (apiColor.hasOwnProperty(property)) {
|
||||||
this[property] = color[property];
|
this[property] = apiColor[property];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,324 @@
|
||||||
|
/**
|
||||||
|
* Common properties of all Components
|
||||||
|
* @param id
|
||||||
|
* @param name
|
||||||
|
* @param componentType GameLib.D3.Component.COMPONENT_*
|
||||||
|
* @param parentEntity GameLib.D3.Entity
|
||||||
|
* @param linkedProperties GameLib.D3.LinkedProperty[]
|
||||||
|
* @constructor
|
||||||
|
*/
|
||||||
|
GameLib.D3.Component = function Component(
|
||||||
|
id,
|
||||||
|
name,
|
||||||
|
componentType,
|
||||||
|
parentEntity,
|
||||||
|
linkedProperties
|
||||||
|
) {
|
||||||
|
this.id = id || GameLib.D3.Utils.RandomId();
|
||||||
|
|
||||||
|
if (GameLib.D3.Utils.UndefinedOrNull(name)) {
|
||||||
|
name = this.constructor.name;
|
||||||
|
}
|
||||||
|
this.name = name;
|
||||||
|
|
||||||
|
if (GameLib.D3.Utils.UndefinedOrNull(componentType)) {
|
||||||
|
throw new Error('No Component Type - You should extend from this class not instantiate directly');
|
||||||
|
}
|
||||||
|
this.componentType = componentType;
|
||||||
|
|
||||||
|
if (GameLib.D3.Utils.UndefinedOrNull(parentEntity)) {
|
||||||
|
parentEntity = null;
|
||||||
|
}
|
||||||
|
this.parentEntity = parentEntity;
|
||||||
|
|
||||||
|
if (GameLib.D3.Utils.UndefinedOrNull(linkedProperties)) {
|
||||||
|
linkedProperties = [];
|
||||||
|
}
|
||||||
|
this.linkedProperties = linkedProperties;
|
||||||
|
|
||||||
|
this.linkedProperties.push(
|
||||||
|
new GameLib.D3.Component.LinkedProperty(
|
||||||
|
'parentEntity',
|
||||||
|
GameLib.D3.Entity
|
||||||
|
)
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Each custom component has some properties which are converted to Strind IDs for storing to API,
|
||||||
|
* and then linked before Runtime (after loading from API) back to their actual objects (through the ID)
|
||||||
|
* @param propertyName String
|
||||||
|
* @param objectType GameLib.D3.Object
|
||||||
|
* @constructor
|
||||||
|
*/
|
||||||
|
GameLib.D3.Component.LinkedProperty = function(
|
||||||
|
propertyName,
|
||||||
|
objectType
|
||||||
|
) {
|
||||||
|
this.propertyName = propertyName;
|
||||||
|
this.objectType = objectType;
|
||||||
|
};
|
||||||
|
|
||||||
|
GameLib.D3.Component.COMPONENT_INTERFACE = 0x1;
|
||||||
|
GameLib.D3.Component.COMPONENT_CAMERA = 0x2;
|
||||||
|
GameLib.D3.Component.COMPONENT_COLOR_FLASH = 0x3;
|
||||||
|
GameLib.D3.Component.COMPONENT_COLOR_LERP = 0x4;
|
||||||
|
GameLib.D3.Component.COMPONENT_FLY_CONTROLS = 0x5;
|
||||||
|
GameLib.D3.Component.COMPONENT_FOLLOW = 0x6;
|
||||||
|
GameLib.D3.Component.COMPONENT_LOOK_AT = 0x7;
|
||||||
|
GameLib.D3.Component.COMPONENT_MESH_PERMUTATION = 0x8;
|
||||||
|
GameLib.D3.Component.COMPONENT_PATH_AI = 0x9;
|
||||||
|
GameLib.D3.Component.COMPONENT_PATH_CONTROLS = 0xA;
|
||||||
|
GameLib.D3.Component.COMPONENT_PATH_FOLLOWING = 0xB;
|
||||||
|
GameLib.D3.Component.COMPONENT_RAYCAST_VEHICLE_CONTROLS = 0xC;
|
||||||
|
GameLib.D3.Component.COMPONENT_TRIGGER_BOX_BOX = 0xD;
|
||||||
|
GameLib.D3.Component.COMPONENT_TRIGGER_BOX_SPHERE = 0xE;
|
||||||
|
GameLib.D3.Component.COMPONENT_TRIGGER_SPHERE_SPHERE = 0xF;
|
||||||
|
GameLib.D3.Component.COMPONENT_VEHICLE_AI_OBJECT_AVOIDENCE = 0x10;
|
||||||
|
GameLib.D3.Component.COMPONENT_VEHICLE_AI_PATH_STEERING = 0x11;
|
||||||
|
|
||||||
|
GameLib.D3.Component.prototype.toApiComponent = function() {
|
||||||
|
|
||||||
|
var apiComponent = new GameLib.D3.API.Component(
|
||||||
|
this.id,
|
||||||
|
this.name,
|
||||||
|
this.componentType,
|
||||||
|
GameLib.D3.Utils.IdOrNull(this.parentEntity)
|
||||||
|
);
|
||||||
|
|
||||||
|
var isObjectProperty;
|
||||||
|
|
||||||
|
for (var property in apiComponent) {
|
||||||
|
if (
|
||||||
|
apiComponent.hasOwnProperty(property) &&
|
||||||
|
this.hasOwnProperty(property)
|
||||||
|
) {
|
||||||
|
isObjectProperty = false;
|
||||||
|
|
||||||
|
for (var l = 0; l < this.linkedProperties.length; l++) {
|
||||||
|
|
||||||
|
var linkedProperty = this.linkedProperties[l];
|
||||||
|
|
||||||
|
if (linkedProperty.propertyName == property) {
|
||||||
|
isObjectProperty = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isObjectProperty) {
|
||||||
|
apiComponent[property] = GameLib.D3.Utils.IdOrNull(this[property]);
|
||||||
|
} else if (
|
||||||
|
this[property] instanceof GameLib.D3.Vector2 ||
|
||||||
|
this[property] instanceof GameLib.D3.Vector3
|
||||||
|
) {
|
||||||
|
apiComponent[property] = this[property].toApiVector();
|
||||||
|
} else if (this[property] instanceof GameLib.D3.Quaternion) {
|
||||||
|
apiComponent[property] = this[property].toApiQuaternion();
|
||||||
|
} else if (
|
||||||
|
this[property] instanceof GameLib.D3.Matrix3 ||
|
||||||
|
this[property] instanceof GameLib.D3.Matrix4
|
||||||
|
) {
|
||||||
|
apiComponent[property] = this[property].toApiMatrix();
|
||||||
|
} else {
|
||||||
|
apiComponent[property] = this[property];
|
||||||
|
}
|
||||||
|
} else if (
|
||||||
|
apiComponent.hasOwnProperty(property)
|
||||||
|
) {
|
||||||
|
delete apiComponent[property];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return apiComponent;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts and Object component into a proper GameLib.D3.Component
|
||||||
|
* @param graphics
|
||||||
|
* @param objectComponent
|
||||||
|
* @constructor
|
||||||
|
*/
|
||||||
|
GameLib.D3.Component.FromObjectComponent = function(graphics, objectComponent) {
|
||||||
|
|
||||||
|
var component = null;
|
||||||
|
|
||||||
|
switch (objectComponent.componentType) {
|
||||||
|
|
||||||
|
case GameLib.D3.Component.COMPONENT_CAMERA :
|
||||||
|
component = new GameLib.D3.ComponentCamera();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GameLib.D3.Component.COMPONENT_FOLLOW :
|
||||||
|
component = new GameLib.D3.ComponentFollow(null, null, graphics);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GameLib.D3.Component.COMPONENT_LOOK_AT :
|
||||||
|
component = new GameLib.D3.ComponentLookAt(null, null, graphics);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GameLib.D3.Component.COMPONENT_PATH_FOLLOWING :
|
||||||
|
component = new GameLib.D3.ComponentPathFollowing(null, null, graphics);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
console.warn('This type of component is not yet read from the database:' + objectComponent.componentType);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var property in component) {
|
||||||
|
if (
|
||||||
|
component.hasOwnProperty(property) &&
|
||||||
|
objectComponent.hasOwnProperty(property)
|
||||||
|
) {
|
||||||
|
if (component[property] instanceof GameLib.D3.Vector2) {
|
||||||
|
component[property] = new GameLib.D3.Vector2(
|
||||||
|
graphics,
|
||||||
|
component,
|
||||||
|
new GameLib.D3.API.Vector2(
|
||||||
|
objectComponent[property].x,
|
||||||
|
objectComponent[property].y
|
||||||
|
)
|
||||||
|
)
|
||||||
|
} else if (component[property] instanceof GameLib.D3.Vector3) {
|
||||||
|
component[property] = new GameLib.D3.Vector3(
|
||||||
|
graphics,
|
||||||
|
component,
|
||||||
|
new GameLib.D3.API.Vector3(
|
||||||
|
objectComponent[property].x,
|
||||||
|
objectComponent[property].y,
|
||||||
|
objectComponent[property].z
|
||||||
|
)
|
||||||
|
)
|
||||||
|
} else if (component[property] instanceof GameLib.D3.Quaternion) {
|
||||||
|
|
||||||
|
component[property] = new GameLib.D3.Quaternion(
|
||||||
|
graphics,
|
||||||
|
component,
|
||||||
|
new GameLib.D3.API.Quaternion(
|
||||||
|
objectComponent[property].x,
|
||||||
|
objectComponent[property].y,
|
||||||
|
objectComponent[property].z,
|
||||||
|
objectComponent[property].w,
|
||||||
|
new GameLib.D3.API.Vector3(
|
||||||
|
objectComponent[property].axis.x,
|
||||||
|
objectComponent[property].axis.y,
|
||||||
|
objectComponent[property].axis.z
|
||||||
|
),
|
||||||
|
objectComponent[property].angle
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
} else if (component[property] instanceof GameLib.D3.Color) {
|
||||||
|
|
||||||
|
component[property] = new GameLib.D3.Color(
|
||||||
|
graphics,
|
||||||
|
component,
|
||||||
|
new GameLib.D3.API.Color(
|
||||||
|
objectComponent[property].r,
|
||||||
|
objectComponent[property].g,
|
||||||
|
objectComponent[property].b,
|
||||||
|
objectComponent[property].a
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
} else if (component[property] instanceof GameLib.D3.Matrix4) {
|
||||||
|
|
||||||
|
component[property] = new GameLib.D3.Matrix4(
|
||||||
|
graphics,
|
||||||
|
component,
|
||||||
|
new GameLib.D3.API.Matrix4(
|
||||||
|
new GameLib.D3.API.Quaternion(
|
||||||
|
objectComponent[property].rows[0].x,
|
||||||
|
objectComponent[property].rows[0].y,
|
||||||
|
objectComponent[property].rows[0].z,
|
||||||
|
objectComponent[property].rows[0].w
|
||||||
|
),
|
||||||
|
new GameLib.D3.API.Quaternion(
|
||||||
|
objectComponent[property].rows[1].x,
|
||||||
|
objectComponent[property].rows[1].y,
|
||||||
|
objectComponent[property].rows[1].z,
|
||||||
|
objectComponent[property].rows[1].w
|
||||||
|
),
|
||||||
|
new GameLib.D3.API.Quaternion(
|
||||||
|
objectComponent[property].rows[2].x,
|
||||||
|
objectComponent[property].rows[2].y,
|
||||||
|
objectComponent[property].rows[2].z,
|
||||||
|
objectComponent[property].rows[2].w
|
||||||
|
),
|
||||||
|
new GameLib.D3.API.Quaternion(
|
||||||
|
objectComponent[property].rows[3].x,
|
||||||
|
objectComponent[property].rows[3].y,
|
||||||
|
objectComponent[property].rows[3].z,
|
||||||
|
objectComponent[property].rows[3].w
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
} else {
|
||||||
|
component[property] = objectComponent[property];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return component;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets executed from every entity during each game state loop
|
||||||
|
* Set the callbacks to null initially to prevent unneccesary function calls
|
||||||
|
* @param deltaTime
|
||||||
|
* @override
|
||||||
|
* @callback
|
||||||
|
* @default null
|
||||||
|
*/
|
||||||
|
GameLib.D3.Component.prototype.onUpdate = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets executed from every entity during each game loop - after onUpdate has been called
|
||||||
|
* Set the callbacks to null initially to prevent unneccesary function calls
|
||||||
|
* @param deltaTime
|
||||||
|
* @override
|
||||||
|
* @callback
|
||||||
|
*/
|
||||||
|
GameLib.D3.Component.prototype.onLateUpdate = null;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets executed when component is added to an Entity
|
||||||
|
* @param entity GameLib.D3.Entity
|
||||||
|
* @override
|
||||||
|
* @callback
|
||||||
|
*/
|
||||||
|
GameLib.D3.Component.prototype.onAdd = function(entity) {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets executed when a component is removed from an Entity
|
||||||
|
* @param entity GameLib.D3.Entity
|
||||||
|
* @override
|
||||||
|
* @callback
|
||||||
|
*/
|
||||||
|
GameLib.D3.Component.prototype.onRemove = function(entity) {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* links object ids to actual objects
|
||||||
|
* @param idToObject Object linking object components to objects
|
||||||
|
*/
|
||||||
|
GameLib.D3.Component.prototype.linkObjects = function(idToObject) {
|
||||||
|
|
||||||
|
this.linkedProperties.forEach(
|
||||||
|
function (linkedProperty) {
|
||||||
|
if (this[linkedProperty.propertyName]) {
|
||||||
|
this[linkedProperty.propertyName] = idToObject[this[linkedProperty.propertyName]];
|
||||||
|
}
|
||||||
|
}.bind(this)
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clones this component
|
||||||
|
* @returns {*}
|
||||||
|
*/
|
||||||
|
GameLib.D3.Component.prototype.clone = function() {
|
||||||
|
return _.cloneDeep(this);
|
||||||
|
};
|
|
@ -3,63 +3,59 @@
|
||||||
* is.
|
* is.
|
||||||
* @param id
|
* @param id
|
||||||
* @param name String
|
* @param name String
|
||||||
* @param camera GameLib.D3.Camera
|
|
||||||
* @param parentEntity GameLib.D3.Entity
|
* @param parentEntity GameLib.D3.Entity
|
||||||
|
* @param camera GameLib.D3.Camera
|
||||||
* @constructor
|
* @constructor
|
||||||
*/
|
*/
|
||||||
GameLib.D3.ComponentCamera = function ComponentCamera(
|
GameLib.D3.ComponentCamera = function ComponentCamera(
|
||||||
id,
|
id,
|
||||||
name,
|
name,
|
||||||
camera,
|
parentEntity,
|
||||||
parentEntity
|
camera
|
||||||
) {
|
) {
|
||||||
if (GameLib.D3.Utils.UndefinedOrNull(id)) {
|
GameLib.D3.Component.call(
|
||||||
id = GameLib.D3.Utils.RandomId();
|
this,
|
||||||
}
|
id,
|
||||||
this.id = id;
|
name,
|
||||||
|
GameLib.D3.Component.COMPONENT_CAMERA,
|
||||||
if (GameLib.D3.Utils.UndefinedOrNull(name)) {
|
parentEntity,
|
||||||
name = this.constructor.name;
|
[
|
||||||
}
|
new GameLib.D3.Component.LinkedProperty(
|
||||||
this.name = name;
|
'camera',
|
||||||
|
GameLib.D3.Camera
|
||||||
if (GameLib.D3.Utils.UndefinedOrNull(parentEntity)) {
|
)
|
||||||
parentEntity = null;
|
]
|
||||||
}
|
);
|
||||||
this.parentEntity = parentEntity;
|
|
||||||
|
|
||||||
if (GameLib.D3.Utils.UndefinedOrNull(camera)) {
|
if (GameLib.D3.Utils.UndefinedOrNull(camera)) {
|
||||||
camera = null;
|
camera = null;
|
||||||
}
|
}
|
||||||
this.camera = camera;
|
this.camera = camera;
|
||||||
|
|
||||||
GameLib.D3.Utils.Extend(GameLib.D3.ComponentCamera, GameLib.D3.ComponentInterface);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
///////////////////////// Methods to override //////////////////////////
|
GameLib.D3.ComponentCamera.prototype = Object.create(GameLib.D3.Component.prototype);
|
||||||
GameLib.D3.ComponentCamera.prototype.onLateUpdate = function(
|
GameLib.D3.ComponentCamera.prototype.constructor = GameLib.D3.ComponentCamera;
|
||||||
deltaTime,
|
|
||||||
parentEntity
|
|
||||||
) {
|
/**
|
||||||
|
* onLateUpdate override method
|
||||||
|
* @override
|
||||||
|
* @callback
|
||||||
|
*/
|
||||||
|
GameLib.D3.ComponentCamera.prototype.onLateUpdate = function() {
|
||||||
|
|
||||||
if (this.camera) {
|
if (this.camera) {
|
||||||
|
|
||||||
this.camera.quaternion.copy(this.parentEntity.quaternion);
|
this.camera.quaternion.x = this.parentEntity.quaternion.x;
|
||||||
this.camera.quaternion.normalize();
|
this.camera.quaternion.y = this.parentEntity.quaternion.y;
|
||||||
|
this.camera.quaternion.z = this.parentEntity.quaternion.z;
|
||||||
|
this.camera.quaternion.w = this.parentEntity.quaternion.w;
|
||||||
|
|
||||||
this.camera.position.copy(this.parentEntity.position);
|
this.camera.position.x = this.parentEntity.position.x;
|
||||||
|
this.camera.position.y = this.parentEntity.position.y;
|
||||||
|
this.camera.position.z = this.parentEntity.position.z;
|
||||||
|
|
||||||
this.camera.quaternion.updateInstance();
|
this.camera.updateInstance();
|
||||||
this.camera.position.updateInstance();
|
|
||||||
|
|
||||||
this.parentEntity.quaternion.x = this.camera.quaternion.x;
|
|
||||||
this.parentEntity.quaternion.y = this.camera.quaternion.y;
|
|
||||||
this.parentEntity.quaternion.z = this.camera.quaternion.z;
|
|
||||||
this.parentEntity.quaternion.w = this.camera.quaternion.w;
|
|
||||||
|
|
||||||
this.parentEntity.quaternion.updateInstance();
|
|
||||||
} else {
|
|
||||||
console.warn('no camera object');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
|
@ -18,7 +18,7 @@ GameLib.D3.ComponentColorFlash = function ComponentColorFlash(
|
||||||
this.parentEntity = null;
|
this.parentEntity = null;
|
||||||
|
|
||||||
// Todo: this should be executed somewhere in game-lib-z, so that we don't execute it on every construction of an object.
|
// Todo: this should be executed somewhere in game-lib-z, so that we don't execute it on every construction of an object.
|
||||||
GameLib.D3.Utils.Extend(GameLib.D3.ComponentColorFlash, GameLib.D3.ComponentInterface);
|
GameLib.D3.Utils.Extend(GameLib.D3.ComponentColorFlash, GameLib.D3.Component);
|
||||||
};
|
};
|
||||||
|
|
||||||
///////////////////////// Methods to override //////////////////////////
|
///////////////////////// Methods to override //////////////////////////
|
||||||
|
|
|
@ -14,7 +14,7 @@ GameLib.D3.ComponentColorLerp = function(
|
||||||
this.parentEntity = null;
|
this.parentEntity = null;
|
||||||
|
|
||||||
// Todo: this should be executed somewhere in game-lib-z, so that we don't execute it on every construction of an object.
|
// Todo: this should be executed somewhere in game-lib-z, so that we don't execute it on every construction of an object.
|
||||||
GameLib.D3.Utils.Extend(GameLib.D3.ComponentColorLerp, GameLib.D3.ComponentInterface);
|
GameLib.D3.Utils.Extend(GameLib.D3.ComponentColorLerp, GameLib.D3.Component);
|
||||||
|
|
||||||
this.startColor = startColor || new GameLib.D3.API.Vector3(0, 0, 0);
|
this.startColor = startColor || new GameLib.D3.API.Vector3(0, 0, 0);
|
||||||
this.endColor = endColor || new GameLib.D3.API.Vector3(1, 1, 1);
|
this.endColor = endColor || new GameLib.D3.API.Vector3(1, 1, 1);
|
||||||
|
|
|
@ -24,7 +24,7 @@ GameLib.D3.ComponentEntityParent = function ComponentEntityParent(
|
||||||
this.centerToOrigin = centerToOrigin;
|
this.centerToOrigin = centerToOrigin;
|
||||||
this.originPosition = new GameLib.D3.API.Vector3(0, 0, 0);
|
this.originPosition = new GameLib.D3.API.Vector3(0, 0, 0);
|
||||||
|
|
||||||
GameLib.D3.Utils.Extend(GameLib.D3.ComponentEntityParent, GameLib.D3.ComponentInterface);
|
GameLib.D3.Utils.Extend(GameLib.D3.ComponentEntityParent, GameLib.D3.Component);
|
||||||
};
|
};
|
||||||
|
|
||||||
//#ifdef RUNTIME__
|
//#ifdef RUNTIME__
|
||||||
|
|
|
@ -37,7 +37,7 @@ GameLib.D3.ComponentEntityPermutation = function ComponentEntityPermutation(
|
||||||
scaleOffset = new GameLib.D3.API.Vector3(1, 1, 1);
|
scaleOffset = new GameLib.D3.API.Vector3(1, 1, 1);
|
||||||
} this.scaleOffset = scaleOffset;
|
} this.scaleOffset = scaleOffset;
|
||||||
|
|
||||||
GameLib.D3.Utils.Extend(GameLib.D3.ComponentEntityPermutation, GameLib.D3.ComponentInterface);
|
GameLib.D3.Utils.Extend(GameLib.D3.ComponentEntityPermutation, GameLib.D3.Component);
|
||||||
};
|
};
|
||||||
|
|
||||||
//#ifdef RUNTIME__
|
//#ifdef RUNTIME__
|
||||||
|
|
|
@ -18,7 +18,7 @@ GameLib.D3.ComponentFlyControls = function ComponentFlyControls(
|
||||||
this.parentEntity = null;
|
this.parentEntity = null;
|
||||||
|
|
||||||
// Todo: this should be executed somewhere in game-lib-z, so that we don't execute it on every construction of an object.
|
// Todo: this should be executed somewhere in game-lib-z, so that we don't execute it on every construction of an object.
|
||||||
GameLib.D3.Utils.Extend(GameLib.D3.ComponentFlyControls, GameLib.D3.ComponentInterface);
|
GameLib.D3.Utils.Extend(GameLib.D3.ComponentFlyControls, GameLib.D3.Component);
|
||||||
|
|
||||||
// Component fields
|
// Component fields
|
||||||
this.pitch = 0;
|
this.pitch = 0;
|
||||||
|
|
|
@ -18,33 +18,32 @@ GameLib.D3.ComponentFollow = function ComponentFollow(
|
||||||
id,
|
id,
|
||||||
name,
|
name,
|
||||||
graphics,
|
graphics,
|
||||||
|
parentEntity,
|
||||||
targetEntity,
|
targetEntity,
|
||||||
targetOffset,
|
targetOffset,
|
||||||
minDistance,
|
minDistance,
|
||||||
moveSpeed,
|
moveSpeed,
|
||||||
parentEntity,
|
|
||||||
target,
|
target,
|
||||||
targetToParent,
|
targetToParent,
|
||||||
rotatedTargetOffset,
|
rotatedTargetOffset,
|
||||||
rotated
|
rotated
|
||||||
) {
|
) {
|
||||||
if (GameLib.D3.Utils.UndefinedOrNull(id)) {
|
|
||||||
id = GameLib.D3.Utils.RandomId();
|
|
||||||
}
|
|
||||||
this.id = id;
|
|
||||||
|
|
||||||
if (GameLib.D3.Utils.UndefinedOrNull(name)) {
|
|
||||||
name = this.constructor.name;
|
|
||||||
}
|
|
||||||
this.name = name;
|
|
||||||
|
|
||||||
this.graphics = graphics;
|
this.graphics = graphics;
|
||||||
this.graphics.isNotThreeThrow();
|
this.graphics.isNotThreeThrow();
|
||||||
|
|
||||||
if (GameLib.D3.Utils.UndefinedOrNull(parentEntity)) {
|
GameLib.D3.Component.call(
|
||||||
parentEntity = null;
|
this,
|
||||||
}
|
id,
|
||||||
this.parentEntity = parentEntity;
|
name,
|
||||||
|
GameLib.D3.Component.COMPONENT_FOLLOW,
|
||||||
|
parentEntity,
|
||||||
|
[
|
||||||
|
new GameLib.D3.Component.LinkedProperty(
|
||||||
|
'targetEntity',
|
||||||
|
GameLib.D3.Entity
|
||||||
|
)
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
if (GameLib.D3.Utils.UndefinedOrNull(targetEntity)) {
|
if (GameLib.D3.Utils.UndefinedOrNull(targetEntity)) {
|
||||||
targetEntity = null;
|
targetEntity = null;
|
||||||
|
@ -80,10 +79,8 @@ GameLib.D3.ComponentFollow = function ComponentFollow(
|
||||||
this,
|
this,
|
||||||
target
|
target
|
||||||
);
|
);
|
||||||
|
|
||||||
this.target = target;
|
this.target = target;
|
||||||
|
|
||||||
|
|
||||||
if(GameLib.D3.Utils.UndefinedOrNull(targetToParent)) {
|
if(GameLib.D3.Utils.UndefinedOrNull(targetToParent)) {
|
||||||
targetToParent = new GameLib.D3.API.Vector3(0, 0, 0);
|
targetToParent = new GameLib.D3.API.Vector3(0, 0, 0);
|
||||||
}
|
}
|
||||||
|
@ -103,7 +100,6 @@ GameLib.D3.ComponentFollow = function ComponentFollow(
|
||||||
this,
|
this,
|
||||||
rotatedTargetOffset
|
rotatedTargetOffset
|
||||||
);
|
);
|
||||||
|
|
||||||
this.rotatedTargetOffset = rotatedTargetOffset;
|
this.rotatedTargetOffset = rotatedTargetOffset;
|
||||||
|
|
||||||
if (GameLib.D3.Utils.UndefinedOrNull(rotated)) {
|
if (GameLib.D3.Utils.UndefinedOrNull(rotated)) {
|
||||||
|
@ -114,19 +110,22 @@ GameLib.D3.ComponentFollow = function ComponentFollow(
|
||||||
this,
|
this,
|
||||||
rotated
|
rotated
|
||||||
);
|
);
|
||||||
|
|
||||||
this.rotated = rotated;
|
this.rotated = rotated;
|
||||||
|
|
||||||
GameLib.D3.Utils.Extend(GameLib.D3.ComponentFollow, GameLib.D3.ComponentInterface);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
///////////////////////// Methods to override //////////////////////////
|
GameLib.D3.ComponentFollow.prototype = Object.create(GameLib.D3.Component.prototype);
|
||||||
|
GameLib.D3.ComponentFollow.prototype.constructor = GameLib.D3.ComponentFollow;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* onUpdate callback
|
||||||
|
* @param deltaTime
|
||||||
|
*/
|
||||||
GameLib.D3.ComponentFollow.prototype.onUpdate = function(
|
GameLib.D3.ComponentFollow.prototype.onUpdate = function(
|
||||||
deltaTime,
|
deltaTime
|
||||||
parentEntity
|
|
||||||
) {
|
) {
|
||||||
|
|
||||||
if (this.targetEntity) {
|
if (this.parentEntity && this.targetEntity) {
|
||||||
|
|
||||||
this.rotated.x = this.targetEntity.quaternion.x;
|
this.rotated.x = this.targetEntity.quaternion.x;
|
||||||
this.rotated.y = this.targetEntity.quaternion.y;
|
this.rotated.y = this.targetEntity.quaternion.y;
|
||||||
|
|
|
@ -1,438 +0,0 @@
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param id
|
|
||||||
* @param name
|
|
||||||
* @constructor
|
|
||||||
*/
|
|
||||||
GameLib.D3.ComponentInterface = function ComponentInterface(
|
|
||||||
id,
|
|
||||||
name
|
|
||||||
) {
|
|
||||||
this.id = id || GameLib.D3.Utils.RandomId();
|
|
||||||
|
|
||||||
if (typeof name == 'undefined') {
|
|
||||||
name = this.constructor.name;
|
|
||||||
}
|
|
||||||
this.name = name;
|
|
||||||
|
|
||||||
// this will maybe not used
|
|
||||||
this.parentEntity = null;
|
|
||||||
};
|
|
||||||
|
|
||||||
GameLib.D3.ComponentInterface.COMPONENT_INTERFACE = 0x1;
|
|
||||||
GameLib.D3.ComponentInterface.COMPONENT_CAMERA = 0x2;
|
|
||||||
GameLib.D3.ComponentInterface.COMPONENT_COLOR_FLASH = 0x3;
|
|
||||||
GameLib.D3.ComponentInterface.COMPONENT_COLOR_LERP = 0x4;
|
|
||||||
GameLib.D3.ComponentInterface.COMPONENT_FLY_CONTROLS = 0x5;
|
|
||||||
GameLib.D3.ComponentInterface.COMPONENT_FOLLOW = 0x6;
|
|
||||||
GameLib.D3.ComponentInterface.COMPONENT_LOOK_AT = 0x7;
|
|
||||||
GameLib.D3.ComponentInterface.COMPONENT_MESH_PERMUTATION = 0x8;
|
|
||||||
GameLib.D3.ComponentInterface.COMPONENT_PATH_AI = 0x9;
|
|
||||||
GameLib.D3.ComponentInterface.COMPONENT_PATH_CONTROLS = 0xA;
|
|
||||||
GameLib.D3.ComponentInterface.COMPONENT_PATH_FOLLOWING = 0xB;
|
|
||||||
GameLib.D3.ComponentInterface.COMPONENT_RAYCAST_VEHICLE_CONTROLS = 0xC;
|
|
||||||
GameLib.D3.ComponentInterface.COMPONENT_TRIGGER_BOX_BOX = 0xD;
|
|
||||||
GameLib.D3.ComponentInterface.COMPONENT_TRIGGER_BOX_SPHERE = 0xE;
|
|
||||||
GameLib.D3.ComponentInterface.COMPONENT_TRIGGER_SPHERE_SPHERE = 0xF;
|
|
||||||
GameLib.D3.ComponentInterface.COMPONENT_VEHICLE_AI_OBJECT_AVOIDENCE = 0x10;
|
|
||||||
GameLib.D3.ComponentInterface.COMPONENT_VEHICLE_AI_PATH_STEERING = 0x11;
|
|
||||||
|
|
||||||
GameLib.D3.ComponentInterface.prototype.toApiComponent = function() {
|
|
||||||
|
|
||||||
var apiComponent = null;
|
|
||||||
|
|
||||||
if (this instanceof GameLib.D3.ComponentCamera) {
|
|
||||||
|
|
||||||
apiComponent = new GameLib.D3.API.ComponentInterface(
|
|
||||||
this.id,
|
|
||||||
this.name,
|
|
||||||
GameLib.D3.ComponentInterface.COMPONENT_CAMERA,
|
|
||||||
GameLib.D3.Utils.IdOrNull(this.camera),
|
|
||||||
GameLib.D3.Utils.IdOrNull(this.parentEntity)
|
|
||||||
);
|
|
||||||
|
|
||||||
} else if (this instanceof GameLib.D3.ComponentFollow) {
|
|
||||||
|
|
||||||
apiComponent = new GameLib.D3.API.ComponentInterface(
|
|
||||||
this.id,
|
|
||||||
this.name,
|
|
||||||
GameLib.D3.ComponentInterface.COMPONENT_FOLLOW,
|
|
||||||
null,
|
|
||||||
GameLib.D3.Utils.IdOrNull(this.parentEntity),
|
|
||||||
GameLib.D3.Utils.IdOrNull(this.targetEntity),
|
|
||||||
this.targetOffset.toApiVector(),
|
|
||||||
this.minDistance,
|
|
||||||
this.moveSpeed,
|
|
||||||
this.target.toApiVector(),
|
|
||||||
this.targetToParent.toApiVector(),
|
|
||||||
this.rotatedTargetOffset.toApiVector(),
|
|
||||||
this.rotated.toApiQuaternion()
|
|
||||||
);
|
|
||||||
|
|
||||||
} else if (this instanceof GameLib.D3.ComponentLookAt) {
|
|
||||||
|
|
||||||
apiComponent = new GameLib.D3.API.ComponentInterface(
|
|
||||||
this.id,
|
|
||||||
this.name,
|
|
||||||
GameLib.D3.ComponentInterface.COMPONENT_LOOK_AT,
|
|
||||||
null,
|
|
||||||
GameLib.D3.Utils.IdOrNull(this.parentEntity),
|
|
||||||
GameLib.D3.Utils.IdOrNull(this.targetEntity),
|
|
||||||
this.targetOffset.toApiVector(),
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
this.rotationSpeed,
|
|
||||||
this.lookAtMatrix.toApiMatrix(),
|
|
||||||
this.up.toApiVector()
|
|
||||||
)
|
|
||||||
} else if (this instanceof GameLib.D3.ComponentPathFollowing) {
|
|
||||||
|
|
||||||
apiComponent = new GameLib.D3.API.ComponentInterface(
|
|
||||||
this.id,
|
|
||||||
this.name,
|
|
||||||
GameLib.D3.ComponentInterface.COMPONENT_PATH_FOLLOWING,
|
|
||||||
null,
|
|
||||||
GameLib.D3.Utils.IdOrNull(this.parentEntity),
|
|
||||||
GameLib.D3.Utils.IdOrNull(this.targetEntity),
|
|
||||||
this.targetOffset.toApiVector(),
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
this.up.toApiVector(),
|
|
||||||
GameLib.D3.Utils.IdOrNull(this.spline),
|
|
||||||
GameLib.D3.Utils.IdOrNull(this.mesh),
|
|
||||||
this.accelleration,
|
|
||||||
this.maxSpeed,
|
|
||||||
this.baseOffset.toApiVector(),
|
|
||||||
this.maxOffset.toApiVector(),
|
|
||||||
this.steeringSpeed,
|
|
||||||
this.currentOffset.toApiVector(),
|
|
||||||
this.currentPathValue,
|
|
||||||
this.currentSpeed,
|
|
||||||
this.direction,
|
|
||||||
this.currentPosition.toApiVector()
|
|
||||||
);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
console.warn('cannot save components of this type yet: ' + this.componentType);
|
|
||||||
}
|
|
||||||
|
|
||||||
return apiComponent;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts and Object component into a proper GameLib.D3.Component
|
|
||||||
* @param graphics
|
|
||||||
* @param objectComponent
|
|
||||||
* @constructor
|
|
||||||
*/
|
|
||||||
GameLib.D3.ComponentInterface.FromObjectComponent = function(graphics, objectComponent) {
|
|
||||||
|
|
||||||
var component = null;
|
|
||||||
|
|
||||||
switch (objectComponent.componentType) {
|
|
||||||
|
|
||||||
case GameLib.D3.ComponentInterface.COMPONENT_CAMERA :
|
|
||||||
component = new GameLib.D3.ComponentCamera(
|
|
||||||
objectComponent.id,
|
|
||||||
objectComponent.name,
|
|
||||||
objectComponent.camera,
|
|
||||||
objectComponent.parentEntity
|
|
||||||
);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GameLib.D3.ComponentInterface.COMPONENT_FOLLOW :
|
|
||||||
component = new GameLib.D3.ComponentFollow(
|
|
||||||
objectComponent.id,
|
|
||||||
objectComponent.name,
|
|
||||||
graphics,
|
|
||||||
objectComponent.targetEntity,
|
|
||||||
new GameLib.D3.API.Vector3 (
|
|
||||||
objectComponent.targetOffset.x,
|
|
||||||
objectComponent.targetOffset.y,
|
|
||||||
objectComponent.targetOffset.z
|
|
||||||
),
|
|
||||||
objectComponent.minDistance,
|
|
||||||
objectComponent.moveSpeed,
|
|
||||||
objectComponent.parentEntity,
|
|
||||||
new GameLib.D3.API.Vector3(
|
|
||||||
objectComponent.target.x,
|
|
||||||
objectComponent.target.y,
|
|
||||||
objectComponent.target.z
|
|
||||||
),
|
|
||||||
new GameLib.D3.API.Vector3(
|
|
||||||
objectComponent.targetToParent.x,
|
|
||||||
objectComponent.targetToParent.y,
|
|
||||||
objectComponent.targetToParent.z
|
|
||||||
),
|
|
||||||
new GameLib.D3.API.Vector3(
|
|
||||||
objectComponent.rotatedTargetOffset.x,
|
|
||||||
objectComponent.rotatedTargetOffset.y,
|
|
||||||
objectComponent.rotatedTargetOffset.z
|
|
||||||
),
|
|
||||||
new GameLib.D3.API.Quaternion(
|
|
||||||
objectComponent.rotated.x,
|
|
||||||
objectComponent.rotated.x,
|
|
||||||
objectComponent.rotated.x,
|
|
||||||
objectComponent.rotated.x,
|
|
||||||
new GameLib.D3.API.Vector3(
|
|
||||||
objectComponent.rotated.axis.x,
|
|
||||||
objectComponent.rotated.axis.y,
|
|
||||||
objectComponent.rotated.axis.z
|
|
||||||
),
|
|
||||||
objectComponent.rotated.angle
|
|
||||||
)
|
|
||||||
);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GameLib.D3.ComponentInterface.COMPONENT_LOOK_AT :
|
|
||||||
component = new GameLib.D3.ComponentLookAt(
|
|
||||||
objectComponent.id,
|
|
||||||
objectComponent.name,
|
|
||||||
graphics,
|
|
||||||
objectComponent.parentEntity,
|
|
||||||
objectComponent.targetEntity,
|
|
||||||
new GameLib.D3.API.Vector3(
|
|
||||||
objectComponent.targetOffset.x,
|
|
||||||
objectComponent.targetOffset.y,
|
|
||||||
objectComponent.targetOffset.z
|
|
||||||
),
|
|
||||||
objectComponent.rotationSpeed,
|
|
||||||
objectComponent.lookAtMatrix,
|
|
||||||
new GameLib.D3.API.Vector3(
|
|
||||||
objectComponent.up.x,
|
|
||||||
objectComponent.up.y,
|
|
||||||
objectComponent.up.z
|
|
||||||
)
|
|
||||||
);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GameLib.D3.ComponentInterface.COMPONENT_PATH_FOLLOWING :
|
|
||||||
component = new GameLib.D3.ComponentPathFollowing(
|
|
||||||
objectComponent.id,
|
|
||||||
objectComponent.name,
|
|
||||||
graphics,
|
|
||||||
objectComponent.parentEntity,
|
|
||||||
objectComponent.spline,
|
|
||||||
objectComponent.mesh,
|
|
||||||
objectComponent.accelleration,
|
|
||||||
objectComponent.maxSpeed,
|
|
||||||
new GameLib.D3.API.Vector3(
|
|
||||||
objectComponent.baseOffset.x,
|
|
||||||
objectComponent.baseOffset.y,
|
|
||||||
objectComponent.baseOffset.z
|
|
||||||
),
|
|
||||||
new GameLib.D3.API.Vector3(
|
|
||||||
objectComponent.maxOffset.x,
|
|
||||||
objectComponent.maxOffset.y,
|
|
||||||
objectComponent.maxOffset.z
|
|
||||||
),
|
|
||||||
objectComponent.steeringSpeed,
|
|
||||||
new GameLib.D3.API.Vector3(
|
|
||||||
objectComponent.targetOffset.x,
|
|
||||||
objectComponent.targetOffset.y,
|
|
||||||
objectComponent.targetOffset.z
|
|
||||||
),
|
|
||||||
new GameLib.D3.API.Vector3(
|
|
||||||
objectComponent.currentOffset.x,
|
|
||||||
objectComponent.currentOffset.y,
|
|
||||||
objectComponent.currentOffset.z
|
|
||||||
),
|
|
||||||
objectComponent.currentPathValue,
|
|
||||||
objectComponent.currentSpeed,
|
|
||||||
objectComponent.direction,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
new GameLib.D3.API.Vector3(
|
|
||||||
objectComponent.up.x,
|
|
||||||
objectComponent.up.y,
|
|
||||||
objectComponent.up.z
|
|
||||||
)
|
|
||||||
);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
console.warn('This type of component is not yet read from the database:' + objectComponent.componentType);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return component;
|
|
||||||
//
|
|
||||||
// var apiComponent = new GameLib.D3.API.ComponentInterface(
|
|
||||||
// objectComponent.id,
|
|
||||||
// objectComponent.name,
|
|
||||||
// objectComponent.componentType,
|
|
||||||
// objectComponent.camera,
|
|
||||||
// new GameLib.D3.API.Color(
|
|
||||||
// objectComponent.startColor.r,
|
|
||||||
// objectComponent.startColor.g,
|
|
||||||
// objectComponent.startColor.b,
|
|
||||||
// objectComponent.startColor.a
|
|
||||||
// ),
|
|
||||||
// new GameLib.D3.API.Color(
|
|
||||||
// objectComponent.endColor.r,
|
|
||||||
// objectComponent.endColor.g,
|
|
||||||
// objectComponent.endColor.b,
|
|
||||||
// objectComponent.endColor.a
|
|
||||||
// ),
|
|
||||||
// objectComponent.lerpSpeed,
|
|
||||||
// objectComponent.targetEntity,
|
|
||||||
// new GameLib.D3.API.Vector3(
|
|
||||||
// objectComponent.targetOffset.x,
|
|
||||||
// objectComponent.targetOffset.y,
|
|
||||||
// objectComponent.targetOffset.z
|
|
||||||
// ),
|
|
||||||
// objectComponent.minDistance,
|
|
||||||
// objectComponent.moveSpeed,
|
|
||||||
// objectComponent.rotationSpeed,
|
|
||||||
// new GameLib.D3.API.Vector3(
|
|
||||||
// objectComponent.positionOffset.x,
|
|
||||||
// objectComponent.positionOffset.y,
|
|
||||||
// objectComponent.positionOffset.z
|
|
||||||
// ),
|
|
||||||
// new GameLib.D3.API.Vector3(
|
|
||||||
// objectComponent.quaternionOffset.x,
|
|
||||||
// objectComponent.quaternionOffset.y,
|
|
||||||
// objectComponent.quaternionOffset.z
|
|
||||||
// ),
|
|
||||||
// new GameLib.D3.API.Vector3(
|
|
||||||
// objectComponent.scaleOffset.x,
|
|
||||||
// objectComponent.scaleOffset.y,
|
|
||||||
// objectComponent.scaleOffset.z
|
|
||||||
// ),
|
|
||||||
// objectComponent.sensorLength,
|
|
||||||
// objectComponent.spline,
|
|
||||||
// objectComponent.accelleration,
|
|
||||||
// objectComponent.maxSpeed,
|
|
||||||
// new GameLib.D3.API.Vector3(
|
|
||||||
// objectComponent.baseOffset.x,
|
|
||||||
// objectComponent.baseOffset.y,
|
|
||||||
// objectComponent.baseOffset.z
|
|
||||||
// ),
|
|
||||||
// new GameLib.D3.API.Vector3(
|
|
||||||
// objectComponent.maxOffset.x,
|
|
||||||
// objectComponent.maxOffset.y,
|
|
||||||
// objectComponent.maxOffset.z
|
|
||||||
// ),
|
|
||||||
// objectComponent.steeringSpeed,
|
|
||||||
// objectComponent.frontLWheelIndex,
|
|
||||||
// objectComponent.frontRWheelIndex,
|
|
||||||
// objectComponent.backLWheelIndex,
|
|
||||||
// objectComponent.backRWheelIndex,
|
|
||||||
// objectComponent.maxForce,
|
|
||||||
// objectComponent.steering,
|
|
||||||
// objectComponent.entitiesToCheck.map(function(objectEntity){
|
|
||||||
// return GameLib.D3.Entity.FromObjectEntity(graphics, objectEntity);
|
|
||||||
// }),
|
|
||||||
// objectComponent.onInside,
|
|
||||||
// objectComponent.onEnter,
|
|
||||||
// objectComponent.onLeave,
|
|
||||||
// objectComponent.onSetParent,
|
|
||||||
// objectComponent.sphereRadius,
|
|
||||||
// GameLib.D3.World.FromObjectWorld(objectComponent.world),
|
|
||||||
// objectComponent.maxSteerAngle
|
|
||||||
// );
|
|
||||||
//
|
|
||||||
// var component = null;
|
|
||||||
//
|
|
||||||
// switch (apiComponent.componentType) {
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
// will be not used
|
|
||||||
GameLib.D3.ComponentInterface.prototype.setParentEntity = function(
|
|
||||||
parentScene,
|
|
||||||
parentEntity
|
|
||||||
) {
|
|
||||||
this.parentEntity = parentEntity;
|
|
||||||
this.onSetParentEntity(parentScene, parentEntity);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
GameLib.D3.ComponentInterface.prototype.update = function(
|
|
||||||
deltaTime,
|
|
||||||
parentEntity
|
|
||||||
) {
|
|
||||||
this.onUpdate(deltaTime, parentEntity);
|
|
||||||
};
|
|
||||||
|
|
||||||
GameLib.D3.ComponentInterface.prototype.lateUpdate = function(
|
|
||||||
deltaTime,
|
|
||||||
parentEntity
|
|
||||||
) {
|
|
||||||
this.onLateUpdate(deltaTime, parentEntity);
|
|
||||||
};
|
|
||||||
|
|
||||||
GameLib.D3.ComponentInterface.prototype.register = function(
|
|
||||||
parentScene
|
|
||||||
) {
|
|
||||||
this.onRegistered(parentScene);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////// Methods to override //////////////////////////
|
|
||||||
GameLib.D3.ComponentInterface.prototype.onUpdate = function(
|
|
||||||
deltaTime,
|
|
||||||
parentEntity
|
|
||||||
) {
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
GameLib.D3.ComponentInterface.prototype.onLateUpdate = function(
|
|
||||||
deltaTime,
|
|
||||||
parentEntity
|
|
||||||
) {
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
GameLib.D3.ComponentInterface.prototype.onRegistered = function(
|
|
||||||
parentScene
|
|
||||||
) {
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
GameLib.D3.ComponentInterface.prototype.onSetParentEntity = function(
|
|
||||||
parentScene,
|
|
||||||
parentEntity
|
|
||||||
) {
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
GameLib.D3.ComponentInterface.prototype.clone = function() {
|
|
||||||
return _.cloneDeep(this);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* links component ids to actual objects
|
|
||||||
* @param idToObject Object linking object ids to objects
|
|
||||||
*/
|
|
||||||
GameLib.D3.ComponentInterface.prototype.linkObjects = function(idToObject) {
|
|
||||||
/**
|
|
||||||
* @param camera GameLib.D3.Camera
|
|
||||||
* @param parentEntity GameLib.D3.Entity
|
|
||||||
* @param targetEntity GameLib.D3.Entity
|
|
||||||
* @param spline GameLib.D3.Spline
|
|
||||||
* @param mesh GameLib.D3.Mesh
|
|
||||||
*/
|
|
||||||
|
|
||||||
GameLib.D3.Utils.Link('camera', idToObject, this, this.camera);
|
|
||||||
GameLib.D3.Utils.Link('parentEntity', idToObject, this, this.parentEntity);
|
|
||||||
GameLib.D3.Utils.Link('targetEntity', idToObject, this, this.targetEntity);
|
|
||||||
GameLib.D3.Utils.Link('spline', idToObject, this, this.spline);
|
|
||||||
GameLib.D3.Utils.Link('mesh', idToObject, this, this.mesh);
|
|
||||||
};
|
|
|
@ -25,20 +25,19 @@ GameLib.D3.ComponentLookAt = function ComponentLookAt(
|
||||||
this.graphics = graphics;
|
this.graphics = graphics;
|
||||||
this.graphics.isNotThreeThrow();
|
this.graphics.isNotThreeThrow();
|
||||||
|
|
||||||
if (GameLib.D3.Utils.UndefinedOrNull(id)) {
|
GameLib.D3.Component.call(
|
||||||
id = GameLib.D3.Utils.RandomId();
|
this,
|
||||||
}
|
id,
|
||||||
this.id = id;
|
name,
|
||||||
|
GameLib.D3.Component.COMPONENT_LOOK_AT,
|
||||||
if (GameLib.D3.Utils.UndefinedOrNull(name)) {
|
parentEntity,
|
||||||
name = this.constructor.name;
|
[
|
||||||
}
|
new GameLib.D3.Component.LinkedProperty(
|
||||||
this.name = name;
|
'targetEntity',
|
||||||
|
GameLib.D3.Entity
|
||||||
if (GameLib.D3.Utils.UndefinedOrNull(parentEntity)) {
|
)
|
||||||
parentEntity = null;
|
]
|
||||||
}
|
);
|
||||||
this.parentEntity = parentEntity;
|
|
||||||
|
|
||||||
if (GameLib.D3.Utils.UndefinedOrNull(targetEntity)) {
|
if (GameLib.D3.Utils.UndefinedOrNull(targetEntity)) {
|
||||||
targetEntity = null;
|
targetEntity = null;
|
||||||
|
@ -91,16 +90,18 @@ GameLib.D3.ComponentLookAt = function ComponentLookAt(
|
||||||
this,
|
this,
|
||||||
new GameLib.D3.API.Quaternion()
|
new GameLib.D3.API.Quaternion()
|
||||||
);
|
);
|
||||||
|
|
||||||
GameLib.D3.Utils.Extend(GameLib.D3.ComponentLookAt, GameLib.D3.ComponentInterface);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
///////////////////////// Methods to override //////////////////////////
|
GameLib.D3.ComponentLookAt.prototype = Object.create(GameLib.D3.Component.prototype);
|
||||||
GameLib.D3.ComponentLookAt.prototype.onUpdate = function(
|
GameLib.D3.ComponentLookAt.prototype.constructor = GameLib.D3.ComponentLookAt;
|
||||||
deltaTime,
|
|
||||||
parentEntity
|
/**
|
||||||
) {
|
* onUpdate
|
||||||
if (this.targetEntity) {
|
* @param deltaTime
|
||||||
|
*/
|
||||||
|
GameLib.D3.ComponentLookAt.prototype.onUpdate = function(deltaTime) {
|
||||||
|
|
||||||
|
if (this.targetEntity && this.parentEntity) {
|
||||||
|
|
||||||
this.targetPosition.x = this.targetEntity.position.x + this.targetOffset.x;
|
this.targetPosition.x = this.targetEntity.position.x + this.targetOffset.x;
|
||||||
this.targetPosition.y = this.targetEntity.position.y + this.targetOffset.y;
|
this.targetPosition.y = this.targetEntity.position.y + this.targetOffset.y;
|
||||||
|
|
|
@ -28,7 +28,7 @@ GameLib.D3.ComponentMeshPermutation = function ComponentMeshPermutation(
|
||||||
this.scaleOffset = scaleOffset || new GameLib.D3.API.Vector3(1, 1, 1);
|
this.scaleOffset = scaleOffset || new GameLib.D3.API.Vector3(1, 1, 1);
|
||||||
|
|
||||||
// Todo: this should be executed somewhere in game-lib-z, so that we don't execute it on every construction of an object.
|
// Todo: this should be executed somewhere in game-lib-z, so that we don't execute it on every construction of an object.
|
||||||
GameLib.D3.Utils.Extend(GameLib.D3.ComponentMeshPermutation, GameLib.D3.ComponentInterface);
|
GameLib.D3.Utils.Extend(GameLib.D3.ComponentMeshPermutation, GameLib.D3.Component);
|
||||||
};
|
};
|
||||||
|
|
||||||
//#ifdef RUNTIME__
|
//#ifdef RUNTIME__
|
||||||
|
|
|
@ -28,7 +28,7 @@ GameLib.D3.ComponentOffsettor = function ComponentOffsettor(
|
||||||
this.getOffsetFunc = getOffsetFunc || function(entity, component, userData){ return component.offset; };
|
this.getOffsetFunc = getOffsetFunc || function(entity, component, userData){ return component.offset; };
|
||||||
this.userData = userData;
|
this.userData = userData;
|
||||||
|
|
||||||
GameLib.D3.Utils.Extend(GameLib.D3.ComponentOffsettor, GameLib.D3.ComponentInterface);
|
GameLib.D3.Utils.Extend(GameLib.D3.ComponentOffsettor, GameLib.D3.Component);
|
||||||
};
|
};
|
||||||
|
|
||||||
//#ifdef RUNTIME__
|
//#ifdef RUNTIME__
|
||||||
|
|
|
@ -20,7 +20,7 @@ GameLib.D3.ComponentPathAI = function ComponentPathAI(
|
||||||
this.parentEntity = null;
|
this.parentEntity = null;
|
||||||
this.sensorLength = sensorLength || 5;
|
this.sensorLength = sensorLength || 5;
|
||||||
|
|
||||||
GameLib.D3.Utils.Extend(GameLib.D3.ComponentPathAI, GameLib.D3.ComponentInterface);
|
GameLib.D3.Utils.Extend(GameLib.D3.ComponentPathAI, GameLib.D3.Component);
|
||||||
|
|
||||||
//#ifdef RUNTIME__
|
//#ifdef RUNTIME__
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@ GameLib.D3.ComponentPathControls = function ComponentPathControls(
|
||||||
this.keyBackPressed = false;
|
this.keyBackPressed = false;
|
||||||
this.keyBreakPressed = false;
|
this.keyBreakPressed = false;
|
||||||
|
|
||||||
GameLib.D3.Utils.Extend(GameLib.D3.ComponentPathControls, GameLib.D3.ComponentInterface);
|
GameLib.D3.Utils.Extend(GameLib.D3.ComponentPathControls, GameLib.D3.Component);
|
||||||
};
|
};
|
||||||
|
|
||||||
//#ifdef RUNTIME__
|
//#ifdef RUNTIME__
|
||||||
|
|
|
@ -54,23 +54,27 @@ GameLib.D3.ComponentPathFollowing = function ComponentPathFollowing(
|
||||||
rotationMatrix,
|
rotationMatrix,
|
||||||
rotationVector
|
rotationVector
|
||||||
) {
|
) {
|
||||||
if (GameLib.D3.Utils.UndefinedOrNull(id)) {
|
|
||||||
id = GameLib.D3.Utils.RandomId();
|
|
||||||
}
|
|
||||||
this.id = id;
|
|
||||||
|
|
||||||
if (GameLib.D3.Utils.UndefinedOrNull(name)) {
|
|
||||||
name = this.constructor.name;
|
|
||||||
}
|
|
||||||
this.name = name;
|
|
||||||
|
|
||||||
this.graphics = graphics;
|
this.graphics = graphics;
|
||||||
this.graphics.isNotThreeThrow();
|
this.graphics.isNotThreeThrow();
|
||||||
|
|
||||||
if (GameLib.D3.Utils.UndefinedOrNull(parentEntity)) {
|
GameLib.D3.Component.call(
|
||||||
parentEntity = null;
|
this,
|
||||||
}
|
id,
|
||||||
this.parentEntity = parentEntity;
|
name,
|
||||||
|
GameLib.D3.Component.COMPONENT_PATH_FOLLOWING,
|
||||||
|
parentEntity,
|
||||||
|
[
|
||||||
|
new GameLib.D3.Component.LinkedProperty(
|
||||||
|
'spline',
|
||||||
|
GameLib.D3.Spline
|
||||||
|
),
|
||||||
|
new GameLib.D3.Component.LinkedProperty(
|
||||||
|
'mesh',
|
||||||
|
GameLib.D3.Mesh
|
||||||
|
)
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
if (GameLib.D3.Utils.UndefinedOrNull(spline)) {
|
if (GameLib.D3.Utils.UndefinedOrNull(spline)) {
|
||||||
spline = null;
|
spline = null;
|
||||||
|
@ -231,13 +235,18 @@ GameLib.D3.ComponentPathFollowing = function ComponentPathFollowing(
|
||||||
this,
|
this,
|
||||||
rotationVector
|
rotationVector
|
||||||
);
|
);
|
||||||
//rotationVector.normalize();
|
|
||||||
this.rotationVector = rotationVector;
|
this.rotationVector = rotationVector;
|
||||||
|
|
||||||
GameLib.D3.Utils.Extend(GameLib.D3.ComponentPathFollowing, GameLib.D3.ComponentInterface);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
///////////////////////// Methods to override //////////////////////////
|
GameLib.D3.ComponentPathFollowing.prototype = Object.create(GameLib.D3.Component.prototype);
|
||||||
|
GameLib.D3.ComponentPathFollowing.prototype.constructor = GameLib.D3.ComponentPathFollowing;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param deltaTime
|
||||||
|
* @callback
|
||||||
|
* @override
|
||||||
|
*/
|
||||||
GameLib.D3.ComponentPathFollowing.prototype.onUpdate = function(
|
GameLib.D3.ComponentPathFollowing.prototype.onUpdate = function(
|
||||||
deltaTime
|
deltaTime
|
||||||
) {
|
) {
|
||||||
|
|
|
@ -38,7 +38,7 @@ GameLib.D3.ComponentRaycastVehicleControls = function ComponentRaycastVehicleCon
|
||||||
this.keyBreakPressed = false;
|
this.keyBreakPressed = false;
|
||||||
|
|
||||||
// Todo: this should be executed somewhere in game-lib-z, so that we don't execute it on every construction of an object.
|
// Todo: this should be executed somewhere in game-lib-z, so that we don't execute it on every construction of an object.
|
||||||
GameLib.D3.Utils.Extend(GameLib.D3.ComponentRaycastVehicleControls, GameLib.D3.ComponentInterface);
|
GameLib.D3.Utils.Extend(GameLib.D3.ComponentRaycastVehicleControls, GameLib.D3.Component);
|
||||||
};
|
};
|
||||||
|
|
||||||
///////////////////////// Methods to override //////////////////////////
|
///////////////////////// Methods to override //////////////////////////
|
||||||
|
|
|
@ -28,7 +28,7 @@ GameLib.D3.ComponentRotator = function ComponentRotator(
|
||||||
this.getRotationFunc = getRotationFunc || function(entity, component, userData){ return component.rotation; };
|
this.getRotationFunc = getRotationFunc || function(entity, component, userData){ return component.rotation; };
|
||||||
this.userData = userData;
|
this.userData = userData;
|
||||||
|
|
||||||
GameLib.D3.Utils.Extend(GameLib.D3.ComponentRotator, GameLib.D3.ComponentInterface);
|
GameLib.D3.Utils.Extend(GameLib.D3.ComponentRotator, GameLib.D3.Component);
|
||||||
};
|
};
|
||||||
|
|
||||||
//#ifdef RUNTIME__
|
//#ifdef RUNTIME__
|
||||||
|
|
|
@ -23,7 +23,7 @@ GameLib.D3.ComponentTriggerBoxBox = function ComponentTriggerBoxBox(
|
||||||
this.parentEntity = null;
|
this.parentEntity = null;
|
||||||
|
|
||||||
// Todo: this should be executed somewhere in game-lib-z, so that we don't execute it on every construction of an object.
|
// Todo: this should be executed somewhere in game-lib-z, so that we don't execute it on every construction of an object.
|
||||||
GameLib.D3.Utils.Extend(GameLib.D3.ComponentTriggerBoxBox, GameLib.D3.ComponentInterface);
|
GameLib.D3.Utils.Extend(GameLib.D3.ComponentTriggerBoxBox, GameLib.D3.Component);
|
||||||
|
|
||||||
this.entitiesToCheck = entitiesToCheck || [];
|
this.entitiesToCheck = entitiesToCheck || [];
|
||||||
this.onInside = onInside || null;
|
this.onInside = onInside || null;
|
||||||
|
|
|
@ -21,7 +21,7 @@ GameLib.D3.ComponentTriggerBoxSphere = function ComponentTriggerBoxSphere(
|
||||||
this.parentEntity = null;
|
this.parentEntity = null;
|
||||||
|
|
||||||
// Todo: this should be executed somewhere in game-lib-z, so that we don't execute it on every construction of an object.
|
// Todo: this should be executed somewhere in game-lib-z, so that we don't execute it on every construction of an object.
|
||||||
GameLib.D3.Utils.Extend(GameLib.D3.ComponentTriggerBoxSphere, GameLib.D3.ComponentInterface);
|
GameLib.D3.Utils.Extend(GameLib.D3.ComponentTriggerBoxSphere, GameLib.D3.Component);
|
||||||
|
|
||||||
this.entitiesToCheck = entitiesToCheck || [];
|
this.entitiesToCheck = entitiesToCheck || [];
|
||||||
this.onInside = onInside || null;
|
this.onInside = onInside || null;
|
||||||
|
|
|
@ -32,7 +32,7 @@ GameLib.D3.ComponentTriggerSphereSphere = function ComponentTriggerSphereSphere(
|
||||||
this.parentEntity = null;
|
this.parentEntity = null;
|
||||||
|
|
||||||
// Todo: this should be executed somewhere in game-lib-z, so that we don't execute it on every construction of an object.
|
// Todo: this should be executed somewhere in game-lib-z, so that we don't execute it on every construction of an object.
|
||||||
GameLib.D3.Utils.Extend(GameLib.D3.ComponentTriggerSphereSphere, GameLib.D3.ComponentInterface);
|
GameLib.D3.Utils.Extend(GameLib.D3.ComponentTriggerSphereSphere, GameLib.D3.Component);
|
||||||
|
|
||||||
this.entitiesToCheck = entitiesToCheck || [];
|
this.entitiesToCheck = entitiesToCheck || [];
|
||||||
this.sphereRadius = sphereRadius || 1.0;
|
this.sphereRadius = sphereRadius || 1.0;
|
||||||
|
|
|
@ -17,7 +17,7 @@ GameLib.D3.ComponentVehicleAIObjectAvoidance = function(
|
||||||
this.name = name;
|
this.name = name;
|
||||||
|
|
||||||
this.parentEntity = null;
|
this.parentEntity = null;
|
||||||
GameLib.D3.Utils.Extend(GameLib.D3.ComponentVehicleAIObjectAvoidance, GameLib.D3.ComponentInterface);
|
GameLib.D3.Utils.Extend(GameLib.D3.ComponentVehicleAIObjectAvoidance, GameLib.D3.Component);
|
||||||
|
|
||||||
this.raycastVehicleComponent = null;
|
this.raycastVehicleComponent = null;
|
||||||
this.physicsWorld = world || null;
|
this.physicsWorld = world || null;
|
||||||
|
|
|
@ -23,7 +23,7 @@ GameLib.D3.ComponentVehicleAIPathSteering = function(
|
||||||
this.parentEntity = null;
|
this.parentEntity = null;
|
||||||
|
|
||||||
// Todo: this should be executed somewhere in game-lib-z, so that we don't execute it on every construction of an object.
|
// Todo: this should be executed somewhere in game-lib-z, so that we don't execute it on every construction of an object.
|
||||||
GameLib.D3.Utils.Extend(GameLib.D3.ComponentVehicleAIPathSteering, GameLib.D3.ComponentInterface);
|
GameLib.D3.Utils.Extend(GameLib.D3.ComponentVehicleAIPathSteering, GameLib.D3.Component);
|
||||||
|
|
||||||
//
|
//
|
||||||
this.targetEntity = targetEntity;
|
this.targetEntity = targetEntity;
|
||||||
|
|
|
@ -34,7 +34,50 @@ GameLib.D3.Entity = function Entity(
|
||||||
this,
|
this,
|
||||||
this.scale
|
this.scale
|
||||||
);
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the Entity and it's components
|
||||||
|
* @param deltaTime Number
|
||||||
|
* @param late boolean to indicate whether or not this is a late update
|
||||||
|
*/
|
||||||
|
GameLib.D3.Entity.prototype.update = function(
|
||||||
|
deltaTime,
|
||||||
|
late
|
||||||
|
) {
|
||||||
|
|
||||||
|
this.components.forEach(
|
||||||
|
function (component) {
|
||||||
|
if (!late && component.onUpdate) {
|
||||||
|
component.onUpdate(deltaTime, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (late && component.onLateUpdate) {
|
||||||
|
component.onLateUpdate(deltaTime, this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
if (this.mesh) {
|
||||||
|
|
||||||
|
this.mesh.position.x = this.position.x;
|
||||||
|
this.mesh.position.y = this.position.y;
|
||||||
|
this.mesh.position.z = this.position.z;
|
||||||
|
|
||||||
|
this.mesh.scale.x = this.scale.x;
|
||||||
|
this.mesh.scale.y = this.scale.y;
|
||||||
|
this.mesh.scale.z = this.scale.z;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Caller is responsible for correct quaternion - i.e. normalize quaternion if needed
|
||||||
|
*/
|
||||||
|
this.mesh.quaternion.x = this.quaternion.x;
|
||||||
|
this.mesh.quaternion.y = this.quaternion.y;
|
||||||
|
this.mesh.quaternion.z = this.quaternion.z;
|
||||||
|
this.mesh.quaternion.w = this.quaternion.w;
|
||||||
|
|
||||||
|
this.mesh.updateInstance();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -43,16 +86,18 @@ GameLib.D3.Entity = function Entity(
|
||||||
*/
|
*/
|
||||||
GameLib.D3.Entity.prototype.toApiEntity = function() {
|
GameLib.D3.Entity.prototype.toApiEntity = function() {
|
||||||
|
|
||||||
return new GameLib.D3.API.Entity(
|
var apiEntity = new GameLib.D3.API.Entity(
|
||||||
this.id,
|
this.id,
|
||||||
this.name,
|
this.name,
|
||||||
this.ids,
|
GameLib.D3.Utils.IdArrayOrEmptyArray(this.components),
|
||||||
this.position.toApiVector(),
|
this.position.toApiVector(),
|
||||||
this.quaternion.toApiQuaternion(),
|
this.quaternion.toApiQuaternion(),
|
||||||
this.scale.toApiVector(),
|
this.scale.toApiVector(),
|
||||||
GameLib.D3.Utils.IdOrNull(this.parentScene),
|
GameLib.D3.Utils.IdOrNull(this.parentScene),
|
||||||
GameLib.D3.Utils.IdOrNull(this.mesh)
|
GameLib.D3.Utils.IdOrNull(this.mesh)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
return apiEntity;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -66,7 +111,7 @@ GameLib.D3.Entity.FromObjectEntity = function(graphics, objectEntity) {
|
||||||
var apiEntity = new GameLib.D3.API.Entity(
|
var apiEntity = new GameLib.D3.API.Entity(
|
||||||
objectEntity.id,
|
objectEntity.id,
|
||||||
objectEntity.name,
|
objectEntity.name,
|
||||||
objectEntity.ids,
|
objectEntity.components,
|
||||||
new GameLib.D3.API.Vector3(
|
new GameLib.D3.API.Vector3(
|
||||||
objectEntity.position.x,
|
objectEntity.position.x,
|
||||||
objectEntity.position.y,
|
objectEntity.position.y,
|
||||||
|
@ -98,73 +143,6 @@ GameLib.D3.Entity.FromObjectEntity = function(graphics, objectEntity) {
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Updates the Entity and it's components
|
|
||||||
* @param deltaTime Number
|
|
||||||
*/
|
|
||||||
GameLib.D3.Entity.prototype.update = function(
|
|
||||||
deltaTime
|
|
||||||
) {
|
|
||||||
for(var c in this.ids) {
|
|
||||||
var id = this.ids[c];
|
|
||||||
var component = this.parentScene.idToObject[id];
|
|
||||||
if(component && component.onUpdate) {
|
|
||||||
component.onUpdate(deltaTime, this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// todo: maybe we only need to call this AFTER late update
|
|
||||||
this.updateMesh();
|
|
||||||
|
|
||||||
this.onUpdate(deltaTime);
|
|
||||||
};
|
|
||||||
|
|
||||||
GameLib.D3.Entity.prototype.updateMesh = function() {
|
|
||||||
|
|
||||||
if (this.mesh) {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Normalize to prevent stretching
|
|
||||||
*/
|
|
||||||
this.quaternion.normalize();
|
|
||||||
|
|
||||||
this.mesh.position.x = this.position.x;
|
|
||||||
this.mesh.position.y = this.position.y;
|
|
||||||
this.mesh.position.z = this.position.z;
|
|
||||||
|
|
||||||
this.mesh.scale.x = this.scale.x;
|
|
||||||
this.mesh.scale.y = this.scale.y;
|
|
||||||
this.mesh.scale.z = this.scale.z;
|
|
||||||
|
|
||||||
this.mesh.quaternion.x = this.quaternion.x;
|
|
||||||
this.mesh.quaternion.y = this.quaternion.y;
|
|
||||||
this.mesh.quaternion.z = this.quaternion.z;
|
|
||||||
this.mesh.quaternion.w = this.quaternion.w;
|
|
||||||
|
|
||||||
this.mesh.updateInstance();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Late updates the Entity and it's components
|
|
||||||
* @param deltaTime Number
|
|
||||||
*/
|
|
||||||
GameLib.D3.Entity.prototype.lateUpdate = function(
|
|
||||||
deltaTime
|
|
||||||
) {
|
|
||||||
for(var c in this.ids) {
|
|
||||||
var id = this.ids[c];
|
|
||||||
var component = this.parentScene.idToObject[id];
|
|
||||||
if(component && component.onLateUpdate) {
|
|
||||||
component.onLateUpdate(deltaTime, this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.updateMesh();
|
|
||||||
|
|
||||||
this.onLateUpdate(deltaTime);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets called when the entity was registered with it's parent scene
|
* Gets called when the entity was registered with it's parent scene
|
||||||
* @param parentScene GameLib.D3.Scene
|
* @param parentScene GameLib.D3.Scene
|
||||||
|
@ -172,91 +150,67 @@ GameLib.D3.Entity.prototype.lateUpdate = function(
|
||||||
GameLib.D3.Entity.prototype.register = function(
|
GameLib.D3.Entity.prototype.register = function(
|
||||||
parentScene
|
parentScene
|
||||||
) {
|
) {
|
||||||
// this.parentScene = parentScene;
|
|
||||||
//
|
|
||||||
// if (this.mesh && this.mesh.id != null && parentScene.meshIdToMesh[this.mesh.id]) {
|
|
||||||
// parentScene.instance.add(parentScene.meshIdToMesh[this.mesh.id]);
|
|
||||||
// this.mesh = parentScene.meshIdToMesh[this.id];
|
|
||||||
// }
|
|
||||||
|
|
||||||
this.onRegistered(this.parentScene);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add an already registered component to the entity
|
|
||||||
* @param id Number
|
|
||||||
*/
|
|
||||||
GameLib.D3.Entity.prototype.addComponentId = function(
|
|
||||||
id
|
|
||||||
) {
|
|
||||||
this.ids.push(id);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds a components to the entity and registers it with the entity's parent scene
|
* Adds a components to the entity and registers it with the entity's parent scene
|
||||||
* @param component GameLib.D3.ComponentInterface
|
* @param component GameLib.D3.Component
|
||||||
*/
|
*/
|
||||||
GameLib.D3.Entity.prototype.addComponent = function(
|
GameLib.D3.Entity.prototype.addComponent = function(
|
||||||
component
|
component
|
||||||
) {
|
) {
|
||||||
this.parentScene.registerComponent(component);
|
this.components.push(component);
|
||||||
|
|
||||||
this.ids.push(component.id);
|
if (_.isFunction(component.onAdd)) {
|
||||||
|
component.onAdd(this);
|
||||||
if(component.setParentEntity && typeof component.setParentEntity == 'function') {
|
|
||||||
component.setParentEntity(this.parentScene, this);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
GameLib.D3.Entity.prototype.removeComponent = function(component) {
|
GameLib.D3.Entity.prototype.removeComponent = function(component) {
|
||||||
if(component && component.id && this.parentScene.idToObject[component.id]) {
|
|
||||||
this.ids = this.ids.splice(this.ids.indexOf(component), 1);
|
var index = this.components.indexOf(component);
|
||||||
delete this.parentScene.idToObject[component.id];
|
this.components.splice(index, 1);
|
||||||
|
|
||||||
|
if (_.isFunction(component.onRemove)) {
|
||||||
|
component.onRemove(this);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
GameLib.D3.Entity.prototype.getComponent = function(
|
/**
|
||||||
componentType
|
* Links object Ids to actual objects
|
||||||
) {
|
* @param idToObject
|
||||||
for (var componentId in this.ids) {
|
|
||||||
if (this.ids.hasOwnProperty(componentId)) {
|
|
||||||
var id = this.ids[componentId];
|
|
||||||
var component = this.parentScene.idToObject[id];
|
|
||||||
if (component instanceof componentType) {
|
|
||||||
return component;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
};
|
|
||||||
|
|
||||||
///////////////////////// Methods to override //////////////////////////
|
|
||||||
|
|
||||||
GameLib.D3.Entity.prototype.onUpdate = function(
|
|
||||||
deltaTime
|
|
||||||
) {
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
GameLib.D3.Entity.prototype.onLateUpdate = function(
|
|
||||||
deltaTime
|
|
||||||
) {
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
GameLib.D3.Entity.prototype.onRegistered = function(
|
|
||||||
parentScene
|
|
||||||
) {
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
GameLib.D3.Entity.prototype.linkObjects = function(idToObject) {
|
|
||||||
/**
|
|
||||||
* @param scene GameLib.D3.Scene
|
|
||||||
* @param mesh GameLib.D3.Mesh
|
|
||||||
*/
|
*/
|
||||||
GameLib.D3.Utils.Link('parentScene', idToObject, this, this.parentScene);
|
GameLib.D3.Entity.prototype.linkObjects = function(idToObject) {
|
||||||
GameLib.D3.Utils.Link('mesh', idToObject, this, this.mesh);
|
|
||||||
|
this.components.forEach(
|
||||||
|
function(currentValue, index, array) {
|
||||||
|
|
||||||
|
if (!idToObject[currentValue]) {
|
||||||
|
throw new Error('Unable to locate component with ID: ' + currentValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
array[index] = idToObject[currentValue];
|
||||||
|
}.bind(this)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (this.parentScene) {
|
||||||
|
|
||||||
|
if (!idToObject[this.parentScene]) {
|
||||||
|
throw new Error('Unable to locate scene with ID: ' + this.parentScene);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.parentScene = idToObject[this.parentScene];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.mesh) {
|
||||||
|
|
||||||
|
if (!idToObject[this.mesh]) {
|
||||||
|
throw new Error('Unable to locate mesh with ID: ' + this.mesh);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.mesh = idToObject[this.mesh];
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
|
@ -73,7 +73,8 @@ GameLib.D3.Image = function(
|
||||||
id,
|
id,
|
||||||
filename,
|
filename,
|
||||||
size,
|
size,
|
||||||
contentType
|
contentType,
|
||||||
|
textureLink
|
||||||
) {
|
) {
|
||||||
if (GameLib.D3.Utils.UndefinedOrNull(id)) {
|
if (GameLib.D3.Utils.UndefinedOrNull(id)) {
|
||||||
id = GameLib.D3.Utils.RandomId();
|
id = GameLib.D3.Utils.RandomId();
|
||||||
|
@ -104,4 +105,6 @@ GameLib.D3.Image = function(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.contentType = contentType;
|
this.contentType = contentType;
|
||||||
|
|
||||||
|
this.textureLink = textureLink;
|
||||||
};
|
};
|
||||||
|
|
|
@ -105,7 +105,14 @@ GameLib.D3.Matrix4.prototype.createInstance = function(update) {
|
||||||
* Updates this instance
|
* Updates this instance
|
||||||
*/
|
*/
|
||||||
GameLib.D3.Matrix4.prototype.updateInstance = function() {
|
GameLib.D3.Matrix4.prototype.updateInstance = function() {
|
||||||
|
|
||||||
this.createInstance(true);
|
this.createInstance(true);
|
||||||
|
|
||||||
|
if (this.parentObject) {
|
||||||
|
if (this.parentObject.updateInstance) {
|
||||||
|
this.parentObject.updateInstance();
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
GameLib.D3.Matrix4.prototype.lookAt = function (position, target, up) {
|
GameLib.D3.Matrix4.prototype.lookAt = function (position, target, up) {
|
||||||
|
|
|
@ -2,20 +2,20 @@
|
||||||
* Runtime quaternion for updating instance objects
|
* Runtime quaternion for updating instance objects
|
||||||
* @param graphics GameLib.D3.Graphics
|
* @param graphics GameLib.D3.Graphics
|
||||||
* @param parentObject GameLib.D3.*
|
* @param parentObject GameLib.D3.*
|
||||||
* @param quaternion GameLib.D3.API.Quaternion
|
* @param apiQuaternion GameLib.D3.API.Quaternion
|
||||||
* @param grain Number
|
* @param grain Number
|
||||||
* @constructor
|
* @constructor
|
||||||
*/
|
*/
|
||||||
GameLib.D3.Quaternion = function RuntimeQuaternion(
|
GameLib.D3.Quaternion = function RuntimeQuaternion(
|
||||||
graphics,
|
graphics,
|
||||||
parentObject,
|
parentObject,
|
||||||
quaternion,
|
apiQuaternion,
|
||||||
grain
|
grain
|
||||||
) {
|
) {
|
||||||
|
|
||||||
for (var property in quaternion) {
|
for (var property in apiQuaternion) {
|
||||||
if (quaternion.hasOwnProperty(property)) {
|
if (apiQuaternion.hasOwnProperty(property)) {
|
||||||
this[property] = quaternion[property];
|
this[property] = apiQuaternion[property];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ GameLib.D3.RaycastVehicle = function(
|
||||||
|
|
||||||
this.instance = this.createInstance();
|
this.instance = this.createInstance();
|
||||||
|
|
||||||
GameLib.D3.Utils.Extend(GameLib.D3.RaycastVehicle, GameLib.D3.ComponentInterface);
|
GameLib.D3.Utils.Extend(GameLib.D3.RaycastVehicle, GameLib.D3.Component);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -62,7 +62,7 @@ GameLib.D3.RigidBody = function(
|
||||||
this.instance = this.createInstance();
|
this.instance = this.createInstance();
|
||||||
|
|
||||||
// Todo: this should be executed somewhere in game-lib-z, so that we don't execute it on every construction of an object.
|
// Todo: this should be executed somewhere in game-lib-z, so that we don't execute it on every construction of an object.
|
||||||
GameLib.D3.Utils.Extend(GameLib.D3.RigidBody, GameLib.D3.ComponentInterface);
|
GameLib.D3.Utils.Extend(GameLib.D3.RigidBody, GameLib.D3.Component);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -258,7 +258,7 @@ GameLib.D3.Scene.FromObjectScene = function(
|
||||||
),
|
),
|
||||||
objectScene.components.map(
|
objectScene.components.map(
|
||||||
function (objectComponent) {
|
function (objectComponent) {
|
||||||
return GameLib.D3.ComponentInterface.FromObjectComponent(
|
return GameLib.D3.Component.FromObjectComponent(
|
||||||
graphics,
|
graphics,
|
||||||
objectComponent
|
objectComponent
|
||||||
);
|
);
|
||||||
|
@ -386,20 +386,6 @@ GameLib.D3.Scene.LoadSceneFromApi = function(
|
||||||
xhr.send();
|
xhr.send();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
GameLib.D3.Scene.prototype.intitializeComponents = function() {
|
|
||||||
for (var c = 0; c < this.components.length; c++) {
|
|
||||||
|
|
||||||
var component = this.components[c];
|
|
||||||
|
|
||||||
this.registerComponent(component);
|
|
||||||
|
|
||||||
if(component.setParentEntity && typeof component.setParentEntity == 'function') {
|
|
||||||
component.setParentEntity(this.parentScene, this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates the scene
|
* Updates the scene
|
||||||
* @param deltaTime
|
* @param deltaTime
|
||||||
|
@ -407,25 +393,23 @@ GameLib.D3.Scene.prototype.intitializeComponents = function() {
|
||||||
GameLib.D3.Scene.prototype.update = function(
|
GameLib.D3.Scene.prototype.update = function(
|
||||||
deltaTime
|
deltaTime
|
||||||
) {
|
) {
|
||||||
for(var e in this.entities) {
|
this.entities.forEach(
|
||||||
if (this.entities.hasOwnProperty(e)) {
|
function (entity) {
|
||||||
this.entities[e].update(deltaTime);
|
if (_.isFunction(entity.update)) {
|
||||||
}
|
/**
|
||||||
}
|
* Normal update
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Updates the scene
|
|
||||||
* @param deltaTime
|
|
||||||
*/
|
*/
|
||||||
GameLib.D3.Scene.prototype.lateUpdate = function(
|
entity.update(deltaTime, false);
|
||||||
deltaTime
|
|
||||||
) {
|
//TODO: calculate new delta time?
|
||||||
for(var e in this.entities) {
|
|
||||||
if (this.entities.hasOwnProperty(e)) {
|
/**
|
||||||
this.entities[e].lateUpdate(deltaTime);
|
* Late update
|
||||||
|
*/
|
||||||
|
entity.update(deltaTime, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -440,67 +424,22 @@ GameLib.D3.Scene.prototype.render = function(
|
||||||
renderer.render(this.instance, this.cameras[this.activeCameraIndex].instance);
|
renderer.render(this.instance, this.cameras[this.activeCameraIndex].instance);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* Registers an entity to the scene.
|
|
||||||
* This method also links the entity and it's components,
|
|
||||||
* if they are defined inside the ids array.
|
|
||||||
* The setParentEntity and onSetParentEntity methods are being called here.
|
|
||||||
* @param entity GameLib.D3.Entity
|
|
||||||
*/
|
|
||||||
GameLib.D3.Scene.prototype.registerEntity = function(
|
|
||||||
entity
|
|
||||||
) {
|
|
||||||
if (!this.idToObject.hasOwnProperty(entity.id)) {
|
|
||||||
this.idToObject[entity.id] = entity;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.entities.indexOf(entity) == -1) {
|
|
||||||
this.entities.push(entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
entity.register(this);
|
|
||||||
|
|
||||||
for(var c = 0; c < entity.ids.length; c++) {
|
|
||||||
|
|
||||||
var id = entity.ids[c];
|
|
||||||
|
|
||||||
var component = this.idToObject[id];
|
|
||||||
|
|
||||||
if (component) {
|
|
||||||
component.setParentEntity(this, entity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Registers a component to the scene.
|
|
||||||
* This method also calls the onRegistered-method on the component
|
|
||||||
* @param component GameLib.D3.ComponentInterface
|
|
||||||
*/
|
|
||||||
GameLib.D3.Scene.prototype.registerComponent = function(
|
|
||||||
component
|
|
||||||
) {
|
|
||||||
this.components.push(component);
|
|
||||||
|
|
||||||
this.idToObject[component.id] = component;
|
|
||||||
|
|
||||||
if (component.onRegistered && typeof component.onRegistered == 'function') {
|
|
||||||
component.onRegistered(this);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* After we created a scene and idToObject has been created, we should execute this function to map
|
* After we created a scene and idToObject has been created, we should execute this function to map
|
||||||
* the components witht their ids to the proper objects
|
* the scene objects to the components and entities
|
||||||
*/
|
*/
|
||||||
GameLib.D3.Scene.prototype.linkObjects = function() {
|
GameLib.D3.Scene.prototype.linkObjects = function() {
|
||||||
|
|
||||||
this.components.map(function(component) {
|
this.components.map(
|
||||||
|
function(component) {
|
||||||
component.linkObjects(this.idToObject);
|
component.linkObjects(this.idToObject);
|
||||||
}.bind(this));
|
}.bind(this)
|
||||||
|
);
|
||||||
|
|
||||||
this.entities.map(function(entity) {
|
this.entities.map(
|
||||||
|
function(entity) {
|
||||||
entity.linkObjects(this.idToObject);
|
entity.linkObjects(this.idToObject);
|
||||||
}.bind(this));
|
}.bind(this)
|
||||||
|
);
|
||||||
|
|
||||||
};
|
};
|
|
@ -34,6 +34,28 @@ GameLib.D3.Utils.IdOrNull = function (object) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an array of IDs representing the objects
|
||||||
|
* @param array
|
||||||
|
* @returns []
|
||||||
|
* @constructor
|
||||||
|
*/
|
||||||
|
GameLib.D3.Utils.IdArrayOrEmptyArray = function (array) {
|
||||||
|
if (GameLib.D3.Utils.UndefinedOrNull(array)) {
|
||||||
|
return [];
|
||||||
|
} else {
|
||||||
|
|
||||||
|
return array.map(function(item) {
|
||||||
|
|
||||||
|
if (GameLib.D3.Utils.UndefinedOrNull(item.id)) {
|
||||||
|
throw new Error('No ID found while trying to store IDs to array');
|
||||||
|
}
|
||||||
|
|
||||||
|
return item.id
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Links an object to its parent through idToObject array
|
* Links an object to its parent through idToObject array
|
||||||
* @param propertyString
|
* @param propertyString
|
||||||
|
@ -47,7 +69,7 @@ GameLib.D3.Utils.Link = function(propertyString, idToObject, parentObject, id) {
|
||||||
if (!GameLib.D3.Utils.UndefinedOrNull(parentObject[propertyString])) {
|
if (!GameLib.D3.Utils.UndefinedOrNull(parentObject[propertyString])) {
|
||||||
|
|
||||||
if (!idToObject.hasOwnProperty(id)) {
|
if (!idToObject.hasOwnProperty(id)) {
|
||||||
console.warn('camera linking failed for object:' + parentObject.name);
|
console.warn('Linking failed for object:' + parentObject.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
parentObject[propertyString] = idToObject[id];
|
parentObject[propertyString] = idToObject[id];
|
||||||
|
|
|
@ -2,15 +2,15 @@
|
||||||
* Runtime vector2 for updating instance objects
|
* Runtime vector2 for updating instance objects
|
||||||
* @param graphics GameLib.D3.Graphics
|
* @param graphics GameLib.D3.Graphics
|
||||||
* @param parentObject GameLib.D3.*
|
* @param parentObject GameLib.D3.*
|
||||||
* @param vector2 GameLib.D3.API.Vector2
|
* @param apiVector2 GameLib.D3.API.Vector2
|
||||||
* @param grain Number
|
* @param grain Number
|
||||||
* @constructor
|
* @constructor
|
||||||
*/
|
*/
|
||||||
GameLib.D3.Vector2 = function RuntimeVector2(graphics, parentObject, vector2, grain) {
|
GameLib.D3.Vector2 = function RuntimeVector2(graphics, parentObject, apiVector2, grain) {
|
||||||
|
|
||||||
for (var property in vector2) {
|
for (var property in apiVector2) {
|
||||||
if (vector2.hasOwnProperty(property)) {
|
if (apiVector2.hasOwnProperty(property)) {
|
||||||
this[property] = vector2[property];
|
this[property] = apiVector2[property];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,6 @@ GameLib.D3.Vector3.prototype.updateInstance = function() {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts runtime vector to API Vector
|
* Converts runtime vector to API Vector
|
||||||
* @returns {GameLib.D3.API.Vector3}
|
|
||||||
*/
|
*/
|
||||||
GameLib.D3.Vector3.prototype.toApiVector = function() {
|
GameLib.D3.Vector3.prototype.toApiVector = function() {
|
||||||
return new GameLib.D3.API.Vector3(
|
return new GameLib.D3.API.Vector3(
|
||||||
|
|
|
@ -0,0 +1,80 @@
|
||||||
|
/**
|
||||||
|
* Runtime apiVector4 for updating instance objects
|
||||||
|
* @param graphics GameLib.D3.Graphics
|
||||||
|
* @param parentObject GameLib.D3.*
|
||||||
|
* @param apiVector4 GameLib.D3.API.Vector4
|
||||||
|
* @param grain Number
|
||||||
|
* @constructor
|
||||||
|
*/
|
||||||
|
GameLib.D3.Vector4 = function RuntimeVector4(graphics, parentObject, apiVector4, grain) {
|
||||||
|
|
||||||
|
GameLib.D3.API.Vector4.call(
|
||||||
|
this,
|
||||||
|
apiVector4.x,
|
||||||
|
apiVector4.y,
|
||||||
|
apiVector4.z,
|
||||||
|
apiVector4.w
|
||||||
|
);
|
||||||
|
|
||||||
|
this.graphics = graphics;
|
||||||
|
|
||||||
|
this.graphics.isNotThreeThrow();
|
||||||
|
|
||||||
|
this.parentObject = parentObject;
|
||||||
|
|
||||||
|
if (GameLib.D3.Utils.UndefinedOrNull(grain)) {
|
||||||
|
grain = 0.001;
|
||||||
|
}
|
||||||
|
this.grain = grain;
|
||||||
|
|
||||||
|
this.instance = this.createInstance();
|
||||||
|
};
|
||||||
|
|
||||||
|
GameLib.D3.Vector4.prototype = Object.create(GameLib.D3.API.Vector4.prototype);
|
||||||
|
GameLib.D3.Vector4.prototype.constructor = GameLib.D3.Vector4;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an instance vector3
|
||||||
|
* @param update
|
||||||
|
* @returns {*}
|
||||||
|
*/
|
||||||
|
GameLib.D3.Vector4.prototype.createInstance = function(update) {
|
||||||
|
|
||||||
|
var instance = null;
|
||||||
|
|
||||||
|
if (update) {
|
||||||
|
instance = this.instance;
|
||||||
|
instance.x = this.x;
|
||||||
|
instance.y = this.y;
|
||||||
|
instance.z = this.z;
|
||||||
|
instance.w = this.w;
|
||||||
|
} else {
|
||||||
|
instance = new THREE.Quaternion(this.x, this.y, this.z, this.w);
|
||||||
|
}
|
||||||
|
|
||||||
|
return instance;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the instance vector, calls updateInstance on the parent object
|
||||||
|
*/
|
||||||
|
GameLib.D3.Vector4.prototype.updateInstance = function() {
|
||||||
|
|
||||||
|
this.createInstance(true);
|
||||||
|
|
||||||
|
if (this.parentObject.updateInstance) {
|
||||||
|
this.parentObject.updateInstance();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts runtime vector to API Vector
|
||||||
|
*/
|
||||||
|
GameLib.D3.Vector4.prototype.toApiVector = function() {
|
||||||
|
return new GameLib.D3.API.Vector4(
|
||||||
|
this.x,
|
||||||
|
this.y,
|
||||||
|
this.z,
|
||||||
|
this.w
|
||||||
|
);
|
||||||
|
};
|
Loading…
Reference in New Issue