@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.
Files changed (139) hide show
  1. package/README.md +16 -0
  2. package/dist/AdaptiveDifficultyFixtures.d.ts +58 -0
  3. package/dist/AdaptiveDifficultyFixtures.d.ts.map +1 -0
  4. package/dist/AdaptiveDifficultyFixtures.js +228 -0
  5. package/dist/AdaptiveDifficultyFixtures.js.map +1 -0
  6. package/dist/AnalyticsPrivacyFixtures.d.ts +63 -0
  7. package/dist/AnalyticsPrivacyFixtures.d.ts.map +1 -0
  8. package/dist/AnalyticsPrivacyFixtures.js +120 -0
  9. package/dist/AnalyticsPrivacyFixtures.js.map +1 -0
  10. package/dist/Behavior.d.ts +10 -0
  11. package/dist/Behavior.d.ts.map +1 -0
  12. package/dist/Behavior.js +2 -0
  13. package/dist/Behavior.js.map +1 -0
  14. package/dist/BehaviorHost.d.ts +17 -0
  15. package/dist/BehaviorHost.d.ts.map +1 -0
  16. package/dist/BehaviorHost.js +39 -0
  17. package/dist/BehaviorHost.js.map +1 -0
  18. package/dist/BehaviorRegistry.d.ts +8 -0
  19. package/dist/BehaviorRegistry.d.ts.map +1 -0
  20. package/dist/BehaviorRegistry.js +17 -0
  21. package/dist/BehaviorRegistry.js.map +1 -0
  22. package/dist/BehaviorSystem.d.ts +26 -0
  23. package/dist/BehaviorSystem.d.ts.map +1 -0
  24. package/dist/BehaviorSystem.js +76 -0
  25. package/dist/BehaviorSystem.js.map +1 -0
  26. package/dist/BehaviorTree.d.ts +75 -0
  27. package/dist/BehaviorTree.d.ts.map +1 -0
  28. package/dist/BehaviorTree.js +204 -0
  29. package/dist/BehaviorTree.js.map +1 -0
  30. package/dist/CloudServiceFixtures.d.ts +81 -0
  31. package/dist/CloudServiceFixtures.d.ts.map +1 -0
  32. package/dist/CloudServiceFixtures.js +144 -0
  33. package/dist/CloudServiceFixtures.js.map +1 -0
  34. package/dist/CulturalBehaviorFixtures.d.ts +75 -0
  35. package/dist/CulturalBehaviorFixtures.d.ts.map +1 -0
  36. package/dist/CulturalBehaviorFixtures.js +180 -0
  37. package/dist/CulturalBehaviorFixtures.js.map +1 -0
  38. package/dist/DecisionTree.d.ts +42 -0
  39. package/dist/DecisionTree.d.ts.map +1 -0
  40. package/dist/DecisionTree.js +125 -0
  41. package/dist/DecisionTree.js.map +1 -0
  42. package/dist/GOAP.d.ts +51 -0
  43. package/dist/GOAP.d.ts.map +1 -0
  44. package/dist/GOAP.js +105 -0
  45. package/dist/GOAP.js.map +1 -0
  46. package/dist/HTN.d.ts +58 -0
  47. package/dist/HTN.d.ts.map +1 -0
  48. package/dist/HTN.js +115 -0
  49. package/dist/HTN.js.map +1 -0
  50. package/dist/LearningAgentFixtures.d.ts +60 -0
  51. package/dist/LearningAgentFixtures.d.ts.map +1 -0
  52. package/dist/LearningAgentFixtures.js +122 -0
  53. package/dist/LearningAgentFixtures.js.map +1 -0
  54. package/dist/NetworkReplicationFixtures.d.ts +82 -0
  55. package/dist/NetworkReplicationFixtures.d.ts.map +1 -0
  56. package/dist/NetworkReplicationFixtures.js +330 -0
  57. package/dist/NetworkReplicationFixtures.js.map +1 -0
  58. package/dist/Perception.d.ts +58 -0
  59. package/dist/Perception.d.ts.map +1 -0
  60. package/dist/Perception.js +111 -0
  61. package/dist/Perception.js.map +1 -0
  62. package/dist/PlayerBehaviorTelemetryFixtures.d.ts +74 -0
  63. package/dist/PlayerBehaviorTelemetryFixtures.d.ts.map +1 -0
  64. package/dist/PlayerBehaviorTelemetryFixtures.js +189 -0
  65. package/dist/PlayerBehaviorTelemetryFixtures.js.map +1 -0
  66. package/dist/ProceduralContentAdaptationFixtures.d.ts +52 -0
  67. package/dist/ProceduralContentAdaptationFixtures.d.ts.map +1 -0
  68. package/dist/ProceduralContentAdaptationFixtures.js +149 -0
  69. package/dist/ProceduralContentAdaptationFixtures.js.map +1 -0
  70. package/dist/ScriptContext.d.ts +18 -0
  71. package/dist/ScriptContext.d.ts.map +1 -0
  72. package/dist/ScriptContext.js +21 -0
  73. package/dist/ScriptContext.js.map +1 -0
  74. package/dist/StateMachine.d.ts +52 -0
  75. package/dist/StateMachine.d.ts.map +1 -0
  76. package/dist/StateMachine.js +117 -0
  77. package/dist/StateMachine.js.map +1 -0
  78. package/dist/UtilityAI.d.ts +55 -0
  79. package/dist/UtilityAI.d.ts.map +1 -0
  80. package/dist/UtilityAI.js +113 -0
  81. package/dist/UtilityAI.js.map +1 -0
  82. package/dist/VisualGraph.d.ts +20 -0
  83. package/dist/VisualGraph.d.ts.map +1 -0
  84. package/dist/VisualGraph.js +191 -0
  85. package/dist/VisualGraph.js.map +1 -0
  86. package/dist/VisualGraphContext.d.ts +123 -0
  87. package/dist/VisualGraphContext.d.ts.map +1 -0
  88. package/dist/VisualGraphContext.js +2 -0
  89. package/dist/VisualGraphContext.js.map +1 -0
  90. package/dist/VisualGraphExecutor.d.ts +16 -0
  91. package/dist/VisualGraphExecutor.d.ts.map +1 -0
  92. package/dist/VisualGraphExecutor.js +571 -0
  93. package/dist/VisualGraphExecutor.js.map +1 -0
  94. package/dist/VisualNode.d.ts +17 -0
  95. package/dist/VisualNode.d.ts.map +1 -0
  96. package/dist/VisualNode.js +24 -0
  97. package/dist/VisualNode.js.map +1 -0
  98. package/dist/VisualNodeCatalog.d.ts +14 -0
  99. package/dist/VisualNodeCatalog.d.ts.map +1 -0
  100. package/dist/VisualNodeCatalog.js +142 -0
  101. package/dist/VisualNodeCatalog.js.map +1 -0
  102. package/dist/WeaponSystem.d.ts +228 -0
  103. package/dist/WeaponSystem.d.ts.map +1 -0
  104. package/dist/WeaponSystem.js +530 -0
  105. package/dist/WeaponSystem.js.map +1 -0
  106. package/dist/index.d.ts +51 -0
  107. package/dist/index.d.ts.map +1 -0
  108. package/dist/index.js +25 -0
  109. package/dist/index.js.map +1 -0
  110. package/package.json +13 -0
  111. package/src/AdaptiveDifficultyFixtures.ts +324 -0
  112. package/src/AnalyticsPrivacyFixtures.ts +182 -0
  113. package/src/Behavior.ts +11 -0
  114. package/src/BehaviorHost.ts +51 -0
  115. package/src/BehaviorRegistry.ts +22 -0
  116. package/src/BehaviorSystem.ts +103 -0
  117. package/src/BehaviorTree.ts +234 -0
  118. package/src/CloudServiceFixtures.ts +225 -0
  119. package/src/CulturalBehaviorFixtures.ts +262 -0
  120. package/src/DecisionTree.ts +162 -0
  121. package/src/GOAP.ts +150 -0
  122. package/src/HTN.ts +178 -0
  123. package/src/LearningAgentFixtures.ts +184 -0
  124. package/src/NetworkReplicationFixtures.ts +440 -0
  125. package/src/Perception.ts +163 -0
  126. package/src/PlayerBehaviorTelemetryFixtures.ts +257 -0
  127. package/src/ProceduralContentAdaptationFixtures.ts +205 -0
  128. package/src/ScriptContext.ts +34 -0
  129. package/src/StateMachine.ts +138 -0
  130. package/src/UtilityAI.ts +158 -0
  131. package/src/VisualGraph.ts +236 -0
  132. package/src/VisualGraphContext.ts +138 -0
  133. package/src/VisualGraphExecutor.ts +663 -0
  134. package/src/VisualNode.ts +44 -0
  135. package/src/VisualNodeCatalog.ts +195 -0
  136. package/src/WeaponSystem.ts +793 -0
  137. package/src/index.ts +175 -0
  138. package/tests/scripting.test.ts +229 -0
  139. package/tsconfig.json +7 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CloudServiceFixtures.js","sourceRoot":"","sources":["../../../../packages/scripting/src/CloudServiceFixtures.ts"],"names":[],"mappings":"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"}
