Skip to content

Commit f3fe6ca

Browse files
committed
feat(ECS模式): finish update
1 parent 64dec3c commit f3fe6ca

File tree

29 files changed

+546
-542
lines changed

29 files changed

+546
-542
lines changed

ECS模式代码/ecs_pattern_role_abstract/src/Client.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ let _createScene = (worldState: worldState): worldState => {
2323
//触发gameObject1的行为
2424
worldState = World.action1(worldState, gameObject1, dataOrientedComponent1, otherComponent1)
2525

26-
创建更多的GameObjects...
26+
创建更多的gameObjects...
2727

2828
return worldState
2929
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import { getValue1Length, getValue2Length, getValue1Offset, getValue2Offset } from "./BufferUtils"
1+
import * as BufferUtils from "./BufferUtils"
22

33
export let createTypeArrays = (buffer, count) => {
44
return [
5-
new Float32Array(buffer, getValue1Offset(), getValue1Length(count)),
6-
new Float32Array(buffer, getValue2Offset(count), getValue2Length(count)),
5+
new Float32Array(buffer, BufferUtils.getValue1Offset(), BufferUtils.getValue1Length(count)),
6+
new Float32Array(buffer, BufferUtils.getValue2Offset(count), BufferUtils.getValue2Length(count)),
77
]
88
}

ECS模式代码/ecs_pattern_role_abstract/src/manager/dataoriented_component1/Manager.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { createBuffer } from "./BufferUtils"
2-
import { createTypeArrays } from "./CreateTypeArrayUtils"
1+
import * as BufferUtils from "./BufferUtils"
2+
import * as CreateTypeArrayUtils from "./CreateTypeArrayUtils"
33
import { range } from "commonlib-ts/src/ArrayUtils"
44
import { state, TypeArrayType } from "./ManagerStateType"
55
import { Map } from "immutable"
@@ -18,9 +18,9 @@ let _setAllTypeArrDataToDefault = ([value1s, value2s]: Array<Float32Array>, coun
1818
}
1919

2020
let _initBufferData = (count, defaultDataTuple): [ArrayBuffer, Array<TypeArrayType>] => {
21-
let buffer = createBuffer(count)
21+
let buffer = BufferUtils.createBuffer(count)
2222

23-
let typeArrData = _setAllTypeArrDataToDefault(createTypeArrays(buffer, count), count, defaultDataTuple)
23+
let typeArrData = _setAllTypeArrDataToDefault(CreateTypeArrayUtils.createTypeArrays(buffer, count), count, defaultDataTuple)
2424

2525
return [buffer, typeArrData]
2626
}

ECS模式代码/ecs_pattern_role_abstract/src/world/World.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ let requestAnimationFrame = (func) => {
1919

2020

2121
export let loop = (worldState: worldState) => {
22-
调用OtherSystem来update
22+
调用OtherSystem来更新
2323

24-
调用OtherSystem来render
24+
调用OtherSystem来渲染
2525

2626
requestAnimationFrame(
2727
(time) => {
Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,84 +1,84 @@
1-
import { init, loop } from "ecs_pattern_utils/src/World";
2-
import { api, addGameObject, createState, update, renderOneByOne, renderInstances } from "./world/World";
1+
import * as WorldUtils from "ecs_pattern_utils/src/World";
2+
import * as World from "./world/World";
33
import { state as worldState } from "./world/WorldStateType";
44

55
let _createScene = (worldState: worldState): worldState => {
6-
let normalHero1Data = api.gameObject.create()
6+
let normalHero1Data = World.api.gameObject.create()
77
let normalHero1State = normalHero1Data[0]
88
let normalHero1 = normalHero1Data[1]
99

10-
let positionComponent1 = api.positionComponent.create()
11-
let velocityComponent1 = api.velocityComponent.create()
12-
let instanceComponent1 = api.instanceComponent.create()
10+
let positionComponent1 = World.api.positionComponent.create()
11+
let velocityComponent1 = World.api.velocityComponent.create()
12+
let instanceComponent1 = World.api.instanceComponent.create()
1313

14-
normalHero1State = api.gameObject.setPositionComponent(normalHero1State, normalHero1, positionComponent1)
15-
normalHero1State = api.gameObject.setVelocityComponent(normalHero1State, normalHero1, velocityComponent1)
16-
normalHero1State = api.gameObject.setInstanceComponent(normalHero1State, normalHero1, instanceComponent1)
14+
normalHero1State = World.api.gameObject.setPositionComponent(normalHero1State, normalHero1, positionComponent1)
15+
normalHero1State = World.api.gameObject.setVelocityComponent(normalHero1State, normalHero1, velocityComponent1)
16+
normalHero1State = World.api.gameObject.setInstanceComponent(normalHero1State, normalHero1, instanceComponent1)
1717

18-
worldState = addGameObject(worldState, [normalHero1State, normalHero1])
18+
worldState = World.addGameObject(worldState, [normalHero1State, normalHero1])
1919

2020

21-
let normalHero2Data = api.gameObject.create()
21+
let normalHero2Data = World.api.gameObject.create()
2222
let normalHero2State = normalHero2Data[0]
2323
let normalHero2 = normalHero2Data[1]
2424

25-
let positionComponent2 = api.positionComponent.create()
26-
let velocityComponent2 = api.velocityComponent.create()
27-
let instanceComponent2 = api.instanceComponent.create()
25+
let positionComponent2 = World.api.positionComponent.create()
26+
let velocityComponent2 = World.api.velocityComponent.create()
27+
let instanceComponent2 = World.api.instanceComponent.create()
2828

29-
normalHero2State = api.gameObject.setPositionComponent(normalHero2State, normalHero2, positionComponent2)
30-
normalHero2State = api.gameObject.setVelocityComponent(normalHero2State, normalHero2, velocityComponent2)
31-
normalHero2State = api.gameObject.setInstanceComponent(normalHero2State, normalHero2, instanceComponent2)
29+
normalHero2State = World.api.gameObject.setPositionComponent(normalHero2State, normalHero2, positionComponent2)
30+
normalHero2State = World.api.gameObject.setVelocityComponent(normalHero2State, normalHero2, velocityComponent2)
31+
normalHero2State = World.api.gameObject.setInstanceComponent(normalHero2State, normalHero2, instanceComponent2)
3232

33-
worldState = addGameObject(worldState, [normalHero2State, normalHero2])
33+
worldState = World.addGameObject(worldState, [normalHero2State, normalHero2])
3434

3535

36-
worldState = api.positionComponent.move(worldState, normalHero1)
36+
worldState = World.api.positionComponent.move(worldState, normalHero1)
3737

3838

3939

40-
let superHero1Data = api.gameObject.create()
40+
let superHero1Data = World.api.gameObject.create()
4141
let superHero1State = superHero1Data[0]
4242
let superHero1 = superHero1Data[1]
4343

44-
let positionComponent3 = api.positionComponent.create()
45-
let velocityComponent3 = api.velocityComponent.create()
46-
let flyComponent1 = api.flyComponent.create()
44+
let positionComponent3 = World.api.positionComponent.create()
45+
let velocityComponent3 = World.api.velocityComponent.create()
46+
let flyComponent1 = World.api.flyComponent.create()
4747

48-
superHero1State = api.gameObject.setPositionComponent(superHero1State, superHero1, positionComponent3)
49-
superHero1State = api.gameObject.setVelocityComponent(superHero1State, superHero1, velocityComponent3)
50-
superHero1State = api.gameObject.setFlyComponent(superHero1State, superHero1, flyComponent1)
48+
superHero1State = World.api.gameObject.setPositionComponent(superHero1State, superHero1, positionComponent3)
49+
superHero1State = World.api.gameObject.setVelocityComponent(superHero1State, superHero1, velocityComponent3)
50+
superHero1State = World.api.gameObject.setFlyComponent(superHero1State, superHero1, flyComponent1)
5151

52-
worldState = addGameObject(worldState, [superHero1State, superHero1])
52+
worldState = World.addGameObject(worldState, [superHero1State, superHero1])
5353

5454

55-
let superHero2Data = api.gameObject.create()
55+
let superHero2Data = World.api.gameObject.create()
5656
let superHero2State = superHero2Data[0]
5757
let superHero2 = superHero2Data[1]
5858

59-
let positionComponent4 = api.positionComponent.create()
60-
let velocityComponent4 = api.velocityComponent.create()
61-
let flyComponent2 = api.flyComponent.create()
59+
let positionComponent4 = World.api.positionComponent.create()
60+
let velocityComponent4 = World.api.velocityComponent.create()
61+
let flyComponent2 = World.api.flyComponent.create()
6262

63-
superHero2State = api.gameObject.setPositionComponent(superHero2State, superHero2, positionComponent4)
64-
superHero2State = api.gameObject.setVelocityComponent(superHero2State, superHero2, velocityComponent4)
65-
superHero2State = api.gameObject.setFlyComponent(superHero2State, superHero2, flyComponent2)
63+
superHero2State = World.api.gameObject.setPositionComponent(superHero2State, superHero2, positionComponent4)
64+
superHero2State = World.api.gameObject.setVelocityComponent(superHero2State, superHero2, velocityComponent4)
65+
superHero2State = World.api.gameObject.setFlyComponent(superHero2State, superHero2, flyComponent2)
6666

67-
worldState = addGameObject(worldState, [superHero2State, superHero2])
67+
worldState = World.addGameObject(worldState, [superHero2State, superHero2])
6868

6969

70-
worldState = api.positionComponent.move(worldState, superHero1)
71-
worldState = api.flyComponent.fly(worldState, superHero1)
70+
worldState = World.api.positionComponent.move(worldState, superHero1)
71+
worldState = World.api.flyComponent.fly(worldState, superHero1)
7272

7373

7474

7575
return worldState
7676
}
7777

78-
let worldState = createState()
78+
let worldState = World.createState()
7979

8080
worldState = _createScene(worldState)
8181

82-
worldState = init(worldState)
82+
worldState = WorldUtils.init(worldState)
8383

84-
loop(worldState, [update, renderOneByOne, renderInstances])
84+
WorldUtils.loop(worldState, [World.update, World.renderOneByOne, World.renderInstances])
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { gameObject } from "../gameObject/GameObjectStateType"
22

33
export type state = {
4-
gameObject: gameObject
4+
gameObject: gameObject | null
55
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { gameObject } from "../gameObject/GameObjectStateType"
22

33
export type state = {
4-
gameObject: gameObject,
4+
gameObject: gameObject | null,
55
velocity: number
66
}

ECS模式代码/story_after/src/gameObject/GameObject.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ export let create = (): [gameObjectState, gameObject] => {
2222
]
2323
}
2424

25+
/*
26+
值得注意的是:
27+
getPositionComponentExn函数的函数名以“Exn”结尾,它是“Exception”的缩写,表明如果该函数返回的值为空,则报错
28+
*/
2529
export let getPositionComponentExn = ({ positionComponent }: gameObjectState): positionComponentState => {
2630
return getExnFromStrictNull(positionComponent)
2731
}

ECS模式代码/story_after/src/world/World.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { create as createPositionComponent, move } from "../component/PositionCo
55
import { create as createVelocityComponent } from "../component/VelocityComponent";
66
import { create as createFlyComponent, fly } from "../component/FlyComponent";
77
import { create as createInstanceComponent } from "../component/InstanceComponent";
8-
import { create as createGameObject, setPositionComponent, setFlyComponent, setVelocityComponent, setInstanceComponent, getPositionComponentExn, getFlyComponentExn, hasPositionComponent, hasInstanceComponent } from "../gameObject/GameObject";
8+
import * as GameObject from "../gameObject/GameObject";
99
import { getGameObjectStateExn } from "../utils/WorldUtils";
1010

1111
export let createState = (): worldState => {
@@ -25,10 +25,10 @@ export let update = (worldState: worldState): worldState => {
2525
return {
2626
...worldState,
2727
gameObjects: worldState.gameObjects.map(gameObjectState => {
28-
if (hasPositionComponent(gameObjectState)) {
28+
if (GameObject.hasPositionComponent(gameObjectState)) {
2929
gameObjectState = {
3030
...gameObjectState,
31-
positionComponent: updatePositionComponent(getPositionComponentExn(gameObjectState))
31+
positionComponent: updatePositionComponent(GameObject.getPositionComponentExn(gameObjectState))
3232
}
3333
}
3434

@@ -39,7 +39,7 @@ export let update = (worldState: worldState): worldState => {
3939

4040
export let renderOneByOne = (worldState: worldState): void => {
4141
let superHeroGameObjects = worldState.gameObjects.filter(gameObjectState => {
42-
return !hasInstanceComponent(gameObjectState)
42+
return !GameObject.hasInstanceComponent(gameObjectState)
4343
})
4444

4545
superHeroGameObjects.forEach(gameObjectState => {
@@ -49,24 +49,24 @@ export let renderOneByOne = (worldState: worldState): void => {
4949

5050
export let renderInstances = (worldState: worldState): void => {
5151
let normalHeroGameObejcts = worldState.gameObjects.filter(gameObjectState => {
52-
return hasInstanceComponent(gameObjectState)
52+
return GameObject.hasInstanceComponent(gameObjectState)
5353
})
5454

5555
console.log("批量Instance渲染 NormalHeroes...")
5656
}
5757

5858
export let api = {
5959
gameObject: {
60-
create: createGameObject,
61-
setPositionComponent,
62-
setFlyComponent,
63-
setVelocityComponent,
64-
setInstanceComponent
60+
create: GameObject.create,
61+
setPositionComponent: GameObject.setPositionComponent,
62+
setFlyComponent: GameObject.setFlyComponent,
63+
setVelocityComponent: GameObject.setVelocityComponent,
64+
setInstanceComponent: GameObject.setInstanceComponent
6565
},
6666
positionComponent: {
6767
create: createPositionComponent,
6868
move: (worldState: worldState, gameObject): worldState => {
69-
return move(worldState, getPositionComponentExn(
69+
return move(worldState, GameObject.getPositionComponentExn(
7070
getGameObjectStateExn(worldState, gameObject)
7171
))
7272
}
@@ -77,7 +77,7 @@ export let api = {
7777
flyComponent: {
7878
create: createFlyComponent,
7979
fly: (worldState: worldState, gameObject): worldState => {
80-
return fly(worldState, getFlyComponentExn(
80+
return fly(worldState, GameObject.getFlyComponentExn(
8181
getGameObjectStateExn(worldState, gameObject)
8282
))
8383
}
Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,44 @@
1-
import { init, loop } from "ecs_pattern_utils/src/World";
2-
import { api, addNormalHero, addSuperHero, createState, update, renderOneByOne, renderInstances } from "./World";
1+
import * as WorldUtils from "ecs_pattern_utils/src/World";
2+
import * as World from "./World";
33
import { state as worldState } from "./WorldStateType";
44

55
let _createScene = (worldState: worldState): worldState => {
6-
let normalHero1Data = api.normalHero.create()
6+
let normalHero1Data = World.api.normalHero.create()
77
let normalHero1 = normalHero1Data[1]
88

9-
worldState = addNormalHero(worldState, normalHero1Data)
9+
worldState = World.addNormalHero(worldState, normalHero1Data)
1010

11-
let normalHero2Data = api.normalHero.create()
11+
let normalHero2Data = World.api.normalHero.create()
1212
let normalHero2 = normalHero2Data[1]
1313

14-
worldState = addNormalHero(worldState, normalHero2Data)
14+
worldState = World.addNormalHero(worldState, normalHero2Data)
1515

1616

17-
worldState = api.normalHero.move(worldState, normalHero1)
17+
worldState = World.api.normalHero.move(worldState, normalHero1)
1818

1919

20-
let superHero1Data = api.superHero.create()
20+
let superHero1Data = World.api.superHero.create()
2121
let superHero1 = superHero1Data[1]
2222

23-
worldState = addSuperHero(worldState, superHero1Data)
23+
worldState = World.addSuperHero(worldState, superHero1Data)
2424

25-
let superHero2Data = api.superHero.create()
25+
let superHero2Data = World.api.superHero.create()
2626
let superHero2 = superHero2Data[1]
2727

28-
worldState = addSuperHero(worldState, superHero2Data)
28+
worldState = World.addSuperHero(worldState, superHero2Data)
2929

3030

31-
worldState = api.superHero.move(worldState, superHero1)
32-
worldState = api.superHero.fly(worldState, superHero1)
31+
worldState = World.api.superHero.move(worldState, superHero1)
32+
worldState = World.api.superHero.fly(worldState, superHero1)
3333

3434

3535
return worldState
3636
}
3737

38-
let worldState = createState()
38+
let worldState = World.createState()
3939

4040
worldState = _createScene(worldState)
4141

42-
worldState = init(worldState)
42+
worldState = WorldUtils.init(worldState)
4343

44-
loop(worldState, [update, renderOneByOne, renderInstances])
44+
WorldUtils.loop(worldState, [World.update, World.renderOneByOne, World.renderInstances])

0 commit comments

Comments
 (0)