wonder.js
Version:
117 lines (110 loc) • 8.9 kB
JavaScript
'use strict';
var Js_option = require("bs-platform/lib/js/js_option.js");
var Caml_array = require("bs-platform/lib/js/caml_array.js");
var Log$WonderLog = require("wonder-log/lib/js/src/Log.js");
var Contract$WonderLog = require("wonder-log/lib/js/src/Contract.js");
var StateDataMain$Wonderjs = require("../../data/StateDataMain.js");
var IsDebugMainService$Wonderjs = require("../../state/IsDebugMainService.js");
var ArrayService$WonderCommonlib = require("wonder-commonlib/lib/js/src/ArrayService.js");
var BufferMaterialService$Wonderjs = require("../../../../record/main/material/BufferMaterialService.js");
var DisposeMaterialService$Wonderjs = require("../../../../record/main/material/DisposeMaterialService.js");
var DisposeComponentService$Wonderjs = require("../../../../primitive/component/DisposeComponentService.js");
var DisposeTypeArrayService$Wonderjs = require("../../../../primitive/buffer/DisposeTypeArrayService.js");
var GroupBasicMaterialService$Wonderjs = require("../../../../record/main/material/basic/GroupBasicMaterialService.js");
var DisposeMaterialMainService$Wonderjs = require("../DisposeMaterialMainService.js");
var DefaultTypeArrayValueService$Wonderjs = require("../../../../primitive/buffer/DefaultTypeArrayValueService.js");
var BufferAllBasicMaterialService$Wonderjs = require("../../../../record/all/material/basic/BufferAllBasicMaterialService.js");
var GameObjectBasicMaterialService$Wonderjs = require("../../../../record/main/material/basic/GameObjectBasicMaterialService.js");
var MutableSparseMapService$WonderCommonlib = require("wonder-commonlib/lib/js/src/MutableSparseMapService.js");
var RecordBasicMaterialMainService$Wonderjs = require("./RecordBasicMaterialMainService.js");
function isAlive(material, param) {
return DisposeMaterialMainService$Wonderjs.isAlive(material, param[/* disposedIndexArray */8]);
}
function _disposeData(material, state) {
var basicMaterialRecord = RecordBasicMaterialMainService$Wonderjs.getRecord(state);
var shaderIndices = DisposeMaterialService$Wonderjs.disposeData(material, basicMaterialRecord[/* shaderIndices */2], DefaultTypeArrayValueService$Wonderjs.getDefaultShaderIndex(/* () */0));
var newrecord = Caml_array.caml_array_dup(state);
newrecord[/* basicMaterialRecord */15] = /* record */[
/* index */basicMaterialRecord[/* index */0],
/* buffer */basicMaterialRecord[/* buffer */1],
/* shaderIndices */shaderIndices,
/* colors */DisposeTypeArrayService$Wonderjs.deleteAndResetFloat32TypeArr(BufferAllBasicMaterialService$Wonderjs.getColorIndex(material), BufferAllBasicMaterialService$Wonderjs.getColorsSize(/* () */0), basicMaterialRecord[/* defaultColor */6], basicMaterialRecord[/* colors */3]),
/* isDepthTests */DisposeTypeArrayService$Wonderjs.deleteAndResetUint8(BufferAllBasicMaterialService$Wonderjs.getIsDepthTestIndex(material), BufferMaterialService$Wonderjs.getDefaultIsDepthTest(/* () */0), basicMaterialRecord[/* isDepthTests */4]),
/* alphas */DisposeTypeArrayService$Wonderjs.deleteAndResetFloat32(BufferAllBasicMaterialService$Wonderjs.getAlphaIndex(material), BufferAllBasicMaterialService$Wonderjs.getDefaultAlpha(/* () */0), basicMaterialRecord[/* alphas */5]),
/* defaultColor */basicMaterialRecord[/* defaultColor */6],
/* gameObjectsMap */basicMaterialRecord[/* gameObjectsMap */7],
/* disposedIndexArray */basicMaterialRecord[/* disposedIndexArray */8],
/* nameMap */DisposeComponentService$Wonderjs.disposeSparseMapData(material, basicMaterialRecord[/* nameMap */9]),
/* materialArrayForWorkerInit */basicMaterialRecord[/* materialArrayForWorkerInit */10]
];
return newrecord;
}
function handleBatchDisposeComponentData(materialDataMap, state) {
Contract$WonderLog.requireCheck((function (param) {
return DisposeComponentService$Wonderjs.checkComponentShouldAliveWithBatchDispose(MutableSparseMapService$WonderCommonlib.getValidKeys(materialDataMap), isAlive, RecordBasicMaterialMainService$Wonderjs.getRecord(state));
}), IsDebugMainService$Wonderjs.getIsDebug(StateDataMain$Wonderjs.stateData));
return MutableSparseMapService$WonderCommonlib.reduceiValid((function (state, gameObjectArr, material) {
var basicMaterialRecord = RecordBasicMaterialMainService$Wonderjs.getRecord(state);
var basicMaterialRecord$1 = GroupBasicMaterialService$Wonderjs.batchRemoveGameObjects(gameObjectArr, material, basicMaterialRecord);
var match = GroupBasicMaterialService$Wonderjs.isGroupBasicMaterial(material, basicMaterialRecord$1);
if (match) {
var newrecord = Caml_array.caml_array_dup(state);
newrecord[/* basicMaterialRecord */15] = basicMaterialRecord$1;
return newrecord;
} else {
var state$1 = _disposeData(material, state);
var basicMaterialRecord$2 = RecordBasicMaterialMainService$Wonderjs.getRecord(state$1);
var newrecord$1 = Caml_array.caml_array_dup(state$1);
newrecord$1[/* basicMaterialRecord */15] = /* record */[
/* index */basicMaterialRecord$2[/* index */0],
/* buffer */basicMaterialRecord$2[/* buffer */1],
/* shaderIndices */basicMaterialRecord$2[/* shaderIndices */2],
/* colors */basicMaterialRecord$2[/* colors */3],
/* isDepthTests */basicMaterialRecord$2[/* isDepthTests */4],
/* alphas */basicMaterialRecord$2[/* alphas */5],
/* defaultColor */basicMaterialRecord$2[/* defaultColor */6],
/* gameObjectsMap */basicMaterialRecord$2[/* gameObjectsMap */7],
/* disposedIndexArray */DisposeMaterialService$Wonderjs.addDisposeIndex(material, basicMaterialRecord$2[/* disposedIndexArray */8]),
/* nameMap */basicMaterialRecord$2[/* nameMap */9],
/* materialArrayForWorkerInit */basicMaterialRecord$2[/* materialArrayForWorkerInit */10]
];
return newrecord$1;
}
}), state, materialDataMap);
}
function handleBatchDisposeComponent(materialHasNoGameObjectArray, state) {
Contract$WonderLog.requireCheck((function (param) {
DisposeComponentService$Wonderjs.checkComponentShouldAliveWithBatchDispose(materialHasNoGameObjectArray, isAlive, RecordBasicMaterialMainService$Wonderjs.getRecord(state));
return Contract$WonderLog.test(Log$WonderLog.buildAssertMessage("material has no gameObject", "has"), (function (param) {
var materialRecord = RecordBasicMaterialMainService$Wonderjs.getRecord(state);
return Contract$WonderLog.Operators[/* = */0](materialHasNoGameObjectArray.filter((function (material) {
return Js_option.isSome(GameObjectBasicMaterialService$Wonderjs.getGameObjects(material, materialRecord));
})).length, 0);
}));
}), IsDebugMainService$Wonderjs.getIsDebug(StateDataMain$Wonderjs.stateData));
RecordBasicMaterialMainService$Wonderjs.getRecord(state);
return ArrayService$WonderCommonlib.reduceOneParam((function (state, material) {
var state$1 = _disposeData(material, state);
var basicMaterialRecord = RecordBasicMaterialMainService$Wonderjs.getRecord(state$1);
var newrecord = Caml_array.caml_array_dup(state$1);
newrecord[/* basicMaterialRecord */15] = /* record */[
/* index */basicMaterialRecord[/* index */0],
/* buffer */basicMaterialRecord[/* buffer */1],
/* shaderIndices */basicMaterialRecord[/* shaderIndices */2],
/* colors */basicMaterialRecord[/* colors */3],
/* isDepthTests */basicMaterialRecord[/* isDepthTests */4],
/* alphas */basicMaterialRecord[/* alphas */5],
/* defaultColor */basicMaterialRecord[/* defaultColor */6],
/* gameObjectsMap */basicMaterialRecord[/* gameObjectsMap */7],
/* disposedIndexArray */DisposeMaterialService$Wonderjs.addDisposeIndex(material, basicMaterialRecord[/* disposedIndexArray */8]),
/* nameMap */basicMaterialRecord[/* nameMap */9],
/* materialArrayForWorkerInit */basicMaterialRecord[/* materialArrayForWorkerInit */10]
];
return newrecord;
}), state, materialHasNoGameObjectArray);
}
exports.isAlive = isAlive;
exports._disposeData = _disposeData;
exports.handleBatchDisposeComponentData = handleBatchDisposeComponentData;
exports.handleBatchDisposeComponent = handleBatchDisposeComponent;
/* Log-WonderLog Not a pure module */