hytopia 0.3.0-dev.2 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/boilerplate/index.ts +17 -9
- package/docs/server.modelregistry.md +38 -0
- package/docs/server.modelregistry.optimize.md +13 -0
- package/docs/server.modelregistry.optimizeeverystart.md +13 -0
- package/docs/server.playerui.md +0 -19
- package/docs/server.playeruievent.md +14 -0
- package/docs/server.playeruieventpayloads._player_ui.data_.md +16 -0
- package/docs/server.playeruieventpayloads._player_ui.send_data_.md +2 -2
- package/docs/server.playeruieventpayloads.md +21 -2
- package/examples/custom-ui/index.ts +4 -3
- package/examples/payload-game/assets/models/.optimized/bullet/baseColor.png +0 -0
- package/examples/payload-game/assets/models/.optimized/bullet/bullet-named-nodes.bin +0 -0
- package/examples/payload-game/assets/models/.optimized/bullet/bullet-named-nodes.gltf +308 -0
- package/examples/payload-game/assets/models/.optimized/bullet/bullet.bin +0 -0
- package/examples/payload-game/assets/models/.optimized/bullet/bullet.gltf +142 -0
- package/examples/payload-game/assets/models/.optimized/bullet/bullet.gltf.md5 +1 -0
- package/examples/payload-game/assets/models/.optimized/payload/baseColor.png +0 -0
- package/examples/payload-game/assets/models/.optimized/payload/payload-named-nodes.bin +0 -0
- package/examples/payload-game/assets/models/.optimized/payload/payload-named-nodes.gltf +2868 -0
- package/examples/payload-game/assets/models/.optimized/payload/payload.bin +0 -0
- package/examples/payload-game/assets/models/.optimized/payload/payload.gltf +1109 -0
- package/examples/payload-game/assets/models/.optimized/payload/payload.gltf.md5 +1 -0
- package/examples/payload-game/assets/models/.optimized/player-with-gun/baseColor_1.png +0 -0
- package/examples/payload-game/assets/models/.optimized/player-with-gun/baseColor_2.png +0 -0
- package/examples/payload-game/assets/models/.optimized/player-with-gun/player-with-gun-named-nodes.bin +0 -0
- package/examples/payload-game/assets/models/.optimized/player-with-gun/player-with-gun-named-nodes.gltf +8572 -0
- package/examples/payload-game/assets/models/.optimized/player-with-gun/player-with-gun.bin +0 -0
- package/examples/payload-game/assets/models/.optimized/player-with-gun/player-with-gun.gltf +7849 -0
- package/examples/payload-game/assets/models/.optimized/player-with-gun/player-with-gun.gltf.md5 +1 -0
- package/examples/payload-game/assets/models/.optimized/raygun/baseColor_1.png +0 -0
- package/examples/payload-game/assets/models/.optimized/raygun/baseColor_2.png +0 -0
- package/examples/payload-game/assets/models/.optimized/raygun/raygun-named-nodes.bin +0 -0
- package/examples/payload-game/assets/models/.optimized/raygun/raygun-named-nodes.gltf +7752 -0
- package/examples/payload-game/assets/models/.optimized/raygun/raygun.bin +0 -0
- package/examples/payload-game/assets/models/.optimized/raygun/raygun.gltf +832 -0
- package/examples/payload-game/assets/models/.optimized/raygun/raygun.gltf.md5 +1 -0
- package/examples/payload-game/assets/models/.optimized/soldier-player/baseColor_1.png +0 -0
- package/examples/payload-game/assets/models/.optimized/soldier-player/baseColor_2.png +0 -0
- package/examples/payload-game/assets/models/.optimized/soldier-player/baseColor_3.png +0 -0
- package/examples/payload-game/assets/models/.optimized/soldier-player/baseColor_4.png +0 -0
- package/examples/payload-game/assets/models/.optimized/soldier-player/soldier-player-named-nodes.bin +0 -0
- package/examples/payload-game/assets/models/.optimized/soldier-player/soldier-player-named-nodes.gltf +7679 -0
- package/examples/payload-game/assets/models/.optimized/soldier-player/soldier-player.bin +0 -0
- package/examples/payload-game/assets/models/.optimized/soldier-player/soldier-player.gltf +7774 -0
- package/examples/payload-game/assets/models/.optimized/soldier-player/soldier-player.gltf.md5 +1 -0
- package/examples/payload-game/assets/models/raygun.gltf +1 -0
- package/examples/payload-game/assets/models/soldier-player.gltf +1 -0
- package/examples/payload-game/index.ts +23 -4
- package/examples/zombies-fps/assets/models/environment/.optimized/barbedfence/barbedfence-named-nodes.bin +0 -0
- package/examples/zombies-fps/assets/models/environment/.optimized/barbedfence/barbedfence-named-nodes.gltf +806 -0
- package/examples/zombies-fps/assets/models/environment/.optimized/barbedfence/barbedfence.bin +0 -0
- package/examples/zombies-fps/assets/models/environment/.optimized/barbedfence/barbedfence.gltf +15 -686
- package/examples/zombies-fps/assets/models/environment/.optimized/binoculars/binoculars-named-nodes.bin +0 -0
- package/examples/zombies-fps/assets/models/environment/.optimized/binoculars/binoculars-named-nodes.gltf +1633 -0
- package/examples/zombies-fps/assets/models/environment/.optimized/binoculars/binoculars.bin +0 -0
- package/examples/zombies-fps/assets/models/environment/.optimized/binoculars/binoculars.gltf +86 -1578
- package/examples/zombies-fps/assets/models/environment/.optimized/bombbox/bombbox-named-nodes.bin +0 -0
- package/examples/zombies-fps/assets/models/environment/.optimized/bombbox/bombbox-named-nodes.gltf +2480 -0
- package/examples/zombies-fps/assets/models/environment/.optimized/bombbox/bombbox.bin +0 -0
- package/examples/zombies-fps/assets/models/environment/.optimized/bombbox/bombbox.gltf +88 -2427
- package/examples/zombies-fps/assets/models/environment/.optimized/bullet-hole/bullet-hole-named-nodes.bin +0 -0
- package/examples/zombies-fps/assets/models/environment/.optimized/bullet-hole/bullet-hole-named-nodes.gltf +136 -0
- package/examples/zombies-fps/assets/models/environment/.optimized/bullet-hole/bullet-hole.gltf +1 -1
- package/examples/zombies-fps/assets/models/environment/.optimized/healthkit/healthkit-named-nodes.bin +0 -0
- package/examples/zombies-fps/assets/models/environment/.optimized/healthkit/healthkit-named-nodes.gltf +831 -0
- package/examples/zombies-fps/assets/models/environment/.optimized/healthkit/healthkit.bin +0 -0
- package/examples/zombies-fps/assets/models/environment/.optimized/healthkit/healthkit.gltf +16 -706
- package/examples/zombies-fps/assets/models/environment/.optimized/metalshelf/metalshelf-named-nodes.bin +0 -0
- package/examples/zombies-fps/assets/models/environment/.optimized/metalshelf/metalshelf-named-nodes.gltf +4025 -0
- package/examples/zombies-fps/assets/models/environment/.optimized/metalshelf/metalshelf.bin +0 -0
- package/examples/zombies-fps/assets/models/environment/.optimized/metalshelf/metalshelf.gltf +136 -3944
- package/examples/zombies-fps/assets/models/environment/.optimized/muzzle-flash/muzzle-flash-named-nodes.bin +0 -0
- package/examples/zombies-fps/assets/models/environment/.optimized/muzzle-flash/muzzle-flash-named-nodes.gltf +196 -0
- package/examples/zombies-fps/assets/models/environment/.optimized/muzzle-flash/muzzle-flash.bin +0 -0
- package/examples/zombies-fps/assets/models/environment/.optimized/muzzle-flash/muzzle-flash.gltf +57 -28
- package/examples/zombies-fps/assets/models/environment/.optimized/weaponbox/weaponbox-named-nodes.bin +0 -0
- package/examples/zombies-fps/assets/models/environment/.optimized/weaponbox/weaponbox-named-nodes.gltf +3412 -0
- package/examples/zombies-fps/assets/models/environment/.optimized/weaponbox/weaponbox.bin +0 -0
- package/examples/zombies-fps/assets/models/environment/.optimized/weaponbox/weaponbox.gltf +133 -3323
- package/examples/zombies-fps/assets/models/items/.optimized/ak-47/ak-47-named-nodes.glb +0 -0
- package/examples/zombies-fps/assets/models/items/.optimized/ak-47/ak-47.glb +0 -0
- package/examples/zombies-fps/assets/models/items/.optimized/ar-15/ar-15-named-nodes.glb +0 -0
- package/examples/zombies-fps/assets/models/items/.optimized/ar-15/ar-15.glb +0 -0
- package/examples/zombies-fps/assets/models/items/.optimized/auto-pistol/auto-pistol-named-nodes.glb +0 -0
- package/examples/zombies-fps/assets/models/items/.optimized/auto-pistol/auto-pistol.glb +0 -0
- package/examples/zombies-fps/assets/models/items/.optimized/auto-shotgun/auto-shotgun-named-nodes.glb +0 -0
- package/examples/zombies-fps/assets/models/items/.optimized/auto-shotgun/auto-shotgun.glb +0 -0
- package/examples/zombies-fps/assets/models/items/.optimized/pistol/pistol-named-nodes.glb +0 -0
- package/examples/zombies-fps/assets/models/items/.optimized/pistol/pistol.glb +0 -0
- package/examples/zombies-fps/assets/models/items/.optimized/shotgun/shotgun-named-nodes.glb +0 -0
- package/examples/zombies-fps/assets/models/items/.optimized/shotgun/shotgun.glb +0 -0
- package/examples/zombies-fps/assets/models/npcs/.optimized/ripper-boss/ripper-boss-named-nodes.bin +0 -0
- package/examples/zombies-fps/assets/models/npcs/.optimized/ripper-boss/ripper-boss-named-nodes.gltf +10037 -0
- package/examples/zombies-fps/assets/models/npcs/.optimized/ripper-boss/ripper-boss.bin +0 -0
- package/examples/zombies-fps/assets/models/npcs/.optimized/ripper-boss/ripper-boss.gltf +1262 -4533
- package/examples/zombies-fps/assets/models/players/.optimized/soldier-player/soldier-player-named-nodes.bin +0 -0
- package/examples/zombies-fps/assets/models/players/.optimized/soldier-player/soldier-player-named-nodes.gltf +7679 -0
- package/examples/zombies-fps/assets/models/players/.optimized/soldier-player/soldier-player.bin +0 -0
- package/examples/zombies-fps/assets/models/players/.optimized/soldier-player/soldier-player.gltf +529 -434
- package/examples/zombies-fps/assets/models/projectiles/.optimized/bullet-trace/bullet-trace-named-nodes.bin +0 -0
- package/examples/zombies-fps/assets/models/projectiles/.optimized/bullet-trace/bullet-trace-named-nodes.gltf +136 -0
- package/examples/zombies-fps/assets/models/projectiles/.optimized/bullet-trace/bullet-trace.gltf +1 -1
- package/package.json +5 -2
- package/server.api.json +148 -43
- package/server.d.ts +18 -15
- package/server.js +132 -90
- package/tsdoc-metadata.json +1 -1
- package/docs/server.playerui.ondata.md +0 -18
package/boilerplate/index.ts
CHANGED
@@ -26,8 +26,8 @@
|
|
26
26
|
import {
|
27
27
|
startServer,
|
28
28
|
Audio,
|
29
|
-
GameServer,
|
30
29
|
PlayerEntity,
|
30
|
+
PlayerEvent,
|
31
31
|
} from 'hytopia';
|
32
32
|
|
33
33
|
import worldMap from './assets/map.json';
|
@@ -65,14 +65,18 @@ startServer(world => {
|
|
65
65
|
world.loadMap(worldMap);
|
66
66
|
|
67
67
|
/**
|
68
|
-
* Handle player joining the game. The
|
69
|
-
*
|
68
|
+
* Handle player joining the game. The PlayerEvent.JOINED_WORLD
|
69
|
+
* event is emitted to the world when a new player connects to
|
70
70
|
* the game. From here, we create a basic player
|
71
71
|
* entity instance which automatically handles mapping
|
72
72
|
* their inputs to control their in-game entity and
|
73
73
|
* internally uses our player entity controller.
|
74
|
+
*
|
75
|
+
* The HYTOPIA SDK is heavily driven by events, you
|
76
|
+
* can find documentation on how the event system works,
|
77
|
+
* here: https://dev.hytopia.com/sdk-guides/events
|
74
78
|
*/
|
75
|
-
world.
|
79
|
+
world.on(PlayerEvent.JOINED_WORLD, ({ player }) => {
|
76
80
|
const playerEntity = new PlayerEntity({
|
77
81
|
player,
|
78
82
|
name: 'Player',
|
@@ -89,11 +93,11 @@ startServer(world => {
|
|
89
93
|
world.chatManager.sendPlayerMessage(player, 'Press space to jump.');
|
90
94
|
world.chatManager.sendPlayerMessage(player, 'Hold shift to sprint.');
|
91
95
|
world.chatManager.sendPlayerMessage(player, 'Press \\ to enter or exit debug view.');
|
92
|
-
};
|
96
|
+
});
|
93
97
|
|
94
98
|
/**
|
95
|
-
* Handle player leaving the game. The
|
96
|
-
*
|
99
|
+
* Handle player leaving the game. The PlayerEvent.LEFT_WORLD
|
100
|
+
* event is emitted to the world when a player leaves the game.
|
97
101
|
* Because HYTOPIA is not opinionated on join and
|
98
102
|
* leave game logic, we are responsible for cleaning
|
99
103
|
* up the player and any entities associated with them
|
@@ -101,10 +105,14 @@ startServer(world => {
|
|
101
105
|
* getting all the known PlayerEntity instances for
|
102
106
|
* the player who left by using our world's EntityManager
|
103
107
|
* instance.
|
108
|
+
*
|
109
|
+
* The HYTOPIA SDK is heavily driven by events, you
|
110
|
+
* can find documentation on how the event system works,
|
111
|
+
* here: https://dev.hytopia.com/sdk-guides/events
|
104
112
|
*/
|
105
|
-
world.
|
113
|
+
world.on(PlayerEvent.LEFT_WORLD, ({ player }) => {
|
106
114
|
world.entityManager.getPlayerEntitiesByPlayer(player).forEach(entity => entity.despawn());
|
107
|
-
};
|
115
|
+
});
|
108
116
|
|
109
117
|
/**
|
110
118
|
* A silly little easter egg command. When a player types
|
@@ -73,6 +73,44 @@ Description
|
|
73
73
|
The global ModelRegistry instance as a singleton.
|
74
74
|
|
75
75
|
|
76
|
+
</td></tr>
|
77
|
+
<tr><td>
|
78
|
+
|
79
|
+
[optimize](./server.modelregistry.optimize.md)
|
80
|
+
|
81
|
+
|
82
|
+
</td><td>
|
83
|
+
|
84
|
+
|
85
|
+
</td><td>
|
86
|
+
|
87
|
+
boolean
|
88
|
+
|
89
|
+
|
90
|
+
</td><td>
|
91
|
+
|
92
|
+
Whether to use optimized models when they are loaded.
|
93
|
+
|
94
|
+
|
95
|
+
</td></tr>
|
96
|
+
<tr><td>
|
97
|
+
|
98
|
+
[optimizeEveryStart](./server.modelregistry.optimizeeverystart.md)
|
99
|
+
|
100
|
+
|
101
|
+
</td><td>
|
102
|
+
|
103
|
+
|
104
|
+
</td><td>
|
105
|
+
|
106
|
+
boolean
|
107
|
+
|
108
|
+
|
109
|
+
</td><td>
|
110
|
+
|
111
|
+
Whether to always run model optimization on server start.
|
112
|
+
|
113
|
+
|
76
114
|
</td></tr>
|
77
115
|
</tbody></table>
|
78
116
|
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
2
|
+
|
3
|
+
[Home](./index.md) > [server](./server.md) > [ModelRegistry](./server.modelregistry.md) > [optimize](./server.modelregistry.optimize.md)
|
4
|
+
|
5
|
+
## ModelRegistry.optimize property
|
6
|
+
|
7
|
+
Whether to use optimized models when they are loaded.
|
8
|
+
|
9
|
+
**Signature:**
|
10
|
+
|
11
|
+
```typescript
|
12
|
+
optimize: boolean;
|
13
|
+
```
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
2
|
+
|
3
|
+
[Home](./index.md) > [server](./server.md) > [ModelRegistry](./server.modelregistry.md) > [optimizeEveryStart](./server.modelregistry.optimizeeverystart.md)
|
4
|
+
|
5
|
+
## ModelRegistry.optimizeEveryStart property
|
6
|
+
|
7
|
+
Whether to always run model optimization on server start.
|
8
|
+
|
9
|
+
**Signature:**
|
10
|
+
|
11
|
+
```typescript
|
12
|
+
optimizeEveryStart: boolean;
|
13
|
+
```
|
package/docs/server.playerui.md
CHANGED
@@ -48,25 +48,6 @@ Description
|
|
48
48
|
</th></tr></thead>
|
49
49
|
<tbody><tr><td>
|
50
50
|
|
51
|
-
[onData?](./server.playerui.ondata.md)
|
52
|
-
|
53
|
-
|
54
|
-
</td><td>
|
55
|
-
|
56
|
-
|
57
|
-
</td><td>
|
58
|
-
|
59
|
-
(playerUI: [PlayerUI](./server.playerui.md)<!-- -->, data: object) => void
|
60
|
-
|
61
|
-
|
62
|
-
</td><td>
|
63
|
-
|
64
|
-
_(Optional)_ A function that is called when the player's client UI sends data to the server.
|
65
|
-
|
66
|
-
|
67
|
-
</td></tr>
|
68
|
-
<tr><td>
|
69
|
-
|
70
51
|
[player](./server.playerui.player.md)
|
71
52
|
|
72
53
|
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
|
2
|
+
|
3
|
+
[Home](./index.md) > [server](./server.md) > [PlayerUIEventPayloads](./server.playeruieventpayloads.md) > ["PLAYER\_UI.DATA"](./server.playeruieventpayloads._player_ui.data_.md)
|
4
|
+
|
5
|
+
## PlayerUIEventPayloads."PLAYER\_UI.DATA" property
|
6
|
+
|
7
|
+
Emitted when data is received by the server from the player's client UI.
|
8
|
+
|
9
|
+
**Signature:**
|
10
|
+
|
11
|
+
```typescript
|
12
|
+
[PlayerUIEvent.DATA]: {
|
13
|
+
playerUI: PlayerUI;
|
14
|
+
data: Record<string, any>;
|
15
|
+
};
|
16
|
+
```
|
@@ -4,13 +4,13 @@
|
|
4
4
|
|
5
5
|
## PlayerUIEventPayloads."PLAYER\_UI.SEND\_DATA" property
|
6
6
|
|
7
|
-
Emitted when
|
7
|
+
Emitted when data is sent from the server to the player's client UI.
|
8
8
|
|
9
9
|
**Signature:**
|
10
10
|
|
11
11
|
```typescript
|
12
12
|
[PlayerUIEvent.SEND_DATA]: {
|
13
13
|
playerUI: PlayerUI;
|
14
|
-
data:
|
14
|
+
data: Record<string, any>;
|
15
15
|
};
|
16
16
|
```
|
@@ -37,6 +37,25 @@ Description
|
|
37
37
|
</th></tr></thead>
|
38
38
|
<tbody><tr><td>
|
39
39
|
|
40
|
+
["PLAYER\_UI.DATA"](./server.playeruieventpayloads._player_ui.data_.md)
|
41
|
+
|
42
|
+
|
43
|
+
</td><td>
|
44
|
+
|
45
|
+
|
46
|
+
</td><td>
|
47
|
+
|
48
|
+
{ playerUI: [PlayerUI](./server.playerui.md)<!-- -->; data: Record<string, any>; }
|
49
|
+
|
50
|
+
|
51
|
+
</td><td>
|
52
|
+
|
53
|
+
Emitted when data is received by the server from the player's client UI.
|
54
|
+
|
55
|
+
|
56
|
+
</td></tr>
|
57
|
+
<tr><td>
|
58
|
+
|
40
59
|
["PLAYER\_UI.LOAD"](./server.playeruieventpayloads._player_ui.load_.md)
|
41
60
|
|
42
61
|
|
@@ -83,12 +102,12 @@ Emitted when the player's mouse pointer is locked or unlocked.
|
|
83
102
|
|
84
103
|
</td><td>
|
85
104
|
|
86
|
-
{ playerUI: [PlayerUI](./server.playerui.md)<!-- -->; data:
|
105
|
+
{ playerUI: [PlayerUI](./server.playerui.md)<!-- -->; data: Record<string, any>; }
|
87
106
|
|
88
107
|
|
89
108
|
</td><td>
|
90
109
|
|
91
|
-
Emitted when
|
110
|
+
Emitted when data is sent from the server to the player's client UI.
|
92
111
|
|
93
112
|
|
94
113
|
</td></tr>
|
@@ -4,7 +4,7 @@ import {
|
|
4
4
|
Player,
|
5
5
|
PlayerEntity,
|
6
6
|
PlayerEvent,
|
7
|
-
|
7
|
+
PlayerUIEvent,
|
8
8
|
} from 'hytopia';
|
9
9
|
|
10
10
|
import worldMap from './assets/map.json';
|
@@ -40,7 +40,8 @@ startServer(world => {
|
|
40
40
|
|
41
41
|
// Handle data sent from player to server by client UI interactions we define.
|
42
42
|
// See the ui/index.html file for the UI code that sends the data.
|
43
|
-
player.ui.
|
43
|
+
player.ui.on(PlayerUIEvent.DATA, ({ playerUI, data }) => {
|
44
|
+
console.log('data', data);
|
44
45
|
if (data.type === 'teleport') {
|
45
46
|
const randomX = Math.random() * 40 - 20; // Random between -20 and 20
|
46
47
|
const randomY = Math.random() * 13 + 2; // Random between 2 and 15
|
@@ -48,7 +49,7 @@ startServer(world => {
|
|
48
49
|
|
49
50
|
playerEntity.setPosition({ x: randomX, y: randomY, z: randomZ });
|
50
51
|
}
|
51
|
-
};
|
52
|
+
});
|
52
53
|
});
|
53
54
|
|
54
55
|
world.on(PlayerEvent.LEFT_WORLD, ({ player }) => {
|
Binary file
|
@@ -0,0 +1,308 @@
|
|
1
|
+
{
|
2
|
+
"asset": {
|
3
|
+
"generator": "glTF-Transform v4.1.2",
|
4
|
+
"version": "2.0"
|
5
|
+
},
|
6
|
+
"accessors": [
|
7
|
+
{
|
8
|
+
"type": "SCALAR",
|
9
|
+
"componentType": 5123,
|
10
|
+
"count": 132,
|
11
|
+
"bufferView": 0,
|
12
|
+
"byteOffset": 0
|
13
|
+
},
|
14
|
+
{
|
15
|
+
"type": "SCALAR",
|
16
|
+
"componentType": 5123,
|
17
|
+
"count": 6,
|
18
|
+
"bufferView": 0,
|
19
|
+
"byteOffset": 264
|
20
|
+
},
|
21
|
+
{
|
22
|
+
"type": "VEC3",
|
23
|
+
"componentType": 5126,
|
24
|
+
"count": 96,
|
25
|
+
"max": [
|
26
|
+
0.0625,
|
27
|
+
0.78125,
|
28
|
+
0.0625
|
29
|
+
],
|
30
|
+
"min": [
|
31
|
+
-0.0625,
|
32
|
+
-0.28125,
|
33
|
+
-0.0625
|
34
|
+
],
|
35
|
+
"bufferView": 1,
|
36
|
+
"byteOffset": 0
|
37
|
+
},
|
38
|
+
{
|
39
|
+
"type": "VEC3",
|
40
|
+
"componentType": 5126,
|
41
|
+
"count": 96,
|
42
|
+
"bufferView": 1,
|
43
|
+
"byteOffset": 12
|
44
|
+
},
|
45
|
+
{
|
46
|
+
"type": "VEC2",
|
47
|
+
"componentType": 5126,
|
48
|
+
"count": 96,
|
49
|
+
"bufferView": 1,
|
50
|
+
"byteOffset": 24
|
51
|
+
},
|
52
|
+
{
|
53
|
+
"type": "VEC3",
|
54
|
+
"componentType": 5126,
|
55
|
+
"count": 4,
|
56
|
+
"max": [
|
57
|
+
0.25,
|
58
|
+
0,
|
59
|
+
0.25
|
60
|
+
],
|
61
|
+
"min": [
|
62
|
+
-0.25,
|
63
|
+
0,
|
64
|
+
-0.25
|
65
|
+
],
|
66
|
+
"bufferView": 2,
|
67
|
+
"byteOffset": 0
|
68
|
+
},
|
69
|
+
{
|
70
|
+
"type": "VEC3",
|
71
|
+
"componentType": 5126,
|
72
|
+
"count": 4,
|
73
|
+
"bufferView": 2,
|
74
|
+
"byteOffset": 12
|
75
|
+
},
|
76
|
+
{
|
77
|
+
"type": "VEC2",
|
78
|
+
"componentType": 5126,
|
79
|
+
"count": 4,
|
80
|
+
"bufferView": 2,
|
81
|
+
"byteOffset": 24
|
82
|
+
},
|
83
|
+
{
|
84
|
+
"type": "VEC3",
|
85
|
+
"componentType": 5126,
|
86
|
+
"count": 4,
|
87
|
+
"max": [
|
88
|
+
0.78125,
|
89
|
+
0,
|
90
|
+
0.28125
|
91
|
+
],
|
92
|
+
"min": [
|
93
|
+
-0.78125,
|
94
|
+
0,
|
95
|
+
-0.28125
|
96
|
+
],
|
97
|
+
"bufferView": 3,
|
98
|
+
"byteOffset": 0
|
99
|
+
},
|
100
|
+
{
|
101
|
+
"type": "VEC2",
|
102
|
+
"componentType": 5126,
|
103
|
+
"count": 4,
|
104
|
+
"bufferView": 3,
|
105
|
+
"byteOffset": 12
|
106
|
+
}
|
107
|
+
],
|
108
|
+
"bufferViews": [
|
109
|
+
{
|
110
|
+
"buffer": 0,
|
111
|
+
"byteOffset": 0,
|
112
|
+
"byteLength": 276,
|
113
|
+
"target": 34963
|
114
|
+
},
|
115
|
+
{
|
116
|
+
"buffer": 0,
|
117
|
+
"byteOffset": 276,
|
118
|
+
"byteLength": 3072,
|
119
|
+
"byteStride": 32,
|
120
|
+
"target": 34962
|
121
|
+
},
|
122
|
+
{
|
123
|
+
"buffer": 0,
|
124
|
+
"byteOffset": 3348,
|
125
|
+
"byteLength": 128,
|
126
|
+
"byteStride": 32,
|
127
|
+
"target": 34962
|
128
|
+
},
|
129
|
+
{
|
130
|
+
"buffer": 0,
|
131
|
+
"byteOffset": 3476,
|
132
|
+
"byteLength": 80,
|
133
|
+
"byteStride": 20,
|
134
|
+
"target": 34962
|
135
|
+
}
|
136
|
+
],
|
137
|
+
"samplers": [
|
138
|
+
{
|
139
|
+
"magFilter": 9728,
|
140
|
+
"minFilter": 9728,
|
141
|
+
"wrapS": 33071,
|
142
|
+
"wrapT": 33071
|
143
|
+
}
|
144
|
+
],
|
145
|
+
"textures": [
|
146
|
+
{
|
147
|
+
"source": 0,
|
148
|
+
"sampler": 0
|
149
|
+
}
|
150
|
+
],
|
151
|
+
"images": [
|
152
|
+
{
|
153
|
+
"mimeType": "image/png",
|
154
|
+
"uri": "baseColor.png"
|
155
|
+
}
|
156
|
+
],
|
157
|
+
"buffers": [
|
158
|
+
{
|
159
|
+
"uri": "bullet-named-nodes.bin",
|
160
|
+
"byteLength": 3556
|
161
|
+
}
|
162
|
+
],
|
163
|
+
"materials": [
|
164
|
+
{
|
165
|
+
"alphaMode": "MASK",
|
166
|
+
"alphaCutoff": 0.05,
|
167
|
+
"doubleSided": true,
|
168
|
+
"pbrMetallicRoughness": {
|
169
|
+
"metallicFactor": 0,
|
170
|
+
"baseColorTexture": {
|
171
|
+
"index": 0
|
172
|
+
}
|
173
|
+
}
|
174
|
+
}
|
175
|
+
],
|
176
|
+
"meshes": [
|
177
|
+
{
|
178
|
+
"primitives": [
|
179
|
+
{
|
180
|
+
"attributes": {
|
181
|
+
"POSITION": 2,
|
182
|
+
"NORMAL": 3,
|
183
|
+
"TEXCOORD_0": 4
|
184
|
+
},
|
185
|
+
"mode": 4,
|
186
|
+
"material": 0,
|
187
|
+
"indices": 0
|
188
|
+
}
|
189
|
+
]
|
190
|
+
},
|
191
|
+
{
|
192
|
+
"primitives": [
|
193
|
+
{
|
194
|
+
"attributes": {
|
195
|
+
"POSITION": 5,
|
196
|
+
"NORMAL": 6,
|
197
|
+
"TEXCOORD_0": 7
|
198
|
+
},
|
199
|
+
"mode": 4,
|
200
|
+
"material": 0,
|
201
|
+
"indices": 1
|
202
|
+
}
|
203
|
+
]
|
204
|
+
},
|
205
|
+
{
|
206
|
+
"primitives": [
|
207
|
+
{
|
208
|
+
"attributes": {
|
209
|
+
"POSITION": 8,
|
210
|
+
"TEXCOORD_0": 9,
|
211
|
+
"NORMAL": 6
|
212
|
+
},
|
213
|
+
"mode": 4,
|
214
|
+
"material": 0,
|
215
|
+
"indices": 1
|
216
|
+
}
|
217
|
+
]
|
218
|
+
},
|
219
|
+
{
|
220
|
+
"primitives": [
|
221
|
+
{
|
222
|
+
"attributes": {
|
223
|
+
"POSITION": 8,
|
224
|
+
"NORMAL": 6,
|
225
|
+
"TEXCOORD_0": 9
|
226
|
+
},
|
227
|
+
"mode": 4,
|
228
|
+
"material": 0,
|
229
|
+
"indices": 1
|
230
|
+
}
|
231
|
+
]
|
232
|
+
}
|
233
|
+
],
|
234
|
+
"nodes": [
|
235
|
+
{
|
236
|
+
"name": "beveled_cuboid",
|
237
|
+
"translation": [
|
238
|
+
0,
|
239
|
+
0.1875,
|
240
|
+
-0.25
|
241
|
+
],
|
242
|
+
"rotation": [
|
243
|
+
0.7071067811865475,
|
244
|
+
0,
|
245
|
+
0,
|
246
|
+
0.7071067811865476
|
247
|
+
],
|
248
|
+
"mesh": 0
|
249
|
+
},
|
250
|
+
{
|
251
|
+
"name": "plane",
|
252
|
+
"translation": [
|
253
|
+
0,
|
254
|
+
0.1875,
|
255
|
+
0
|
256
|
+
],
|
257
|
+
"rotation": [
|
258
|
+
0.7071067811865475,
|
259
|
+
0,
|
260
|
+
0,
|
261
|
+
0.7071067811865476
|
262
|
+
],
|
263
|
+
"mesh": 1
|
264
|
+
},
|
265
|
+
{
|
266
|
+
"name": "plane",
|
267
|
+
"translation": [
|
268
|
+
0,
|
269
|
+
0.1875,
|
270
|
+
0
|
271
|
+
],
|
272
|
+
"rotation": [
|
273
|
+
0.5,
|
274
|
+
-0.4999999999999999,
|
275
|
+
0.5,
|
276
|
+
0.5000000000000001
|
277
|
+
],
|
278
|
+
"mesh": 2
|
279
|
+
},
|
280
|
+
{
|
281
|
+
"name": "plane",
|
282
|
+
"translation": [
|
283
|
+
0,
|
284
|
+
0.1875,
|
285
|
+
0
|
286
|
+
],
|
287
|
+
"rotation": [
|
288
|
+
0.7071067811865475,
|
289
|
+
5.551115123125786e-17,
|
290
|
+
0.7071067811865476,
|
291
|
+
1.6653345369377348e-16
|
292
|
+
],
|
293
|
+
"mesh": 3
|
294
|
+
}
|
295
|
+
],
|
296
|
+
"scenes": [
|
297
|
+
{
|
298
|
+
"name": "blockbench_export",
|
299
|
+
"nodes": [
|
300
|
+
0,
|
301
|
+
1,
|
302
|
+
2,
|
303
|
+
3
|
304
|
+
]
|
305
|
+
}
|
306
|
+
],
|
307
|
+
"scene": 0
|
308
|
+
}
|
Binary file
|