Skip to content

Commit

Permalink
feat(asset): convert,assemble,generate add "gameObject->isActive, scr…
Browse files Browse the repository at this point in the history
…ipt->isActive, meshRenderer->isRender"
  • Loading branch information
yyc-git committed Apr 13, 2019
1 parent d772512 commit 83603b8
Show file tree
Hide file tree
Showing 25 changed files with 797 additions and 147 deletions.
1 change: 1 addition & 0 deletions src/asset/assemble/BatchOperateStreamSystem.re
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ let batchOperate =
(gameObjects, basicSourceTextures),
(geometrys, geometryArr),
)
|> BatchOperateSystem.batchSetIsActive(gameObjectArr, gameObjects)
|> BatchOperateSystem.batchSetIsRoot(gameObjectArr, gameObjects);

let (
Expand Down
51 changes: 36 additions & 15 deletions src/asset/assemble/BatchOperateSystem.re
Original file line number Diff line number Diff line change
Expand Up @@ -416,15 +416,19 @@ let batchSetMeshRendererData = ({meshRenderers}, meshRendererArr, state) =>
meshRendererData |> OptionService.isJsonSerializedValueNone ?
state :
{
let {drawMode} =
let {drawMode, isRender} =
meshRendererData |> OptionService.unsafeGetJsonSerializedValue;
let meshRenderer = meshRendererArr[index];

OperateMeshRendererMainService.setDrawMode(
meshRenderer,
drawMode |> DrawModeType.drawModeToUint8,
state,
);
state
|> OperateMeshRendererMainService.setDrawMode(
meshRenderer,
drawMode |> DrawModeType.drawModeToUint8,
)
|> OperateMeshRendererMainService.setIsRender(
meshRenderer,
isRender,
);
},
state,
);
Expand Down Expand Up @@ -460,10 +464,15 @@ let batchSetLightMaterialData = ({lightMaterials}, lightMaterialArr, state) =>
let batchSetScriptData = ({scripts}, scriptArr, state) =>
scripts
|> WonderCommonlib.ArrayService.reduceOneParami(
(. state, {eventFunctionDataMap, attributeMap}: script, index) => {
(.
state,
{isActive, eventFunctionDataMap, attributeMap}: script,
index,
) => {
let script = scriptArr[index];

state
|> IsActiveScriptMainService.setIsActive(script, isActive)
|> OperateScriptDataMainService.addEventFunctionDataMap(
script,
ConvertScriptDataUtils.convertEventFunctionDataMapJsonToRecord(
Expand Down Expand Up @@ -533,6 +542,26 @@ let batchSetNames =
|> _batchSetTextureName(basicSourceTextureArr, basicSourceTextures)
|> _batchSetGeometryName(geometrys, geometryArr);

let batchSetIsActive = (gameObjectArr, gameObjects: WDType.gameObjects, state) =>
gameObjectArr
|> WonderCommonlib.ArrayService.reduceOneParami(
(. state, gameObject, index) =>
AssembleIsActiveUtils.doesGameObjectHasIsActiveData(
index,
gameObjects,
) ?
SetIsActiveGameObjectMainService.setIsActive(
gameObject,
AssembleIsActiveUtils.unsafeGetGameObjectIsActiveData(
index,
gameObjects,
),
state,
) :
state,
state,
);

let batchSetIsRoot = (gameObjectArr, gameObjects: WDType.gameObjects, state) =>
gameObjectArr
|> WonderCommonlib.ArrayService.reduceOneParami(
Expand All @@ -547,13 +576,5 @@ let batchSetIsRoot = (gameObjectArr, gameObjects: WDType.gameObjects, state) =>
state,
) :
state,
/* switch (
gameObjects.isRoots
|> WonderCommonlib.MutableSparseMapService.get(index)
) {
| Some(isRoot) =>
IsRootGameObjectMainService.setIsRoot(. gameObject, isRoot, state)
| None => state
}, */
state,
);
1 change: 1 addition & 0 deletions src/asset/assemble/BatchOperateWholeSystem.re
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,7 @@ let batchOperate =
(gameObjects, basicSourceTextures),
(geometrys, geometryArr),
)
|> BatchOperateSystem.batchSetIsActive(gameObjectArr, gameObjects)
|> BatchOperateSystem.batchSetIsRoot(gameObjectArr, gameObjects);

let (
Expand Down
10 changes: 10 additions & 0 deletions src/asset/assemble/utils/AssembleIsActiveUtils.re
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
let doesGameObjectHasIsActiveData =
(gameObjectIndex, gameObjects: WDType.gameObjects) =>
gameObjects.isActives
|> WonderCommonlib.MutableSparseMapService.get(gameObjectIndex)
|> Js.Option.isSome;

let unsafeGetGameObjectIsActiveData =
(gameObjectIndex, gameObjects: WDType.gameObjects) =>
gameObjects.isActives
|> WonderCommonlib.MutableSparseMapService.unsafeGet(gameObjectIndex);
1 change: 1 addition & 0 deletions src/asset/converter/ConvertDefaultMaterialSystem.re
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ let _setDefaultMaterial =
lightMaterial: Some(defaultMaterialIndex),
cameraController: None,
script: None,
isActive: None,
isRoot: None,
})
| Some(extras) =>
Expand Down
11 changes: 10 additions & 1 deletion src/asset/converter/ConvertGLTFJsonToRecordSystem.re
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,10 @@ let _convertExtras = json =>
"meshRenderers",
array(json =>
(
{drawMode: json |> field("drawMode", int)}: meshRenderer
{
drawMode: json |> field("drawMode", int),
isRender: json |> field("isRender", bool),
}: meshRenderer
)
),
),
Expand Down Expand Up @@ -296,6 +299,7 @@ let _convertExtras = json =>
(
/* WonderLog.Log.print(json) |> ignore; */
{
isActive: json |> field("isActive", bool),
eventFunctionDataMap:
_getScriptMap("eventFunctionDataMap", json),
/* json
Expand Down Expand Up @@ -568,6 +572,11 @@ let _convertNodes = json =>
script:
json
|> optimizedOptional(optimizedField("script", int)),
isActive:
json
|> optimizedOptional(
optimizedField("isActive", bool),
),
isRoot:
json
|> optimizedOptional(optimizedField("isRoot", bool)),
Expand Down
20 changes: 19 additions & 1 deletion src/asset/converter/ConvertGameObjectsSystem.re
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,23 @@ let _getNames = ({nodes, meshes}: GLTFType.gltf) =>
[||],
);

let _getIsActives = ({nodes, meshes}: GLTFType.gltf) =>
nodes
|> WonderCommonlib.ArrayService.reduceOneParami(
(. isActiveMap, {extras}: GLTFType.node, index) =>
switch (extras) {
| None => isActiveMap
| Some(({isActive}: GLTFType.nodeExtras)) =>
switch (isActive) {
| None => isActiveMap
| Some(isActive) =>
isActiveMap
|> WonderCommonlib.MutableSparseMapService.set(index, isActive)
}
},
WonderCommonlib.MutableSparseMapService.createEmpty(),
);

let _getIsRoots = ({nodes, meshes}: GLTFType.gltf) =>
nodes
|> WonderCommonlib.ArrayService.reduceOneParami(
Expand All @@ -39,8 +56,9 @@ let _getIsRoots = ({nodes, meshes}: GLTFType.gltf) =>
WonderCommonlib.MutableSparseMapService.createEmpty(),
);

let convert = (({nodes}: GLTFType.gltf) as gltf) : WDType.gameObjects => {
let convert = (({nodes}: GLTFType.gltf) as gltf): WDType.gameObjects => {
count: ConvertCommon.getCount(nodes),
names: _getNames(gltf),
isActives: _getIsActives(gltf),
isRoots: _getIsRoots(gltf),
};
8 changes: 6 additions & 2 deletions src/asset/converter/ConvertMeshRenderersSystem.re
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ let _convertByMesh = (meshes, geometryGameObjectIndices, geometryIndices) =>
| Some(6) => DrawModeType.Triangle_fan
| None => DrawModeType.Triangles
},
isRender: true,
}: WDType.meshRenderer,
) :
None;
Expand All @@ -43,11 +44,14 @@ let convertToMeshRenderers =
| Some(meshRenderers) when Js.Array.length(meshRenderers) > 0 =>
meshRenderers
|> WonderCommonlib.ArrayService.reduceOneParami(
(. arr, {drawMode}: GLTFType.meshRenderer, index) =>
(. arr, {drawMode, isRender}: GLTFType.meshRenderer, index) =>
arr
|> ArrayService.push(
Some(
{drawMode: drawMode |> DrawModeType.uint8ToDrawMode}: WDType.meshRenderer,
{
drawMode: drawMode |> DrawModeType.uint8ToDrawMode,
isRender,
}: WDType.meshRenderer,
),
),
[||],
Expand Down
3 changes: 2 additions & 1 deletion src/asset/data/CommonAssetType.re
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
type script = {
isActive: bool,
eventFunctionDataMap: Js.Dict.t(string),
attributeMap: Js.Dict.t(string),
};
};
6 changes: 5 additions & 1 deletion src/asset/data/GLTFType.re
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,7 @@ type nodeExtras = {
cameraController: option(cameraControllerIndex),
script: option(scriptIndex),
isRoot: option(bool),
isActive: option(bool),
};

type nodeKHRLightsExtension = {light: int};
Expand Down Expand Up @@ -249,7 +250,10 @@ type khrLightsExtension = {lights: array(light)};

type extensions = {khr_lights: option(khrLightsExtension)};

type meshRenderer = {drawMode: Js.Typed_array.Uint8Array.elt};
type meshRenderer = {
drawMode: Js.Typed_array.Uint8Array.elt,
isRender: bool,
};

type basicCameraView = {isActive: bool};

Expand Down
7 changes: 6 additions & 1 deletion src/asset/data/GenerateSceneGraphType.re
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ type nodeExtras = {
lightMaterial: option(int),
cameraController: option(int),
script: option(int),
isActive: option(bool),
isRoot: option(bool),
};

Expand Down Expand Up @@ -75,7 +76,10 @@ type imageData = {
byteOffset: int,
};

type meshRendererData = {drawMode: Js.Typed_array.Uint8Array.elt};
type meshRendererData = {
drawMode: Js.Typed_array.Uint8Array.elt,
isRender: bool,
};

type basicMaterialData = {
colorFactor: option(array(float)),
Expand Down Expand Up @@ -115,6 +119,7 @@ type lightData = {
};

type scriptData = {
isActive: bool,
eventFunctionDataMapStr: string,
attributeMapStr: string,
};
Expand Down
6 changes: 5 additions & 1 deletion src/asset/data/WDType.re
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ type gameObjects = {
count: int,
names: array(string),
isRoots: WonderCommonlib.MutableSparseMapService.t(bool),
isActives: WonderCommonlib.MutableSparseMapService.t(bool),
};

type transform = {
Expand All @@ -49,7 +50,10 @@ type transform = {
scale: option((float, float, float)),
};

type meshRenderer = {drawMode: DrawModeType.drawMode};
type meshRenderer = {
drawMode: DrawModeType.drawMode,
isRender: bool,
};

type geometry = {
name: string,
Expand Down
5 changes: 5 additions & 0 deletions src/asset/generate/BuildMeshRendererDataSystem.re
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@ let build = (meshRendererDataMap, state) => {
meshRenderer,
state,
),
isRender:
OperateMeshRendererMainService.getIsRender(
meshRenderer,
state,
),
}: GenerateSceneGraphType.meshRendererData,
),
[||],
Expand Down
2 changes: 2 additions & 0 deletions src/asset/generate/BuildScriptDataSystem.re
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ let build = (scriptDataMap, {scriptRecord} as state) => {
scriptDataArr
|> ArrayService.push(
{
isActive:
IsActiveScriptMainService.unsafeGetIsActive(script, state),
eventFunctionDataMapStr:
ConvertScriptDataUtils.unsafeGetEventFunctionDataMapStr(
script,
Expand Down
17 changes: 14 additions & 3 deletions src/asset/generate/EncodeGLBJsonSystem.re
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ let _encodeNodeExtras = (extras, list) =>
lightMaterial,
cameraController,
script,
isActive,
isRoot,
}: nodeExtras
),
Expand All @@ -107,6 +108,12 @@ let _encodeNodeExtras = (extras, list) =>
let extraList =
_encodeNodeMaterial(basicMaterial, lightMaterial, extraList);

let extraList =
switch (isActive) {
| None => extraList
| Some(isActive) => [("isActive", isActive |> bool), ...extraList]
};

let extraList =
switch (isRoot) {
| None => extraList
Expand Down Expand Up @@ -214,8 +221,9 @@ let _encodeMeshRendererExtra = (meshRendererDataArr, extraList) =>
(
"meshRenderers",
meshRendererDataArr
|> Js.Array.map((({drawMode}: meshRendererData) as data) =>
[("drawMode", drawMode |> int)] |> object_
|> Js.Array.map((({isRender, drawMode}: meshRendererData) as data) =>
[("isRender", isRender |> bool), ("drawMode", drawMode |> int)]
|> object_
)
|> jsonArray,
),
Expand Down Expand Up @@ -312,9 +320,12 @@ let _encodeScriptExtra = (scriptDataArr, extraList) =>
scriptDataArr
|> Js.Array.map(
(
({eventFunctionDataMapStr, attributeMapStr}: scriptData) as data,
(
{isActive, eventFunctionDataMapStr, attributeMapStr}: scriptData
) as data,
) =>
[
("isActive", isActive |> bool),
(
"eventFunctionDataMap",
eventFunctionDataMapStr |> Js.Json.parseExn,
Expand Down
Loading

0 comments on commit 83603b8

Please sign in to comment.