@series-inc/rundot-3d-engine 0.4.2 → 0.4.4
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/README.md +3 -3
- package/docs/core/Component.md +1 -1
- package/docs/core/GameObject.md +1 -1
- package/docs/core/VenusGame.md +3 -3
- package/docs/patterns/MeshColliders.md +6 -6
- package/docs/patterns/MeshLoading.md +3 -3
- package/docs/physics/Colliders.md +1 -1
- package/docs/physics/PhysicsSystem.md +2 -2
- package/docs/physics/RigidBodyComponent.md +1 -1
- package/docs/rendering/AssetManager.md +1 -1
- package/docs/rendering/InstancedRenderer.md +3 -3
- package/docs/rendering/MeshRenderer.md +1 -1
- package/docs/rendering/SkeletalRenderer.md +3 -3
- package/docs/systems/AnimationSystem.md +1 -1
- package/docs/systems/AudioSystem.md +1 -1
- package/docs/systems/InputManager.md +1 -1
- package/docs/systems/LightingSystem.md +1 -1
- package/docs/systems/ParticleSystem.md +1 -1
- package/docs/systems/PrefabSystem.md +1 -1
- package/docs/systems/StowKitSystem.md +1 -1
- package/docs/systems/TweenSystem.md +1 -1
- package/docs/systems/UISystem.md +1 -1
- package/package.json +3 -2
- package/scripts/update-docs-index.mjs +12 -3
package/README.md
CHANGED
|
@@ -21,7 +21,7 @@ A Three.js-based game engine with ECS architecture, physics, navigation, and com
|
|
|
21
21
|
```json
|
|
22
22
|
{
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@series-
|
|
24
|
+
"@series-inc/rundot-3d-engine": "^0.2.0"
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
```
|
|
@@ -35,8 +35,8 @@ git submodule update --init --recursive
|
|
|
35
35
|
## Usage
|
|
36
36
|
|
|
37
37
|
```typescript
|
|
38
|
-
import { VenusGame, GameObject, Component } from "@series-
|
|
39
|
-
import { PhysicsSystem, UISystem } from "@series-
|
|
38
|
+
import { VenusGame, GameObject, Component } from "@series-inc/rundot-3d-engine"
|
|
39
|
+
import { PhysicsSystem, UISystem } from "@series-inc/rundot-3d-engine/systems"
|
|
40
40
|
|
|
41
41
|
class MyGame extends VenusGame {
|
|
42
42
|
async onCreate(): Promise<void> {
|
package/docs/core/Component.md
CHANGED
|
@@ -5,7 +5,7 @@ Component is the base class for all behaviors that can be attached to GameObject
|
|
|
5
5
|
## Quick Start
|
|
6
6
|
|
|
7
7
|
```typescript
|
|
8
|
-
import { Component } from "@series-
|
|
8
|
+
import { Component } from "@series-inc/rundot-3d-engine"
|
|
9
9
|
|
|
10
10
|
class RotateComponent extends Component {
|
|
11
11
|
private speed: number = 1
|
package/docs/core/GameObject.md
CHANGED
|
@@ -5,7 +5,7 @@ GameObject is the base entity class in the Rundot 3D Engine, extending THREE.Obj
|
|
|
5
5
|
## Quick Start
|
|
6
6
|
|
|
7
7
|
```typescript
|
|
8
|
-
import { GameObject } from "@series-
|
|
8
|
+
import { GameObject } from "@series-inc/rundot-3d-engine"
|
|
9
9
|
|
|
10
10
|
// Create a GameObject (automatically added to scene)
|
|
11
11
|
const player = new GameObject("Player")
|
package/docs/core/VenusGame.md
CHANGED
|
@@ -5,8 +5,8 @@ VenusGame is the base class for your game application. It manages the Three.js r
|
|
|
5
5
|
## Quick Start
|
|
6
6
|
|
|
7
7
|
```typescript
|
|
8
|
-
import { VenusGame } from "@series-
|
|
9
|
-
import { GameObject, Component } from "@series-
|
|
8
|
+
import { VenusGame } from "@series-inc/rundot-3d-engine"
|
|
9
|
+
import { GameObject, Component } from "@series-inc/rundot-3d-engine"
|
|
10
10
|
|
|
11
11
|
class MyGame extends VenusGame {
|
|
12
12
|
protected async onStart(): Promise<void> {
|
|
@@ -62,7 +62,7 @@ class MyGame extends VenusGame {
|
|
|
62
62
|
|
|
63
63
|
```typescript
|
|
64
64
|
// From anywhere in your code after game initialization
|
|
65
|
-
import { VenusGame } from "@series-
|
|
65
|
+
import { VenusGame } from "@series-inc/rundot-3d-engine"
|
|
66
66
|
|
|
67
67
|
// Access the scene
|
|
68
68
|
const scene = VenusGame.scene
|
|
@@ -15,8 +15,8 @@ When loading meshes, you need to decide between:
|
|
|
15
15
|
The simplest approach - automatically fit the collider to the mesh bounds:
|
|
16
16
|
|
|
17
17
|
```typescript
|
|
18
|
-
import { Component, GameObject, MeshRenderer } from "@series-
|
|
19
|
-
import { RigidBodyComponentThree, RigidBodyType, ColliderShape } from "@series-
|
|
18
|
+
import { Component, GameObject, MeshRenderer } from "@series-inc/rundot-3d-engine"
|
|
19
|
+
import { RigidBodyComponentThree, RigidBodyType, ColliderShape } from "@series-inc/rundot-3d-engine/systems"
|
|
20
20
|
|
|
21
21
|
class Crate extends Component {
|
|
22
22
|
private rendererObject: GameObject | null = null
|
|
@@ -53,8 +53,8 @@ class Crate extends Component {
|
|
|
53
53
|
Wait for mesh to load before calculating bounds:
|
|
54
54
|
|
|
55
55
|
```typescript
|
|
56
|
-
import { Component, GameObject, MeshRenderer } from "@series-
|
|
57
|
-
import { RigidBodyComponentThree, RigidBodyType, ColliderShape } from "@series-
|
|
56
|
+
import { Component, GameObject, MeshRenderer } from "@series-inc/rundot-3d-engine"
|
|
57
|
+
import { RigidBodyComponentThree, RigidBodyType, ColliderShape } from "@series-inc/rundot-3d-engine/systems"
|
|
58
58
|
|
|
59
59
|
class ComplexObject extends Component {
|
|
60
60
|
private rendererObject: GameObject | null = null
|
|
@@ -251,8 +251,8 @@ for (let i = 0; i < 100; i++) {
|
|
|
251
251
|
Combining mesh loading with auto-fitted trigger collision:
|
|
252
252
|
|
|
253
253
|
```typescript
|
|
254
|
-
import { Component, GameObject, MeshRenderer } from "@series-
|
|
255
|
-
import { RigidBodyComponentThree, RigidBodyType, ColliderShape } from "@series-
|
|
254
|
+
import { Component, GameObject, MeshRenderer } from "@series-inc/rundot-3d-engine"
|
|
255
|
+
import { RigidBodyComponentThree, RigidBodyType, ColliderShape } from "@series-inc/rundot-3d-engine/systems"
|
|
256
256
|
|
|
257
257
|
class CoinPickup extends Component {
|
|
258
258
|
private rendererObject: GameObject | null = null
|
|
@@ -35,7 +35,7 @@ private createMeshRenderer(): void {
|
|
|
35
35
|
## Complete Example
|
|
36
36
|
|
|
37
37
|
```typescript
|
|
38
|
-
import { Component, GameObject, MeshRenderer } from "@series-
|
|
38
|
+
import { Component, GameObject, MeshRenderer } from "@series-inc/rundot-3d-engine"
|
|
39
39
|
|
|
40
40
|
class Pickup extends Component {
|
|
41
41
|
private rendererObject: GameObject | null = null
|
|
@@ -162,8 +162,8 @@ InstancedRenderer uses GPU instancing to render hundreds or thousands of the sam
|
|
|
162
162
|
### Basic Example
|
|
163
163
|
|
|
164
164
|
```typescript
|
|
165
|
-
import { Component, GameObject } from "@series-
|
|
166
|
-
import { InstancedRenderer } from "@series-
|
|
165
|
+
import { Component, GameObject } from "@series-inc/rundot-3d-engine"
|
|
166
|
+
import { InstancedRenderer } from "@series-inc/rundot-3d-engine/rendering"
|
|
167
167
|
import * as THREE from "three"
|
|
168
168
|
|
|
169
169
|
class CoinSpawner extends Component {
|
|
@@ -140,7 +140,7 @@ class PickupZone extends Component {
|
|
|
140
140
|
Filter which objects collide with each other:
|
|
141
141
|
|
|
142
142
|
```typescript
|
|
143
|
-
import { createCollisionGroup } from "@series-
|
|
143
|
+
import { createCollisionGroup } from "@series-inc/rundot-3d-engine/systems"
|
|
144
144
|
|
|
145
145
|
// Define groups (16-bit bitmasks)
|
|
146
146
|
const PLAYER_GROUP = 0x0001
|
|
@@ -5,7 +5,7 @@ PhysicsSystem manages Rapier3D physics simulation with fixed-step integration, c
|
|
|
5
5
|
## Quick Start
|
|
6
6
|
|
|
7
7
|
```typescript
|
|
8
|
-
import { PhysicsSystem } from "@series-
|
|
8
|
+
import { PhysicsSystem } from "@series-inc/rundot-3d-engine/systems"
|
|
9
9
|
|
|
10
10
|
// Initialize (done automatically by VenusGame)
|
|
11
11
|
await PhysicsSystem.initialize()
|
|
@@ -19,7 +19,7 @@ await PhysicsSystem.initialize()
|
|
|
19
19
|
### Adding Physics to GameObject
|
|
20
20
|
|
|
21
21
|
```typescript
|
|
22
|
-
import { RigidBodyComponentThree, RigidBodyType } from "@series-
|
|
22
|
+
import { RigidBodyComponentThree, RigidBodyType } from "@series-inc/rundot-3d-engine/systems"
|
|
23
23
|
|
|
24
24
|
// Dynamic body (affected by gravity, forces)
|
|
25
25
|
const box = new GameObject("Box")
|
|
@@ -5,7 +5,7 @@ RigidBodyComponentThree adds Rapier physics to GameObjects with automatic positi
|
|
|
5
5
|
## Quick Start
|
|
6
6
|
|
|
7
7
|
```typescript
|
|
8
|
-
import { RigidBodyComponentThree, RigidBodyType, ColliderShape } from "@series-
|
|
8
|
+
import { RigidBodyComponentThree, RigidBodyType, ColliderShape } from "@series-inc/rundot-3d-engine/systems"
|
|
9
9
|
|
|
10
10
|
// Dynamic physics object
|
|
11
11
|
const ball = new GameObject("Ball")
|
|
@@ -5,7 +5,7 @@ AssetManager handles loading and caching of 3D assets (FBX, GLB, OBJ) with suppo
|
|
|
5
5
|
## Quick Start
|
|
6
6
|
|
|
7
7
|
```typescript
|
|
8
|
-
import { AssetManager } from "@series-
|
|
8
|
+
import { AssetManager } from "@series-inc/rundot-3d-engine/assets"
|
|
9
9
|
import * as THREE from "three"
|
|
10
10
|
|
|
11
11
|
// Initialize (done automatically by VenusGame)
|
|
@@ -5,8 +5,8 @@ InstancedRenderer uses GPU instancing to efficiently render many copies of the s
|
|
|
5
5
|
## Quick Start
|
|
6
6
|
|
|
7
7
|
```typescript
|
|
8
|
-
import { GameObject, InstancedRenderer } from "@series-
|
|
9
|
-
import { InstancedMeshManager } from "@series-
|
|
8
|
+
import { GameObject, InstancedRenderer } from "@series-inc/rundot-3d-engine"
|
|
9
|
+
import { InstancedMeshManager } from "@series-inc/rundot-3d-engine/render"
|
|
10
10
|
|
|
11
11
|
// 1. Pre-register a batch (optional - auto-creates if not done)
|
|
12
12
|
await InstancedMeshManager.getInstance().registerMeshForInstancing(
|
|
@@ -246,7 +246,7 @@ tree.getComponent(InstancedRenderer)?.markDirty()
|
|
|
246
246
|
### Creating Batches Explicitly
|
|
247
247
|
|
|
248
248
|
```typescript
|
|
249
|
-
import { InstancedMeshManager } from "@series-
|
|
249
|
+
import { InstancedMeshManager } from "@series-inc/rundot-3d-engine/render"
|
|
250
250
|
|
|
251
251
|
// Initialize manager (done automatically by VenusGame)
|
|
252
252
|
const manager = InstancedMeshManager.getInstance()
|
|
@@ -5,7 +5,7 @@ MeshRenderer is a Component that loads and displays 3D meshes from the StowKit a
|
|
|
5
5
|
## Quick Start
|
|
6
6
|
|
|
7
7
|
```typescript
|
|
8
|
-
import { GameObject, MeshRenderer } from "@series-
|
|
8
|
+
import { GameObject, MeshRenderer } from "@series-inc/rundot-3d-engine"
|
|
9
9
|
|
|
10
10
|
// The correct pattern: MeshRenderer + child GameObject
|
|
11
11
|
const renderer = new MeshRenderer("restaurant_display_Money")
|
|
@@ -5,8 +5,8 @@ SkeletalRenderer loads and displays animated character meshes with skeletal anim
|
|
|
5
5
|
## Quick Start
|
|
6
6
|
|
|
7
7
|
```typescript
|
|
8
|
-
import { GameObject, SkeletalRenderer } from "@series-
|
|
9
|
-
import { AssetManager } from "@series-
|
|
8
|
+
import { GameObject, SkeletalRenderer } from "@series-inc/rundot-3d-engine"
|
|
9
|
+
import { AssetManager } from "@series-inc/rundot-3d-engine/assets"
|
|
10
10
|
|
|
11
11
|
// 1. Preload skeletal model
|
|
12
12
|
await AssetManager.preloadSkeletalModel("Character/character_main.fbx")
|
|
@@ -62,7 +62,7 @@ const renderer = new SkeletalRenderer(
|
|
|
62
62
|
### Integration with Animation System
|
|
63
63
|
|
|
64
64
|
```typescript
|
|
65
|
-
import { AnimationControllerComponent } from "@series-
|
|
65
|
+
import { AnimationControllerComponent } from "@series-inc/rundot-3d-engine/systems"
|
|
66
66
|
|
|
67
67
|
class AnimatedCharacter extends Component {
|
|
68
68
|
protected async onCreate(): Promise<void> {
|
|
@@ -5,7 +5,7 @@ Advanced animation system with state machines, blending, retargeting, and frustu
|
|
|
5
5
|
## Quick Start
|
|
6
6
|
|
|
7
7
|
```typescript
|
|
8
|
-
import { AnimationControllerComponent } from "@series-
|
|
8
|
+
import { AnimationControllerComponent } from "@series-inc/rundot-3d-engine/systems"
|
|
9
9
|
|
|
10
10
|
// Add to character with SkeletalRenderer
|
|
11
11
|
const character = new GameObject("Character")
|
|
@@ -5,7 +5,7 @@ Cross-platform input system for keyboard, mouse, and touch with mobile support.
|
|
|
5
5
|
## Quick Start
|
|
6
6
|
|
|
7
7
|
```typescript
|
|
8
|
-
import { InputManager } from "@series-
|
|
8
|
+
import { InputManager } from "@series-inc/rundot-3d-engine/systems"
|
|
9
9
|
|
|
10
10
|
// Check keyboard input
|
|
11
11
|
if (InputManager.isKeyDown("w")) {
|
|
@@ -5,7 +5,7 @@ Lighting components for Three.js scenes with directional and ambient lights.
|
|
|
5
5
|
## Quick Start
|
|
6
6
|
|
|
7
7
|
```typescript
|
|
8
|
-
import { DirectionalLightComponentThree, AmbientLightComponentThree } from "@series-
|
|
8
|
+
import { DirectionalLightComponentThree, AmbientLightComponentThree } from "@series-inc/rundot-3d-engine/systems"
|
|
9
9
|
import * as THREE from "three"
|
|
10
10
|
|
|
11
11
|
// Add directional light (sun)
|
|
@@ -5,7 +5,7 @@ Flexible particle system for visual effects like smoke, fire, explosions, and ma
|
|
|
5
5
|
## Quick Start
|
|
6
6
|
|
|
7
7
|
```typescript
|
|
8
|
-
import { ParticleSystemPrefabComponent } from "@series-
|
|
8
|
+
import { ParticleSystemPrefabComponent } from "@series-inc/rundot-3d-engine/systems"
|
|
9
9
|
|
|
10
10
|
// Particles are typically created from prefabs
|
|
11
11
|
// See prefab documentation for particle configuration
|
|
@@ -5,7 +5,7 @@ Prefab system for instantiating pre-configured GameObjects with components from
|
|
|
5
5
|
## Quick Start
|
|
6
6
|
|
|
7
7
|
```typescript
|
|
8
|
-
import { PrefabLoader, PrefabCollection } from "@series-
|
|
8
|
+
import { PrefabLoader, PrefabCollection } from "@series-inc/rundot-3d-engine/systems"
|
|
9
9
|
|
|
10
10
|
// Load prefabs (done via StowKitSystem)
|
|
11
11
|
const prefabs = await StowKitSystem.getInstance().loadFromBuildJson(buildJson, config)
|
|
@@ -5,7 +5,7 @@ StowKitSystem loads assets from .stow pack files with automatic caching, prefab
|
|
|
5
5
|
## Quick Start
|
|
6
6
|
|
|
7
7
|
```typescript
|
|
8
|
-
import { StowKitSystem } from "@series-
|
|
8
|
+
import { StowKitSystem } from "@series-inc/rundot-3d-engine/systems"
|
|
9
9
|
import RundotGameAPI from "@series-inc/rundot-game-sdk/api"
|
|
10
10
|
|
|
11
11
|
// Load from build.json (includes all packs and prefabs)
|
|
@@ -5,7 +5,7 @@ Property animation system with easing functions for smooth transitions.
|
|
|
5
5
|
## Quick Start
|
|
6
6
|
|
|
7
7
|
```typescript
|
|
8
|
-
import { TweenSystem, Easing } from "@series-
|
|
8
|
+
import { TweenSystem, Easing } from "@series-inc/rundot-3d-engine/systems"
|
|
9
9
|
|
|
10
10
|
// Animate object property
|
|
11
11
|
TweenSystem.tween(
|
package/docs/systems/UISystem.md
CHANGED
|
@@ -5,7 +5,7 @@ UI utilities and loading screen management.
|
|
|
5
5
|
## Quick Start
|
|
6
6
|
|
|
7
7
|
```typescript
|
|
8
|
-
import { UISystem } from "@series-
|
|
8
|
+
import { UISystem } from "@series-inc/rundot-3d-engine/systems"
|
|
9
9
|
|
|
10
10
|
// Show loading screen
|
|
11
11
|
UISystem.showLoadingScreen()
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@series-inc/rundot-3d-engine",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"scripts": {
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
"lint:fix": "eslint src --fix",
|
|
11
11
|
"format": "prettier --write .",
|
|
12
12
|
"format:check": "prettier --check .",
|
|
13
|
-
"postinstall": "node scripts/postinstall.mjs"
|
|
13
|
+
"postinstall": "node scripts/postinstall.mjs",
|
|
14
|
+
"gen-docs-index": "node scripts/gen-docs-index.mjs && node scripts/update-docs-index.mjs"
|
|
14
15
|
},
|
|
15
16
|
"repository": {
|
|
16
17
|
"type": "git",
|
|
@@ -9,16 +9,25 @@ export function updateDocsIndex(cwd = resolve(import.meta.dirname, "..")) {
|
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
const fresh = readFileSync(indexPath, "utf-8").trimEnd();
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
|
|
13
|
+
// Extract the label from the index line, e.g. [Run.3DEngine Docs Index]|...
|
|
14
|
+
const labelMatch = fresh.match(/^\[([^\]]+)\]/);
|
|
15
|
+
if (!labelMatch) {
|
|
16
|
+
console.warn("Could not parse label from docs-index.txt, skipping");
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const escaped = labelMatch[1].replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
14
20
|
const re = new RegExp(`\\[${escaped}\\][^\\n]*(?:\\n(?![\\[<])[^\\n]*)*`);
|
|
15
21
|
|
|
16
22
|
const targets = ["AGENTS.md", "CLAUDE.md"];
|
|
17
23
|
|
|
18
24
|
for (const file of targets) {
|
|
19
25
|
const filePath = resolve(cwd, file);
|
|
26
|
+
|
|
20
27
|
if (!existsSync(filePath)) {
|
|
21
|
-
|
|
28
|
+
// Create the file with just the index line
|
|
29
|
+
writeFileSync(filePath, fresh + "\n");
|
|
30
|
+
console.log(`Created ${file}`);
|
|
22
31
|
continue;
|
|
23
32
|
}
|
|
24
33
|
|