@aura3d/scripting 1.0.6
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 +16 -0
- package/dist/AdaptiveDifficultyFixtures.d.ts +58 -0
- package/dist/AdaptiveDifficultyFixtures.d.ts.map +1 -0
- package/dist/AdaptiveDifficultyFixtures.js +228 -0
- package/dist/AdaptiveDifficultyFixtures.js.map +1 -0
- package/dist/AnalyticsPrivacyFixtures.d.ts +63 -0
- package/dist/AnalyticsPrivacyFixtures.d.ts.map +1 -0
- package/dist/AnalyticsPrivacyFixtures.js +120 -0
- package/dist/AnalyticsPrivacyFixtures.js.map +1 -0
- package/dist/Behavior.d.ts +10 -0
- package/dist/Behavior.d.ts.map +1 -0
- package/dist/Behavior.js +2 -0
- package/dist/Behavior.js.map +1 -0
- package/dist/BehaviorHost.d.ts +17 -0
- package/dist/BehaviorHost.d.ts.map +1 -0
- package/dist/BehaviorHost.js +39 -0
- package/dist/BehaviorHost.js.map +1 -0
- package/dist/BehaviorRegistry.d.ts +8 -0
- package/dist/BehaviorRegistry.d.ts.map +1 -0
- package/dist/BehaviorRegistry.js +17 -0
- package/dist/BehaviorRegistry.js.map +1 -0
- package/dist/BehaviorSystem.d.ts +26 -0
- package/dist/BehaviorSystem.d.ts.map +1 -0
- package/dist/BehaviorSystem.js +76 -0
- package/dist/BehaviorSystem.js.map +1 -0
- package/dist/BehaviorTree.d.ts +75 -0
- package/dist/BehaviorTree.d.ts.map +1 -0
- package/dist/BehaviorTree.js +204 -0
- package/dist/BehaviorTree.js.map +1 -0
- package/dist/CloudServiceFixtures.d.ts +81 -0
- package/dist/CloudServiceFixtures.d.ts.map +1 -0
- package/dist/CloudServiceFixtures.js +144 -0
- package/dist/CloudServiceFixtures.js.map +1 -0
- package/dist/CulturalBehaviorFixtures.d.ts +75 -0
- package/dist/CulturalBehaviorFixtures.d.ts.map +1 -0
- package/dist/CulturalBehaviorFixtures.js +180 -0
- package/dist/CulturalBehaviorFixtures.js.map +1 -0
- package/dist/DecisionTree.d.ts +42 -0
- package/dist/DecisionTree.d.ts.map +1 -0
- package/dist/DecisionTree.js +125 -0
- package/dist/DecisionTree.js.map +1 -0
- package/dist/GOAP.d.ts +51 -0
- package/dist/GOAP.d.ts.map +1 -0
- package/dist/GOAP.js +105 -0
- package/dist/GOAP.js.map +1 -0
- package/dist/HTN.d.ts +58 -0
- package/dist/HTN.d.ts.map +1 -0
- package/dist/HTN.js +115 -0
- package/dist/HTN.js.map +1 -0
- package/dist/LearningAgentFixtures.d.ts +60 -0
- package/dist/LearningAgentFixtures.d.ts.map +1 -0
- package/dist/LearningAgentFixtures.js +122 -0
- package/dist/LearningAgentFixtures.js.map +1 -0
- package/dist/NetworkReplicationFixtures.d.ts +82 -0
- package/dist/NetworkReplicationFixtures.d.ts.map +1 -0
- package/dist/NetworkReplicationFixtures.js +330 -0
- package/dist/NetworkReplicationFixtures.js.map +1 -0
- package/dist/Perception.d.ts +58 -0
- package/dist/Perception.d.ts.map +1 -0
- package/dist/Perception.js +111 -0
- package/dist/Perception.js.map +1 -0
- package/dist/PlayerBehaviorTelemetryFixtures.d.ts +74 -0
- package/dist/PlayerBehaviorTelemetryFixtures.d.ts.map +1 -0
- package/dist/PlayerBehaviorTelemetryFixtures.js +189 -0
- package/dist/PlayerBehaviorTelemetryFixtures.js.map +1 -0
- package/dist/ProceduralContentAdaptationFixtures.d.ts +52 -0
- package/dist/ProceduralContentAdaptationFixtures.d.ts.map +1 -0
- package/dist/ProceduralContentAdaptationFixtures.js +149 -0
- package/dist/ProceduralContentAdaptationFixtures.js.map +1 -0
- package/dist/ScriptContext.d.ts +18 -0
- package/dist/ScriptContext.d.ts.map +1 -0
- package/dist/ScriptContext.js +21 -0
- package/dist/ScriptContext.js.map +1 -0
- package/dist/StateMachine.d.ts +52 -0
- package/dist/StateMachine.d.ts.map +1 -0
- package/dist/StateMachine.js +117 -0
- package/dist/StateMachine.js.map +1 -0
- package/dist/UtilityAI.d.ts +55 -0
- package/dist/UtilityAI.d.ts.map +1 -0
- package/dist/UtilityAI.js +113 -0
- package/dist/UtilityAI.js.map +1 -0
- package/dist/VisualGraph.d.ts +20 -0
- package/dist/VisualGraph.d.ts.map +1 -0
- package/dist/VisualGraph.js +191 -0
- package/dist/VisualGraph.js.map +1 -0
- package/dist/VisualGraphContext.d.ts +123 -0
- package/dist/VisualGraphContext.d.ts.map +1 -0
- package/dist/VisualGraphContext.js +2 -0
- package/dist/VisualGraphContext.js.map +1 -0
- package/dist/VisualGraphExecutor.d.ts +16 -0
- package/dist/VisualGraphExecutor.d.ts.map +1 -0
- package/dist/VisualGraphExecutor.js +571 -0
- package/dist/VisualGraphExecutor.js.map +1 -0
- package/dist/VisualNode.d.ts +17 -0
- package/dist/VisualNode.d.ts.map +1 -0
- package/dist/VisualNode.js +24 -0
- package/dist/VisualNode.js.map +1 -0
- package/dist/VisualNodeCatalog.d.ts +14 -0
- package/dist/VisualNodeCatalog.d.ts.map +1 -0
- package/dist/VisualNodeCatalog.js +142 -0
- package/dist/VisualNodeCatalog.js.map +1 -0
- package/dist/WeaponSystem.d.ts +228 -0
- package/dist/WeaponSystem.d.ts.map +1 -0
- package/dist/WeaponSystem.js +530 -0
- package/dist/WeaponSystem.js.map +1 -0
- package/dist/index.d.ts +51 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/package.json +13 -0
- package/src/AdaptiveDifficultyFixtures.ts +324 -0
- package/src/AnalyticsPrivacyFixtures.ts +182 -0
- package/src/Behavior.ts +11 -0
- package/src/BehaviorHost.ts +51 -0
- package/src/BehaviorRegistry.ts +22 -0
- package/src/BehaviorSystem.ts +103 -0
- package/src/BehaviorTree.ts +234 -0
- package/src/CloudServiceFixtures.ts +225 -0
- package/src/CulturalBehaviorFixtures.ts +262 -0
- package/src/DecisionTree.ts +162 -0
- package/src/GOAP.ts +150 -0
- package/src/HTN.ts +178 -0
- package/src/LearningAgentFixtures.ts +184 -0
- package/src/NetworkReplicationFixtures.ts +440 -0
- package/src/Perception.ts +163 -0
- package/src/PlayerBehaviorTelemetryFixtures.ts +257 -0
- package/src/ProceduralContentAdaptationFixtures.ts +205 -0
- package/src/ScriptContext.ts +34 -0
- package/src/StateMachine.ts +138 -0
- package/src/UtilityAI.ts +158 -0
- package/src/VisualGraph.ts +236 -0
- package/src/VisualGraphContext.ts +138 -0
- package/src/VisualGraphExecutor.ts +663 -0
- package/src/VisualNode.ts +44 -0
- package/src/VisualNodeCatalog.ts +195 -0
- package/src/WeaponSystem.ts +793 -0
- package/src/index.ts +175 -0
- package/tests/scripting.test.ts +229 -0
- package/tsconfig.json +7 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CloudServiceFixtures.js","sourceRoot":"","sources":["../../../../packages/scripting/src/CloudServiceFixtures.ts"],"names":[],"mappings":"AA+EA,MAAM,UAAU,yBAAyB,CAAC,UAAsC,EAAE;IAChF,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,QAAQ,IAAI,gCAAgC,CAAC,CAAC;IACzF,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,IAAI,MAAM,EAAE,OAAO,CAAC,CAAC;IAChE,MAAM,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC,cAAc,IAAI,GAAG,EAAE,gBAAgB,CAAC,CAAC;IACxF,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC;IAChD,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,CAAU,CAAC,CAAC;IACvF,MAAM,eAAe,GAAG,MAAM,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACrF,MAAM,eAAe,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC;IACjF,MAAM,iBAAiB,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG;QACnB,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE;QAC5C,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,EAAE;QACtE,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,cAAc,CAAC,EAAE;KAClG,CAAC;IACX,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACtH,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACtG,EAAE,EAAE,WAAW,CAAC,EAAE;QAClB,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;KAClD,CAAC,CAAC,CAAC;IACJ,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,eAAe,GAAG;QACtB,UAAU,CAAC,mBAAmB,IAAI,QAAQ,CAAC;QAC3C,UAAU,CAAC,mBAAmB,IAAI,OAAO,CAAC;QAC1C,UAAU,CAAC,mBAAmB,IAAI,SAAS,CAAC;KACpC,CAAC;IACX,MAAM,MAAM,GAA8B,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC;IACnF,MAAM,OAAO,GAAsC;QACjD,MAAM,EAAE,sCAAsC;QAC9C,QAAQ,EAAE;YACR,cAAc,EAAE;gBACd,QAAQ,EAAE,OAAO;gBACjB,aAAa,EAAE,KAAK;gBACpB,aAAa,EAAE,SAAS,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;gBAC1D,WAAW,EAAE,KAAK;gBAClB,MAAM;aACP;YACD,SAAS,EAAE;gBACT,MAAM,EAAE,kBAAkB;gBAC1B,OAAO;gBACP,QAAQ,EAAE,iBAAiB;gBAC3B,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClC,kBAAkB,EAAE,iBAAiB;gBACrC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;aAC1C;YACD,YAAY,EAAE;gBACZ,QAAQ;gBACR,UAAU;gBACV,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;gBACtI,MAAM;aACP;YACD,WAAW,EAAE;gBACX,EAAE,EAAE,eAAe;gBACnB,KAAK;gBACL,IAAI;gBACJ,SAAS,EAAE,QAAQ;gBACnB,aAAa,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC5D,MAAM;aACP;YACD,YAAY,EAAE;gBACZ,SAAS,EAAE,IAAI;gBACf,WAAW;gBACX,cAAc,EAAE,CAAC;gBACjB,eAAe;gBACf,eAAe;gBACf,MAAM;aACP;YACD,WAAW,EAAE;gBACX,KAAK,EAAE,gBAAgB;gBACvB,MAAM,EAAE,OAAO;gBACf,QAAQ,EAAE,UAAU,UAAU,CAAC,GAAG,QAAQ,IAAI,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;gBACpE,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC;gBACpE,cAAc,EAAE,CAAC;gBACjB,MAAM,EAAE,iBAAiB;aAC1B;YACD,eAAe,EAAE;gBACf,UAAU,EAAE,iBAAiB;gBAC7B,UAAU,EAAE,eAAe,CAAC,MAAM;gBAClC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;gBACzF,eAAe;gBACf,MAAM;aACP;SACF;QACD,mBAAmB,EAAE;YACnB,qBAAqB,EAAE,IAAI;YAC3B,qBAAqB,EAAE,IAAI;YAC3B,qBAAqB,EAAE,IAAI;YAC3B,oBAAoB,EAAE,IAAI;YAC1B,oBAAoB,EAAE,IAAI;YAC1B,wBAAwB,EAAE,IAAI;SAC/B;QACD,aAAa,EAAE;YACb,mCAAmC;YACnC,2CAA2C;YAC3C,oCAAoC;YACpC,sCAAsC;YACtC,8BAA8B;YAC9B,+BAA+B;YAC/B,2CAA2C;SAC5C;QACD,aAAa,EAAE,4RAA4R;KAC5S,CAAC;IACF,OAAO;QACL,GAAG,OAAO;QACV,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;KAC1C,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACjG,OAAO,IAAI,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB;IACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACzE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,eAAe,CAAC,KAAa,EAAE,IAAY;IAClD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,8BAA8B,CAAC,CAAC;IACnG,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAI,IAAY,EAAE,MAAoB;IACzD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAM,CAAC;AAChG,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC;IACvB,KAAK,IAAI,KAAK,IAAI,EAAE,CAAC;IACrB,KAAK,IAAI,KAAK,KAAK,EAAE,CAAC;IACtB,KAAK,IAAI,KAAK,IAAI,CAAC,CAAC;IACpB,OAAO,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC;AACpC,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,IAAI,GAAG,UAAU,CAAC;IACtB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
export type CulturalCommunicationStyle = "direct" | "balanced" | "indirect";
|
|
2
|
+
export type CulturalPersonalSpace = "close" | "medium" | "distant";
|
|
3
|
+
export type CulturalRelationship = "stranger" | "acquaintance" | "friend" | "family" | "superior" | "subordinate";
|
|
4
|
+
export type ProxemicZone = "intimate" | "personal" | "social" | "public";
|
|
5
|
+
export interface CulturalBehaviorFixtureOptions {
|
|
6
|
+
readonly seed?: number;
|
|
7
|
+
readonly relationship?: CulturalRelationship;
|
|
8
|
+
readonly initiatorPosition?: readonly [number, number, number];
|
|
9
|
+
readonly targetPosition?: readonly [number, number, number];
|
|
10
|
+
readonly message?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface CultureDescriptor {
|
|
13
|
+
readonly id: string;
|
|
14
|
+
readonly name: string;
|
|
15
|
+
readonly individualismScore: number;
|
|
16
|
+
readonly powerDistanceScore: number;
|
|
17
|
+
readonly uncertaintyAvoidanceScore: number;
|
|
18
|
+
readonly communicationStyle: CulturalCommunicationStyle;
|
|
19
|
+
readonly personalSpacePreference: CulturalPersonalSpace;
|
|
20
|
+
readonly eyeContactNorm: "low" | "moderate" | "high";
|
|
21
|
+
readonly greetingStyle: "formal" | "casual" | "bow" | "handshake";
|
|
22
|
+
}
|
|
23
|
+
export interface CulturalEntityFixture {
|
|
24
|
+
readonly id: string;
|
|
25
|
+
readonly cultureId: string;
|
|
26
|
+
readonly position: readonly [number, number, number];
|
|
27
|
+
readonly personalityVariance: number;
|
|
28
|
+
}
|
|
29
|
+
export interface CulturalBehaviorFixture {
|
|
30
|
+
readonly source: "origin-master-cultural-ai-adapted";
|
|
31
|
+
readonly cultures: readonly CultureDescriptor[];
|
|
32
|
+
readonly entities: readonly CulturalEntityFixture[];
|
|
33
|
+
readonly proxemics: {
|
|
34
|
+
readonly relationship: CulturalRelationship;
|
|
35
|
+
readonly distanceMeters: number;
|
|
36
|
+
readonly acceptableDistanceMeters: number;
|
|
37
|
+
readonly zone: ProxemicZone;
|
|
38
|
+
readonly comfort: number;
|
|
39
|
+
readonly approachAllowed: boolean;
|
|
40
|
+
};
|
|
41
|
+
readonly communication: {
|
|
42
|
+
readonly input: string;
|
|
43
|
+
readonly formatted: string;
|
|
44
|
+
readonly directness: CulturalCommunicationStyle;
|
|
45
|
+
readonly formality: "formal" | "neutral" | "informal";
|
|
46
|
+
readonly audienceAdapted: boolean;
|
|
47
|
+
};
|
|
48
|
+
readonly socialNorms: {
|
|
49
|
+
readonly greetingExpected: string;
|
|
50
|
+
readonly eyeContactExpected: string;
|
|
51
|
+
readonly hierarchyAware: boolean;
|
|
52
|
+
readonly normViolations: readonly string[];
|
|
53
|
+
};
|
|
54
|
+
readonly gesture: {
|
|
55
|
+
readonly id: string;
|
|
56
|
+
readonly allowed: boolean;
|
|
57
|
+
readonly intensity: number;
|
|
58
|
+
};
|
|
59
|
+
readonly decision: {
|
|
60
|
+
readonly selectedAction: "approach" | "wait" | "request-distance" | "formal-greeting";
|
|
61
|
+
readonly score: number;
|
|
62
|
+
readonly reason: string;
|
|
63
|
+
};
|
|
64
|
+
readonly productionReadiness: {
|
|
65
|
+
readonly proxemicTelemetry: true;
|
|
66
|
+
readonly communicationStyleTelemetry: true;
|
|
67
|
+
readonly socialNormTelemetry: true;
|
|
68
|
+
readonly gestureBoundaryTelemetry: true;
|
|
69
|
+
};
|
|
70
|
+
readonly blockedClaims: readonly string[];
|
|
71
|
+
readonly claimBoundary: string;
|
|
72
|
+
readonly hash: string;
|
|
73
|
+
}
|
|
74
|
+
export declare function sampleCulturalBehaviorFixture(options?: CulturalBehaviorFixtureOptions): CulturalBehaviorFixture;
|
|
75
|
+
//# sourceMappingURL=CulturalBehaviorFixtures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CulturalBehaviorFixtures.d.ts","sourceRoot":"","sources":["../../../../packages/scripting/src/CulturalBehaviorFixtures.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
const collectivistCulture = {
|
|
2
|
+
id: "collective-formal",
|
|
3
|
+
name: "Collective Formal Fixture",
|
|
4
|
+
individualismScore: 0.28,
|
|
5
|
+
powerDistanceScore: 0.68,
|
|
6
|
+
uncertaintyAvoidanceScore: 0.74,
|
|
7
|
+
communicationStyle: "indirect",
|
|
8
|
+
personalSpacePreference: "distant",
|
|
9
|
+
eyeContactNorm: "moderate",
|
|
10
|
+
greetingStyle: "formal"
|
|
11
|
+
};
|
|
12
|
+
const directCulture = {
|
|
13
|
+
id: "direct-pragmatic",
|
|
14
|
+
name: "Direct Pragmatic Fixture",
|
|
15
|
+
individualismScore: 0.72,
|
|
16
|
+
powerDistanceScore: 0.36,
|
|
17
|
+
uncertaintyAvoidanceScore: 0.42,
|
|
18
|
+
communicationStyle: "direct",
|
|
19
|
+
personalSpacePreference: "medium",
|
|
20
|
+
eyeContactNorm: "high",
|
|
21
|
+
greetingStyle: "handshake"
|
|
22
|
+
};
|
|
23
|
+
export function sampleCulturalBehaviorFixture(options = {}) {
|
|
24
|
+
const seed = normalizeSeed(options.seed ?? 0xc017);
|
|
25
|
+
const relationship = options.relationship ?? "superior";
|
|
26
|
+
const initiatorPosition = options.initiatorPosition ?? [0, 0, 0];
|
|
27
|
+
const targetPosition = options.targetPosition ?? [0.82, 0, 0.34];
|
|
28
|
+
const initiator = {
|
|
29
|
+
id: "npc-diplomat",
|
|
30
|
+
cultureId: collectivistCulture.id,
|
|
31
|
+
position: initiatorPosition,
|
|
32
|
+
personalityVariance: Number((0.08 + seededUnit(seed) * 0.08).toFixed(3))
|
|
33
|
+
};
|
|
34
|
+
const target = {
|
|
35
|
+
id: "player-envoy",
|
|
36
|
+
cultureId: directCulture.id,
|
|
37
|
+
position: targetPosition,
|
|
38
|
+
personalityVariance: Number((0.1 + seededUnit(seed ^ 0x9e37) * 0.06).toFixed(3))
|
|
39
|
+
};
|
|
40
|
+
const distanceMeters = distance(initiator.position, target.position);
|
|
41
|
+
const acceptableDistanceMeters = acceptableDistance(collectivistCulture, relationship);
|
|
42
|
+
const comfort = comfortLevel(distanceMeters, acceptableDistanceMeters);
|
|
43
|
+
const approachAllowed = distanceMeters >= acceptableDistanceMeters * 0.7;
|
|
44
|
+
const formality = determineFormality(collectivistCulture, directCulture, relationship);
|
|
45
|
+
const input = options.message ?? "Could you help me with the gate plan?";
|
|
46
|
+
const formatted = formatMessage(input, collectivistCulture, directCulture, relationship, formality);
|
|
47
|
+
const normViolations = [
|
|
48
|
+
...(approachAllowed ? [] : ["personal-space-too-close"]),
|
|
49
|
+
...(relationship === "superior" && !formatted.toLowerCase().startsWith("please") ? ["missing-hierarchy-marker"] : [])
|
|
50
|
+
];
|
|
51
|
+
const selectedAction = !approachAllowed
|
|
52
|
+
? "request-distance"
|
|
53
|
+
: formality === "formal"
|
|
54
|
+
? "formal-greeting"
|
|
55
|
+
: "approach";
|
|
56
|
+
const core = {
|
|
57
|
+
relationship,
|
|
58
|
+
distanceMeters,
|
|
59
|
+
acceptableDistanceMeters,
|
|
60
|
+
comfort,
|
|
61
|
+
selectedAction,
|
|
62
|
+
formatted
|
|
63
|
+
};
|
|
64
|
+
return {
|
|
65
|
+
source: "origin-master-cultural-ai-adapted",
|
|
66
|
+
cultures: [collectivistCulture, directCulture],
|
|
67
|
+
entities: [initiator, target],
|
|
68
|
+
proxemics: {
|
|
69
|
+
relationship,
|
|
70
|
+
distanceMeters,
|
|
71
|
+
acceptableDistanceMeters,
|
|
72
|
+
zone: zoneForDistance(distanceMeters),
|
|
73
|
+
comfort,
|
|
74
|
+
approachAllowed
|
|
75
|
+
},
|
|
76
|
+
communication: {
|
|
77
|
+
input,
|
|
78
|
+
formatted,
|
|
79
|
+
directness: collectivistCulture.communicationStyle,
|
|
80
|
+
formality,
|
|
81
|
+
audienceAdapted: formatted !== input
|
|
82
|
+
},
|
|
83
|
+
socialNorms: {
|
|
84
|
+
greetingExpected: collectivistCulture.greetingStyle,
|
|
85
|
+
eyeContactExpected: collectivistCulture.eyeContactNorm,
|
|
86
|
+
hierarchyAware: relationship === "superior" || relationship === "subordinate",
|
|
87
|
+
normViolations
|
|
88
|
+
},
|
|
89
|
+
gesture: {
|
|
90
|
+
id: collectivistCulture.greetingStyle === "bow" ? "bow" : "measured-handshake",
|
|
91
|
+
allowed: comfort >= 0.35,
|
|
92
|
+
intensity: Number((0.42 + comfort * 0.38).toFixed(3))
|
|
93
|
+
},
|
|
94
|
+
decision: {
|
|
95
|
+
selectedAction,
|
|
96
|
+
score: Number(((approachAllowed ? 0.52 : 0.18) + comfort * 0.36 + (formality === "formal" ? 0.08 : 0)).toFixed(3)),
|
|
97
|
+
reason: normViolations.length > 0 ? normViolations.join(",") : "proxemics-and-formality-within-bounds"
|
|
98
|
+
},
|
|
99
|
+
productionReadiness: {
|
|
100
|
+
proxemicTelemetry: true,
|
|
101
|
+
communicationStyleTelemetry: true,
|
|
102
|
+
socialNormTelemetry: true,
|
|
103
|
+
gestureBoundaryTelemetry: true
|
|
104
|
+
},
|
|
105
|
+
blockedClaims: [
|
|
106
|
+
"real cultural modeling certification",
|
|
107
|
+
"LLM-driven NPC dialogue parity",
|
|
108
|
+
"Unity Behavior Designer or ML-Agents social AI parity",
|
|
109
|
+
"Unreal MassAI/SmartObject social simulation parity",
|
|
110
|
+
"human-subject validated intercultural behavior"
|
|
111
|
+
],
|
|
112
|
+
claimBoundary: "This fixture ports old cultural AI concepts into deterministic proxemics, communication-style, social-norm, gesture, and decision telemetry for runtime evidence. It does not claim validated cultural modeling, generated NPC dialogue, or Unity/Unreal social-AI parity.",
|
|
113
|
+
hash: stableHash(JSON.stringify(core))
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
function acceptableDistance(culture, relationship) {
|
|
117
|
+
const base = relationship === "family" ? 0.3 : relationship === "friend" ? 0.6 : relationship === "acquaintance" ? 1.0 : relationship === "superior" || relationship === "subordinate" ? 1.25 : 1.5;
|
|
118
|
+
const space = culture.personalSpacePreference === "close" ? 0.7 : culture.personalSpacePreference === "distant" ? 1.4 : 1;
|
|
119
|
+
const individualism = 1 - culture.individualismScore * 0.2;
|
|
120
|
+
const hierarchy = 1 + culture.powerDistanceScore * 0.15;
|
|
121
|
+
return Number((base * space * individualism * hierarchy).toFixed(3));
|
|
122
|
+
}
|
|
123
|
+
function formatMessage(message, speaker, audience, relationship, formality) {
|
|
124
|
+
let formatted = message.trim();
|
|
125
|
+
const indirect = speaker.communicationStyle === "indirect" || audience.communicationStyle === "indirect";
|
|
126
|
+
if (indirect && !/\b(could|would|might)\b/i.test(formatted)) {
|
|
127
|
+
formatted = `I was wondering if you might ${formatted.charAt(0).toLowerCase()}${formatted.slice(1)}`;
|
|
128
|
+
}
|
|
129
|
+
if (formality === "formal") {
|
|
130
|
+
formatted = formatted.replace(/\bhey\b/gi, "Hello").replace(/\byeah\b/gi, "yes").replace(/\bgonna\b/gi, "going to");
|
|
131
|
+
}
|
|
132
|
+
if (relationship === "superior" && !formatted.toLowerCase().startsWith("please")) {
|
|
133
|
+
formatted = `Please, ${formatted.charAt(0).toLowerCase()}${formatted.slice(1)}`;
|
|
134
|
+
}
|
|
135
|
+
return formatted;
|
|
136
|
+
}
|
|
137
|
+
function determineFormality(speaker, audience, relationship) {
|
|
138
|
+
if (relationship === "superior" || speaker.powerDistanceScore > 0.6 || audience.powerDistanceScore > 0.6)
|
|
139
|
+
return "formal";
|
|
140
|
+
if (relationship === "friend" || relationship === "family")
|
|
141
|
+
return "informal";
|
|
142
|
+
return "neutral";
|
|
143
|
+
}
|
|
144
|
+
function zoneForDistance(distanceMeters) {
|
|
145
|
+
if (distanceMeters < 0.45)
|
|
146
|
+
return "intimate";
|
|
147
|
+
if (distanceMeters < 1.2)
|
|
148
|
+
return "personal";
|
|
149
|
+
if (distanceMeters < 3.6)
|
|
150
|
+
return "social";
|
|
151
|
+
return "public";
|
|
152
|
+
}
|
|
153
|
+
function comfortLevel(distanceMeters, acceptableDistanceMeters) {
|
|
154
|
+
const deviation = Math.abs(distanceMeters - acceptableDistanceMeters);
|
|
155
|
+
return Number(Math.max(0, 1 - deviation / Math.max(0.001, acceptableDistanceMeters * 0.5)).toFixed(3));
|
|
156
|
+
}
|
|
157
|
+
function distance(left, right) {
|
|
158
|
+
return Number(Math.hypot(left[0] - right[0], left[1] - right[1], left[2] - right[2]).toFixed(3));
|
|
159
|
+
}
|
|
160
|
+
function normalizeSeed(seed) {
|
|
161
|
+
if (!Number.isInteger(seed) || seed < 0)
|
|
162
|
+
throw new Error("seed must be a non-negative integer.");
|
|
163
|
+
return seed >>> 0;
|
|
164
|
+
}
|
|
165
|
+
function seededUnit(seed) {
|
|
166
|
+
let value = seed >>> 0;
|
|
167
|
+
value ^= value << 13;
|
|
168
|
+
value ^= value >>> 17;
|
|
169
|
+
value ^= value << 5;
|
|
170
|
+
return (value >>> 0) / 0xffffffff;
|
|
171
|
+
}
|
|
172
|
+
function stableHash(value) {
|
|
173
|
+
let hash = 2166136261;
|
|
174
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
175
|
+
hash ^= value.charCodeAt(index);
|
|
176
|
+
hash = Math.imul(hash, 16777619);
|
|
177
|
+
}
|
|
178
|
+
return (hash >>> 0).toString(16).padStart(8, "0");
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=CulturalBehaviorFixtures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CulturalBehaviorFixtures.js","sourceRoot":"","sources":["../../../../packages/scripting/src/CulturalBehaviorFixtures.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export type DecisionTreeNodeType = "decision" | "action";
|
|
2
|
+
export interface DecisionTreeContext {
|
|
3
|
+
readonly values?: Record<string, number | boolean | string | undefined>;
|
|
4
|
+
}
|
|
5
|
+
export interface DecisionTreeStats {
|
|
6
|
+
readonly totalNodes: number;
|
|
7
|
+
readonly decisionNodes: number;
|
|
8
|
+
readonly actionNodes: number;
|
|
9
|
+
readonly maxDepth: number;
|
|
10
|
+
readonly averageActionDepth: number;
|
|
11
|
+
}
|
|
12
|
+
export interface DecisionTreeDecision {
|
|
13
|
+
readonly action: string;
|
|
14
|
+
readonly path: readonly string[];
|
|
15
|
+
readonly executed: boolean;
|
|
16
|
+
}
|
|
17
|
+
export type DecisionCondition = (context: DecisionTreeContext) => boolean;
|
|
18
|
+
export type DecisionAction = (context: DecisionTreeContext) => void;
|
|
19
|
+
export interface DecisionTreeNode {
|
|
20
|
+
readonly type: DecisionTreeNodeType;
|
|
21
|
+
readonly name: string;
|
|
22
|
+
condition?: DecisionCondition;
|
|
23
|
+
action?: DecisionAction;
|
|
24
|
+
trueBranch?: DecisionTreeNode;
|
|
25
|
+
falseBranch?: DecisionTreeNode;
|
|
26
|
+
parent?: DecisionTreeNode;
|
|
27
|
+
}
|
|
28
|
+
export declare class DecisionTree {
|
|
29
|
+
private root;
|
|
30
|
+
createDecision(name: string, condition: DecisionCondition): DecisionTreeNode;
|
|
31
|
+
createAction(name: string, action?: DecisionAction): DecisionTreeNode;
|
|
32
|
+
setBranches(node: DecisionTreeNode, trueBranch: DecisionTreeNode, falseBranch: DecisionTreeNode): void;
|
|
33
|
+
setRoot(node: DecisionTreeNode): void;
|
|
34
|
+
getRoot(): DecisionTreeNode | undefined;
|
|
35
|
+
decide(context: DecisionTreeContext, maxDepth?: number): DecisionTreeDecision;
|
|
36
|
+
traverse(context: DecisionTreeContext, maxDepth?: number): DecisionTreeNode | undefined;
|
|
37
|
+
getTraversalPath(context: DecisionTreeContext, maxDepth?: number): readonly string[];
|
|
38
|
+
validate(): boolean;
|
|
39
|
+
getStats(): DecisionTreeStats;
|
|
40
|
+
clone(): DecisionTree;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=DecisionTree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DecisionTree.d.ts","sourceRoot":"","sources":["../../../../packages/scripting/src/DecisionTree.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEzD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;CACzE;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC;AAC1E,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAC;AAEpE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,IAAI,CAA+B;IAE3C,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,GAAG,gBAAgB;IAK5E,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,cAAgC,GAAG,gBAAgB;IAKtF,WAAW,CAAC,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,gBAAgB,GAAG,IAAI;IAQtG,OAAO,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAIrC,OAAO,IAAI,gBAAgB,GAAG,SAAS;IAIvC,MAAM,CAAC,OAAO,EAAE,mBAAmB,EAAE,QAAQ,SAAK,GAAG,oBAAoB;IAOzE,QAAQ,CAAC,OAAO,EAAE,mBAAmB,EAAE,QAAQ,SAAK,GAAG,gBAAgB,GAAG,SAAS;IAanF,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,EAAE,QAAQ,SAAK,GAAG,SAAS,MAAM,EAAE;IAehF,QAAQ,IAAI,OAAO;IAInB,QAAQ,IAAI,iBAAiB;IAiB7B,KAAK,IAAI,YAAY;CAKtB"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
export class DecisionTree {
|
|
2
|
+
root;
|
|
3
|
+
createDecision(name, condition) {
|
|
4
|
+
assertName(name);
|
|
5
|
+
return { type: "decision", name, condition };
|
|
6
|
+
}
|
|
7
|
+
createAction(name, action = () => undefined) {
|
|
8
|
+
assertName(name);
|
|
9
|
+
return { type: "action", name, action };
|
|
10
|
+
}
|
|
11
|
+
setBranches(node, trueBranch, falseBranch) {
|
|
12
|
+
if (node.type !== "decision")
|
|
13
|
+
throw new Error(`Cannot set branches on action node: ${node.name}`);
|
|
14
|
+
node.trueBranch = trueBranch;
|
|
15
|
+
node.falseBranch = falseBranch;
|
|
16
|
+
trueBranch.parent = node;
|
|
17
|
+
falseBranch.parent = node;
|
|
18
|
+
}
|
|
19
|
+
setRoot(node) {
|
|
20
|
+
this.root = node;
|
|
21
|
+
}
|
|
22
|
+
getRoot() {
|
|
23
|
+
return this.root;
|
|
24
|
+
}
|
|
25
|
+
decide(context, maxDepth = 32) {
|
|
26
|
+
const action = this.traverse(context, maxDepth);
|
|
27
|
+
if (!action?.action)
|
|
28
|
+
return { action: "none", path: this.getTraversalPath(context, maxDepth), executed: false };
|
|
29
|
+
action.action(context);
|
|
30
|
+
return { action: action.name, path: this.getTraversalPath(context, maxDepth), executed: true };
|
|
31
|
+
}
|
|
32
|
+
traverse(context, maxDepth = 32) {
|
|
33
|
+
if (!this.root || maxDepth < 1)
|
|
34
|
+
return undefined;
|
|
35
|
+
let current = this.root;
|
|
36
|
+
let depth = 0;
|
|
37
|
+
while (current && depth < maxDepth) {
|
|
38
|
+
depth += 1;
|
|
39
|
+
if (current.type === "action")
|
|
40
|
+
return current;
|
|
41
|
+
if (!current.condition)
|
|
42
|
+
return undefined;
|
|
43
|
+
current = current.condition(context) ? current.trueBranch : current.falseBranch;
|
|
44
|
+
}
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
getTraversalPath(context, maxDepth = 32) {
|
|
48
|
+
if (!this.root || maxDepth < 1)
|
|
49
|
+
return [];
|
|
50
|
+
const path = [];
|
|
51
|
+
let current = this.root;
|
|
52
|
+
let depth = 0;
|
|
53
|
+
while (current && depth < maxDepth) {
|
|
54
|
+
depth += 1;
|
|
55
|
+
path.push(current.name);
|
|
56
|
+
if (current.type === "action")
|
|
57
|
+
break;
|
|
58
|
+
if (!current.condition)
|
|
59
|
+
break;
|
|
60
|
+
current = current.condition(context) ? current.trueBranch : current.falseBranch;
|
|
61
|
+
}
|
|
62
|
+
return path;
|
|
63
|
+
}
|
|
64
|
+
validate() {
|
|
65
|
+
return this.root ? validateNode(this.root) : false;
|
|
66
|
+
}
|
|
67
|
+
getStats() {
|
|
68
|
+
if (!this.root)
|
|
69
|
+
return { totalNodes: 0, decisionNodes: 0, actionNodes: 0, maxDepth: 0, averageActionDepth: 0 };
|
|
70
|
+
const stats = { totalNodes: 0, decisionNodes: 0, actionNodes: 0, actionDepths: [] };
|
|
71
|
+
collectStats(this.root, 0, stats);
|
|
72
|
+
const maxDepth = stats.actionDepths.length > 0 ? Math.max(...stats.actionDepths) : 0;
|
|
73
|
+
const averageActionDepth = stats.actionDepths.length > 0
|
|
74
|
+
? stats.actionDepths.reduce((sum, depth) => sum + depth, 0) / stats.actionDepths.length
|
|
75
|
+
: 0;
|
|
76
|
+
return {
|
|
77
|
+
totalNodes: stats.totalNodes,
|
|
78
|
+
decisionNodes: stats.decisionNodes,
|
|
79
|
+
actionNodes: stats.actionNodes,
|
|
80
|
+
maxDepth,
|
|
81
|
+
averageActionDepth: Number(averageActionDepth.toFixed(3))
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
clone() {
|
|
85
|
+
const tree = new DecisionTree();
|
|
86
|
+
if (this.root)
|
|
87
|
+
tree.setRoot(cloneNode(this.root));
|
|
88
|
+
return tree;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function validateNode(node) {
|
|
92
|
+
if (node.type === "action")
|
|
93
|
+
return typeof node.action === "function";
|
|
94
|
+
return typeof node.condition === "function" && Boolean(node.trueBranch) && Boolean(node.falseBranch) && validateNode(node.trueBranch) && validateNode(node.falseBranch);
|
|
95
|
+
}
|
|
96
|
+
function collectStats(node, depth, stats) {
|
|
97
|
+
stats.totalNodes += 1;
|
|
98
|
+
if (node.type === "action") {
|
|
99
|
+
stats.actionNodes += 1;
|
|
100
|
+
stats.actionDepths.push(depth);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
stats.decisionNodes += 1;
|
|
104
|
+
if (node.trueBranch)
|
|
105
|
+
collectStats(node.trueBranch, depth + 1, stats);
|
|
106
|
+
if (node.falseBranch)
|
|
107
|
+
collectStats(node.falseBranch, depth + 1, stats);
|
|
108
|
+
}
|
|
109
|
+
function cloneNode(node) {
|
|
110
|
+
const cloned = { type: node.type, name: node.name, condition: node.condition, action: node.action };
|
|
111
|
+
if (node.trueBranch) {
|
|
112
|
+
cloned.trueBranch = cloneNode(node.trueBranch);
|
|
113
|
+
cloned.trueBranch.parent = cloned;
|
|
114
|
+
}
|
|
115
|
+
if (node.falseBranch) {
|
|
116
|
+
cloned.falseBranch = cloneNode(node.falseBranch);
|
|
117
|
+
cloned.falseBranch.parent = cloned;
|
|
118
|
+
}
|
|
119
|
+
return cloned;
|
|
120
|
+
}
|
|
121
|
+
function assertName(name) {
|
|
122
|
+
if (name.trim().length === 0)
|
|
123
|
+
throw new Error("Decision tree node name cannot be empty.");
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=DecisionTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DecisionTree.js","sourceRoot":"","sources":["../../../../packages/scripting/src/DecisionTree.ts"],"names":[],"mappings":"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"}
|
package/dist/GOAP.d.ts
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export type GOAPValue = string | number | boolean | null;
|
|
2
|
+
export type GOAPStateShape = Record<string, GOAPValue>;
|
|
3
|
+
export interface GOAPActionOptions {
|
|
4
|
+
readonly name: string;
|
|
5
|
+
readonly cost?: number;
|
|
6
|
+
readonly preconditions?: GOAPStateShape;
|
|
7
|
+
readonly effects: GOAPStateShape;
|
|
8
|
+
readonly enabled?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface GOAPPlannerOptions {
|
|
11
|
+
readonly maxIterations?: number;
|
|
12
|
+
readonly maxPlanLength?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface GOAPPlan {
|
|
15
|
+
readonly valid: boolean;
|
|
16
|
+
readonly actions: readonly string[];
|
|
17
|
+
readonly cost: number;
|
|
18
|
+
readonly nodesExplored: number;
|
|
19
|
+
readonly finalState: GOAPStateShape;
|
|
20
|
+
}
|
|
21
|
+
export declare class WorldState {
|
|
22
|
+
private readonly values;
|
|
23
|
+
constructor(initial?: GOAPStateShape);
|
|
24
|
+
static from(initial: GOAPStateShape): WorldState;
|
|
25
|
+
set(key: string, value: GOAPValue): void;
|
|
26
|
+
get(key: string): GOAPValue | undefined;
|
|
27
|
+
satisfies(goal: WorldState): boolean;
|
|
28
|
+
matches(shape: GOAPStateShape): boolean;
|
|
29
|
+
apply(shape: GOAPStateShape): WorldState;
|
|
30
|
+
clone(): WorldState;
|
|
31
|
+
entries(): readonly (readonly [string, GOAPValue])[];
|
|
32
|
+
toObject(): GOAPStateShape;
|
|
33
|
+
key(): string;
|
|
34
|
+
}
|
|
35
|
+
export declare class GOAPAction {
|
|
36
|
+
readonly name: string;
|
|
37
|
+
readonly cost: number;
|
|
38
|
+
readonly preconditions: GOAPStateShape;
|
|
39
|
+
readonly effects: GOAPStateShape;
|
|
40
|
+
enabled: boolean;
|
|
41
|
+
constructor(options: GOAPActionOptions);
|
|
42
|
+
canRun(state: WorldState): boolean;
|
|
43
|
+
apply(state: WorldState): WorldState;
|
|
44
|
+
}
|
|
45
|
+
export declare class GOAPPlanner {
|
|
46
|
+
private readonly maxIterations;
|
|
47
|
+
private readonly maxPlanLength;
|
|
48
|
+
constructor(options?: GOAPPlannerOptions);
|
|
49
|
+
plan(current: WorldState, goal: WorldState, actions: readonly GOAPAction[]): GOAPPlan;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=GOAP.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GOAP.d.ts","sourceRoot":"","sources":["../../../../packages/scripting/src/GOAP.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AACzD,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAEvD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,CAAC,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC;CACrC;AAQD,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;gBAE3C,OAAO,GAAE,cAAmB;IAIxC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,UAAU;IAIhD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI;IAIxC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAIvC,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO;IAIpC,OAAO,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO;IAIvC,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU;IAMxC,KAAK,IAAI,UAAU;IAInB,OAAO,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE;IAIpD,QAAQ,IAAI,cAAc;IAI1B,GAAG,IAAI,MAAM;CAGd;AAED,qBAAa,UAAU;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,cAAc,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;gBAEL,OAAO,EAAE,iBAAiB;IAStC,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO;IAIlC,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU;CAGrC;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;gBAE3B,OAAO,GAAE,kBAAuB;IAK5C,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,UAAU,EAAE,GAAG,QAAQ;CA+BtF"}
|
package/dist/GOAP.js
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
export class WorldState {
|
|
2
|
+
values = new Map();
|
|
3
|
+
constructor(initial = {}) {
|
|
4
|
+
for (const [key, value] of Object.entries(initial))
|
|
5
|
+
this.values.set(key, value);
|
|
6
|
+
}
|
|
7
|
+
static from(initial) {
|
|
8
|
+
return new WorldState(initial);
|
|
9
|
+
}
|
|
10
|
+
set(key, value) {
|
|
11
|
+
this.values.set(key, value);
|
|
12
|
+
}
|
|
13
|
+
get(key) {
|
|
14
|
+
return this.values.get(key);
|
|
15
|
+
}
|
|
16
|
+
satisfies(goal) {
|
|
17
|
+
return goal.entries().every(([key, value]) => this.values.get(key) === value);
|
|
18
|
+
}
|
|
19
|
+
matches(shape) {
|
|
20
|
+
return Object.entries(shape).every(([key, value]) => this.values.get(key) === value);
|
|
21
|
+
}
|
|
22
|
+
apply(shape) {
|
|
23
|
+
const next = this.clone();
|
|
24
|
+
for (const [key, value] of Object.entries(shape))
|
|
25
|
+
next.set(key, value);
|
|
26
|
+
return next;
|
|
27
|
+
}
|
|
28
|
+
clone() {
|
|
29
|
+
return new WorldState(this.toObject());
|
|
30
|
+
}
|
|
31
|
+
entries() {
|
|
32
|
+
return [...this.values.entries()].sort(([left], [right]) => left.localeCompare(right));
|
|
33
|
+
}
|
|
34
|
+
toObject() {
|
|
35
|
+
return Object.fromEntries(this.entries());
|
|
36
|
+
}
|
|
37
|
+
key() {
|
|
38
|
+
return this.entries().map(([key, value]) => `${key}:${String(value)}`).join("|");
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export class GOAPAction {
|
|
42
|
+
name;
|
|
43
|
+
cost;
|
|
44
|
+
preconditions;
|
|
45
|
+
effects;
|
|
46
|
+
enabled;
|
|
47
|
+
constructor(options) {
|
|
48
|
+
this.name = options.name;
|
|
49
|
+
this.cost = options.cost ?? 1;
|
|
50
|
+
this.preconditions = options.preconditions ?? {};
|
|
51
|
+
this.effects = options.effects;
|
|
52
|
+
this.enabled = options.enabled ?? true;
|
|
53
|
+
if (!Number.isFinite(this.cost) || this.cost < 0)
|
|
54
|
+
throw new RangeError("GOAP action cost must be a finite non-negative number.");
|
|
55
|
+
}
|
|
56
|
+
canRun(state) {
|
|
57
|
+
return this.enabled && state.matches(this.preconditions);
|
|
58
|
+
}
|
|
59
|
+
apply(state) {
|
|
60
|
+
return state.apply(this.effects);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
export class GOAPPlanner {
|
|
64
|
+
maxIterations;
|
|
65
|
+
maxPlanLength;
|
|
66
|
+
constructor(options = {}) {
|
|
67
|
+
this.maxIterations = options.maxIterations ?? 128;
|
|
68
|
+
this.maxPlanLength = options.maxPlanLength ?? 8;
|
|
69
|
+
}
|
|
70
|
+
plan(current, goal, actions) {
|
|
71
|
+
if (current.satisfies(goal)) {
|
|
72
|
+
return { valid: true, actions: [], cost: 0, nodesExplored: 0, finalState: current.toObject() };
|
|
73
|
+
}
|
|
74
|
+
const enabledActions = actions.filter((action) => action.enabled).sort((left, right) => left.cost - right.cost || left.name.localeCompare(right.name));
|
|
75
|
+
const open = [{ state: current, actions: [], cost: 0 }];
|
|
76
|
+
const bestCostByState = new Map([[current.key(), 0]]);
|
|
77
|
+
let nodesExplored = 0;
|
|
78
|
+
while (open.length > 0 && nodesExplored < this.maxIterations) {
|
|
79
|
+
open.sort((left, right) => left.cost - right.cost || left.actions.join(",").localeCompare(right.actions.join(",")));
|
|
80
|
+
const node = open.shift();
|
|
81
|
+
nodesExplored += 1;
|
|
82
|
+
if (node.state.satisfies(goal)) {
|
|
83
|
+
return { valid: true, actions: node.actions, cost: round3(node.cost), nodesExplored, finalState: node.state.toObject() };
|
|
84
|
+
}
|
|
85
|
+
if (node.actions.length >= this.maxPlanLength)
|
|
86
|
+
continue;
|
|
87
|
+
for (const action of enabledActions) {
|
|
88
|
+
if (!action.canRun(node.state))
|
|
89
|
+
continue;
|
|
90
|
+
const nextState = action.apply(node.state);
|
|
91
|
+
const nextCost = round3(node.cost + action.cost);
|
|
92
|
+
const key = nextState.key();
|
|
93
|
+
if ((bestCostByState.get(key) ?? Number.POSITIVE_INFINITY) <= nextCost)
|
|
94
|
+
continue;
|
|
95
|
+
bestCostByState.set(key, nextCost);
|
|
96
|
+
open.push({ state: nextState, actions: [...node.actions, action.name], cost: nextCost });
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return { valid: false, actions: [], cost: 0, nodesExplored, finalState: current.toObject() };
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
function round3(value) {
|
|
103
|
+
return Number(value.toFixed(3));
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=GOAP.js.map
|
package/dist/GOAP.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GOAP.js","sourceRoot":"","sources":["../../../../packages/scripting/src/GOAP.ts"],"names":[],"mappings":"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"}
|