@@ -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":"AAiCA,MAAM,OAAO,YAAY;IACf,IAAI,CAA+B;IAE3C,cAAc,CAAC,IAAY,EAAE,SAA4B;QACvD,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC/C,CAAC;IAED,YAAY,CAAC,IAAY,EAAE,SAAyB,GAAG,EAAE,CAAC,SAAS;QACjE,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1C,CAAC;IAED,WAAW,CAAC,IAAsB,EAAE,UAA4B,EAAE,WAA6B;QAC7F,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAClG,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC;QACzB,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED,OAAO,CAAC,IAAsB;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,OAA4B,EAAE,QAAQ,GAAG,EAAE;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,EAAE,MAAM;YAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAChH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvB,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjG,CAAC;IAED,QAAQ,CAAC,OAA4B,EAAE,QAAQ,GAAG,EAAE;QAClD,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,QAAQ,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QACjD,IAAI,OAAO,GAAiC,IAAI,CAAC,IAAI,CAAC;QACtD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,OAAO,OAAO,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;YACnC,KAAK,IAAI,CAAC,CAAC;YACX,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,OAAO,CAAC;YAC9C,IAAI,CAAC,OAAO,CAAC,SAAS;gBAAE,OAAO,SAAS,CAAC;YACzC,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;QAClF,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,gBAAgB,CAAC,OAA4B,EAAE,QAAQ,GAAG,EAAE;QAC1D,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,QAAQ,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,IAAI,OAAO,GAAiC,IAAI,CAAC,IAAI,CAAC;QACtD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,OAAO,OAAO,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;YACnC,KAAK,IAAI,CAAC,CAAC;YACX,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACxB,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM;YACrC,IAAI,CAAC,OAAO,CAAC,SAAS;gBAAE,MAAM;YAC9B,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;QAClF,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACrD,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;QAC/G,MAAM,KAAK,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,EAAc,EAAE,CAAC;QAChG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrF,MAAM,kBAAkB,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YACtD,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM;YACvF,CAAC,CAAC,CAAC,CAAC;QACN,OAAO;YACL,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,QAAQ;YACR,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SAC1D,CAAC;IACJ,CAAC;IAED,KAAK;QACH,MAAM,IAAI,GAAG,IAAI,YAAY,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,SAAS,YAAY,CAAC,IAAsB;IAC1C,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC;IACrE,OAAO,OAAO,IAAI,CAAC,SAAS,KAAK,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,UAAW,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,WAAY,CAAC,CAAC;AAC5K,CAAC;AAED,SAAS,YAAY,CACnB,IAAsB,EACtB,KAAa,EACb,KAAiG;IAEjG,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;IACtB,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;QACvB,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,OAAO;IACT,CAAC;IACD,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;IACzB,IAAI,IAAI,CAAC,UAAU;QAAE,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;IACrE,IAAI,IAAI,CAAC,WAAW;QAAE,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,SAAS,CAAC,IAAsB;IACvC,MAAM,MAAM,GAAqB,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IACtH,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;IACpC,CAAC;IACD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjD,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;IACrC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;AAC5F,CAAC"}
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GOAP.js","sourceRoot":"","sources":["../../../../packages/scripting/src/GOAP.ts"],"names":[],"mappings":"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"}