some more optimizations

This commit is contained in:
RandomityGuy 2024-07-16 19:38:34 +05:30
parent 13c9c8d99e
commit b6679f7b87
6 changed files with 17 additions and 11 deletions

View file

@ -84,7 +84,7 @@ class DtsObject extends GameObject {
var materialInfos:Map<Material, Array<String>> = new Map();
var matNameOverride:Map<String, String> = new Map();
var sequenceKeyframeOverride:Map<Sequence, Float> = new Map();
var sequenceKeyframeOverride:Array<Float> = [];
var lastSequenceKeyframes:Array<Float> = [];
var graphNodes:Array<Object> = [];
@ -333,6 +333,7 @@ class DtsObject extends GameObject {
for (seq in this.dts.sequences) {
lastSequenceKeyframes.push(0);
sequenceKeyframeOverride.push(-1);
}
if (!this.isInstanced) {
@ -843,7 +844,7 @@ class DtsObject extends GameObject {
var translations:Array<Vector> = null;
var scales:Array<Vector> = null;
var actualKeyframe = this.sequenceKeyframeOverride.exists(sequence) ? this.sequenceKeyframeOverride.get(sequence) : ((completion * sequence.numKeyFrames) % sequence.numKeyFrames);
var actualKeyframe = this.sequenceKeyframeOverride[i] != -1 ? this.sequenceKeyframeOverride[i] : ((completion * sequence.numKeyFrames) % sequence.numKeyFrames);
if (lastSequenceKeyframes[i] == actualKeyframe)
continue;
lastSequenceKeyframes[i] = actualKeyframe;

View file

@ -96,8 +96,14 @@ class ReusableList<T> {
}
}
@:publicFields
@:structInit
class InstancedMesh {
var batches:Array<MeshBatchInfo>;
}
class InstanceManager {
var objects:Array<Array<MeshBatchInfo>> = [];
var objects:Array<InstancedMesh> = [];
var objectMap:Map<String, Int> = [];
var scene:Scene;
@ -119,7 +125,7 @@ class InstanceManager {
var cameraFrustrums = doFrustumCheck ? MarbleGame.instance.world.marble.cubemapRenderer.getCameraFrustums() : null;
for (meshes in objects) {
for (minfo in meshes) {
for (minfo in meshes.batches) {
opaqueinstances.clear();
transparentinstances.clear();
// Culling
@ -218,7 +224,7 @@ class InstanceManager {
var objs = getAllChildren(object);
var minfos = objects[objectMap.get(object.identifier)]; // objects.get(object.identifier);
for (i in 0...objs.length) {
minfos[i].instances.push(new MeshInstance(objs[i], object));
minfos.batches[i].instances.push(new MeshInstance(objs[i], object));
}
} else {
// First time appending the thing so bruh
@ -329,14 +335,14 @@ class InstanceManager {
minfos.push(minfo);
}
var curidx = objects.length;
objects.push(minfos);
objects.push({batches: minfos});
objectMap.set(object.identifier, curidx);
}
}
public function getObjectBounds(object:GameObject) {
if (isInstanced(object)) {
var minfos = objects[objectMap.get(object.identifier)];
var minfos = objects[objectMap.get(object.identifier)].batches;
var invmat = minfos[0].instances[0].gameObject.getInvPos();
var b = minfos[0].instances[0].gameObject.getBounds().clone();
b.transform(invmat);

View file

@ -87,7 +87,6 @@ class MissionList {
multiplayerMissions.set("beginner", parseDifficulty("multiplayer", "multiplayer/hunt", "beginner"));
multiplayerMissions.set("intermediate", parseDifficulty("multiplayer", "multiplayer/hunt", "intermediate"));
multiplayerMissions.set("advanced", parseDifficulty("multiplayer", "multiplayer/hunt", "advanced"));
multiplayerMissions.set("custom", parseDifficulty("multiplayer", "multiplayer/hunt", "custom"));
customMissions = parseDifficulty("custom", "missions", "custom");

View file

@ -16,7 +16,7 @@ class AbstractBumper extends DtsObject {
override function update(timeState:src.TimeState) {
// Override the keyframe
var currentCompletion = getCurrentCompletion(timeState);
this.sequenceKeyframeOverride.set(this.dts.sequences[0], currentCompletion * (this.dts.sequences[0].numKeyFrames - 1));
this.sequenceKeyframeOverride[0] = (currentCompletion * (this.dts.sequences[0].numKeyFrames - 1));
super.update(timeState);
}

View file

@ -28,7 +28,7 @@ class PushButton extends DtsObject {
var currentCompletion = this.getCurrentCompletion(timeState);
// Override the keyframe
this.sequenceKeyframeOverride.set(this.dts.sequences[0], currentCompletion * (this.dts.sequences[0].numKeyFrames - 1));
this.sequenceKeyframeOverride[0] = (currentCompletion * (this.dts.sequences[0].numKeyFrames - 1));
super.update(timeState);
}

View file

@ -42,7 +42,7 @@ class Trapdoor extends DtsObject {
var currentCompletion = this.getCurrentCompletion(timeState);
// Override the keyframe
this.sequenceKeyframeOverride.set(this.dts.sequences[0], currentCompletion * (this.dts.sequences[0].numKeyFrames - 1));
this.sequenceKeyframeOverride[0] = (currentCompletion * (this.dts.sequences[0].numKeyFrames - 1));
super.update(timeState);
var diff = (currentCompletion - this.lastCompletion);