UNPKG

wonder.js

Version:
135 lines (128 loc) 10.8 kB
'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 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 GroupLightMaterialService$Wonderjs = require("../../../../record/main/material/light/GroupLightMaterialService.js"); var DisposeMaterialMainService$Wonderjs = require("../DisposeMaterialMainService.js"); var DefaultTypeArrayValueService$Wonderjs = require("../../../../primitive/buffer/DefaultTypeArrayValueService.js"); var BufferAllLightMaterialService$Wonderjs = require("../../../../record/all/material/light/BufferAllLightMaterialService.js"); var GameObjectLightMaterialService$Wonderjs = require("../../../../record/main/material/light/GameObjectLightMaterialService.js"); var MutableSparseMapService$WonderCommonlib = require("wonder-commonlib/lib/js/src/MutableSparseMapService.js"); var RecordLightMaterialMainService$Wonderjs = require("./RecordLightMaterialMainService.js"); var OperateLightMaterialMainService$Wonderjs = require("./OperateLightMaterialMainService.js"); function isAlive(material, param) { return DisposeMaterialMainService$Wonderjs.isAlive(material, param[/* disposedIndexArray */12]); } function _disposeData(isRemoveTexture, material, state) { var state$1 = DisposeMaterialMainService$Wonderjs.disposeSourceMaps(isRemoveTexture, /* tuple */[ material, /* LightMaterial */1 ], /* array */[ OperateLightMaterialMainService$Wonderjs.getDiffuseMap(material, state), OperateLightMaterialMainService$Wonderjs.getSpecularMap(material, state) ], state); var lightMaterialRecord = RecordLightMaterialMainService$Wonderjs.getRecord(state$1); var shaderIndices = DisposeMaterialService$Wonderjs.disposeData(material, lightMaterialRecord[/* shaderIndices */2], DefaultTypeArrayValueService$Wonderjs.getDefaultShaderIndex(/* () */0)); var newrecord = Caml_array.caml_array_dup(state$1); newrecord[/* lightMaterialRecord */16] = /* record */[ /* index */lightMaterialRecord[/* index */0], /* buffer */lightMaterialRecord[/* buffer */1], /* shaderIndices */shaderIndices, /* diffuseColors */DisposeTypeArrayService$Wonderjs.deleteAndResetFloat32TypeArr(BufferAllLightMaterialService$Wonderjs.getDiffuseColorIndex(material), BufferAllLightMaterialService$Wonderjs.getDiffuseColorsSize(/* () */0), lightMaterialRecord[/* defaultDiffuseColor */8], lightMaterialRecord[/* diffuseColors */3]), /* specularColors */DisposeTypeArrayService$Wonderjs.deleteAndResetFloat32TypeArr(BufferAllLightMaterialService$Wonderjs.getSpecularColorIndex(material), BufferAllLightMaterialService$Wonderjs.getSpecularColorsSize(/* () */0), lightMaterialRecord[/* defaultSpecularColor */9], lightMaterialRecord[/* specularColors */4]), /* shininess */DisposeTypeArrayService$Wonderjs.deleteAndResetFloat32(BufferAllLightMaterialService$Wonderjs.getShininessIndex(material), lightMaterialRecord[/* defaultShininess */10], lightMaterialRecord[/* shininess */5]), /* diffuseTextureIndices */DisposeMaterialMainService$Wonderjs.disposeTextureIndices(material, BufferAllLightMaterialService$Wonderjs.getDiffuseTextureIndicesIndex, lightMaterialRecord[/* diffuseTextureIndices */6]), /* specularTextureIndices */DisposeMaterialMainService$Wonderjs.disposeTextureIndices(material, BufferAllLightMaterialService$Wonderjs.getSpecularTextureIndicesIndex, lightMaterialRecord[/* specularTextureIndices */7]), /* defaultDiffuseColor */lightMaterialRecord[/* defaultDiffuseColor */8], /* defaultSpecularColor */lightMaterialRecord[/* defaultSpecularColor */9], /* defaultShininess */lightMaterialRecord[/* defaultShininess */10], /* gameObjectsMap */lightMaterialRecord[/* gameObjectsMap */11], /* disposedIndexArray */lightMaterialRecord[/* disposedIndexArray */12], /* nameMap */DisposeComponentService$Wonderjs.disposeSparseMapData(material, lightMaterialRecord[/* nameMap */13]), /* materialArrayForWorkerInit */lightMaterialRecord[/* materialArrayForWorkerInit */14] ]; return newrecord; } function handleBatchDisposeComponentData(isRemoveTexture, materialDataMap, state) { Contract$WonderLog.requireCheck((function (param) { return DisposeComponentService$Wonderjs.checkComponentShouldAliveWithBatchDispose(MutableSparseMapService$WonderCommonlib.getValidKeys(materialDataMap), isAlive, RecordLightMaterialMainService$Wonderjs.getRecord(state)); }), IsDebugMainService$Wonderjs.getIsDebug(StateDataMain$Wonderjs.stateData)); return MutableSparseMapService$WonderCommonlib.reduceiValid((function (state, gameObjectArr, material) { var lightMaterialRecord = RecordLightMaterialMainService$Wonderjs.getRecord(state); var lightMaterialRecord$1 = GroupLightMaterialService$Wonderjs.batchRemoveGameObjects(gameObjectArr, material, lightMaterialRecord); var match = GroupLightMaterialService$Wonderjs.isGroupLightMaterial(material, lightMaterialRecord$1); if (match) { var newrecord = Caml_array.caml_array_dup(state); newrecord[/* lightMaterialRecord */16] = lightMaterialRecord$1; return newrecord; } else { var state$1 = _disposeData(isRemoveTexture, material, state); var lightMaterialRecord$2 = RecordLightMaterialMainService$Wonderjs.getRecord(state$1); var newrecord$1 = Caml_array.caml_array_dup(state$1); newrecord$1[/* lightMaterialRecord */16] = /* record */[ /* index */lightMaterialRecord$2[/* index */0], /* buffer */lightMaterialRecord$2[/* buffer */1], /* shaderIndices */lightMaterialRecord$2[/* shaderIndices */2], /* diffuseColors */lightMaterialRecord$2[/* diffuseColors */3], /* specularColors */lightMaterialRecord$2[/* specularColors */4], /* shininess */lightMaterialRecord$2[/* shininess */5], /* diffuseTextureIndices */lightMaterialRecord$2[/* diffuseTextureIndices */6], /* specularTextureIndices */lightMaterialRecord$2[/* specularTextureIndices */7], /* defaultDiffuseColor */lightMaterialRecord$2[/* defaultDiffuseColor */8], /* defaultSpecularColor */lightMaterialRecord$2[/* defaultSpecularColor */9], /* defaultShininess */lightMaterialRecord$2[/* defaultShininess */10], /* gameObjectsMap */lightMaterialRecord$2[/* gameObjectsMap */11], /* disposedIndexArray */DisposeMaterialService$Wonderjs.addDisposeIndex(material, lightMaterialRecord$2[/* disposedIndexArray */12]), /* nameMap */lightMaterialRecord$2[/* nameMap */13], /* materialArrayForWorkerInit */lightMaterialRecord$2[/* materialArrayForWorkerInit */14] ]; return newrecord$1; } }), state, materialDataMap); } function handleBatchDisposeComponent(isRemoveTexture, materialHasNoGameObjectArray, state) { Contract$WonderLog.requireCheck((function (param) { DisposeComponentService$Wonderjs.checkComponentShouldAliveWithBatchDispose(materialHasNoGameObjectArray, isAlive, RecordLightMaterialMainService$Wonderjs.getRecord(state)); return Contract$WonderLog.test(Log$WonderLog.buildAssertMessage("material has no gameObject", "has"), (function (param) { var materialRecord = RecordLightMaterialMainService$Wonderjs.getRecord(state); return Contract$WonderLog.Operators[/* = */0](materialHasNoGameObjectArray.filter((function (material) { return Js_option.isSome(GameObjectLightMaterialService$Wonderjs.getGameObjects(material, materialRecord)); })).length, 0); })); }), IsDebugMainService$Wonderjs.getIsDebug(StateDataMain$Wonderjs.stateData)); return ArrayService$WonderCommonlib.reduceOneParam((function (state, material) { var state$1 = _disposeData(isRemoveTexture, material, state); var lightMaterialRecord = RecordLightMaterialMainService$Wonderjs.getRecord(state$1); var newrecord = Caml_array.caml_array_dup(state$1); newrecord[/* lightMaterialRecord */16] = /* record */[ /* index */lightMaterialRecord[/* index */0], /* buffer */lightMaterialRecord[/* buffer */1], /* shaderIndices */lightMaterialRecord[/* shaderIndices */2], /* diffuseColors */lightMaterialRecord[/* diffuseColors */3], /* specularColors */lightMaterialRecord[/* specularColors */4], /* shininess */lightMaterialRecord[/* shininess */5], /* diffuseTextureIndices */lightMaterialRecord[/* diffuseTextureIndices */6], /* specularTextureIndices */lightMaterialRecord[/* specularTextureIndices */7], /* defaultDiffuseColor */lightMaterialRecord[/* defaultDiffuseColor */8], /* defaultSpecularColor */lightMaterialRecord[/* defaultSpecularColor */9], /* defaultShininess */lightMaterialRecord[/* defaultShininess */10], /* gameObjectsMap */lightMaterialRecord[/* gameObjectsMap */11], /* disposedIndexArray */DisposeMaterialService$Wonderjs.addDisposeIndex(material, lightMaterialRecord[/* disposedIndexArray */12]), /* nameMap */lightMaterialRecord[/* nameMap */13], /* materialArrayForWorkerInit */lightMaterialRecord[/* materialArrayForWorkerInit */14] ]; return newrecord; }), state, materialHasNoGameObjectArray); } exports.isAlive = isAlive; exports._disposeData = _disposeData; exports.handleBatchDisposeComponentData = handleBatchDisposeComponentData; exports.handleBatchDisposeComponent = handleBatchDisposeComponent; /* Log-WonderLog Not a pure module */