@nice2dev/game-engine 1.1.9 → 1.1.10

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.
@@ -507,6 +507,55 @@ class StateMachine {
507
507
  return new StateMachine(JSON.parse(JSON.stringify(this.definition)));
508
508
  }
509
509
  }
510
+ // ============================================================
511
+ // Animation State Machine
512
+ // ============================================================
513
+ /** Extended state machine for animation control */
514
+ class AnimatorController extends StateMachine {
515
+ constructor(definition) {
516
+ super(definition);
517
+ this.motionValues = new Map();
518
+ this.blendTrees = new Map();
519
+ }
520
+ /** Get blended motion value for animation sampling */
521
+ getMotionValue(layerId) {
522
+ return this.motionValues.get(layerId) || 0;
523
+ }
524
+ /** Get current motion/clip name */
525
+ getMotionClip(layerId) {
526
+ const state = this.getCurrentState(layerId);
527
+ return state?.motion || null;
528
+ }
529
+ /** Register a blend tree for a state */
530
+ registerBlendTree(stateId, blendTree) {
531
+ this.blendTrees.set(stateId, blendTree);
532
+ }
533
+ /** Sample blend tree for current parameters */
534
+ sampleBlendTree(stateId) {
535
+ const blendTree = this.blendTrees.get(stateId);
536
+ if (!blendTree) {
537
+ return null;
538
+ }
539
+ const params = {};
540
+ for (const [name, value] of this.getParameterMap()) {
541
+ if (typeof value === 'number') {
542
+ params[name] = value;
543
+ }
544
+ }
545
+ return blendTree.sample(params);
546
+ }
547
+ getParameterMap() {
548
+ const map = new Map();
549
+ const definition = this.getDefinition();
550
+ for (const param of definition.parameters) {
551
+ const value = this.getParameter(param.name);
552
+ if (value !== undefined) {
553
+ map.set(param.name, value);
554
+ }
555
+ }
556
+ return map;
557
+ }
558
+ }
510
559
  class BlendTree {
511
560
  constructor(type, parameterX, parameterY) {
512
561
  this.motions = [];
@@ -640,6 +689,9 @@ class BlendTree {
640
689
  function createStateMachine(definition) {
641
690
  return new StateMachine(definition);
642
691
  }
692
+ function createAnimatorController(definition) {
693
+ return new AnimatorController(definition);
694
+ }
643
695
  function createBlendTree1D(parameter) {
644
696
  return new BlendTree('1d', parameter);
645
697
  }
@@ -729,4 +781,4 @@ function createSMContext(params) {
729
781
  };
730
782
  }
731
783
 
732
- export { BlendTree, StateMachine, createBlendTree1D, createBlendTree2D, createSMCondition, createSMConditionGroup, createSMContext, createSMDefinition, createSMLayer, createSMParameter, createSMState, createSMTransition, createStateMachine };
784
+ export { AnimatorController, BlendTree, StateMachine, createAnimatorController, createBlendTree1D, createBlendTree2D, createSMCondition, createSMConditionGroup, createSMContext, createSMDefinition, createSMLayer, createSMParameter, createSMState, createSMTransition, createStateMachine };
@@ -733,5 +733,17 @@ function createBone(name, parentId = null, transform) {
733
733
  children: [],
734
734
  };
735
735
  }
736
+ function createAnimationClip(name, sourceSkeletonId, duration = 1, frameRate = 30) {
737
+ return {
738
+ id: `clip_${Date.now()}`,
739
+ name,
740
+ duration,
741
+ frameRate,
742
+ tracks: [],
743
+ hasRootMotion: false,
744
+ isLooping: false,
745
+ sourceSkeletonId,
746
+ };
747
+ }
736
748
 
737
- export { AnimationRetargeting, createAnimationRetargeting, createBone };
749
+ export { AnimationRetargeting, createAnimationClip, createAnimationRetargeting, createBone };
@@ -713,6 +713,17 @@ function createTrack(name, type) {
713
713
  return baseTrack;
714
714
  }
715
715
  }
716
+ function createAnimationClip(trackId, startTime, duration) {
717
+ return {
718
+ id: `clip_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,
719
+ name: 'Animation Clip',
720
+ type: 'animation',
721
+ trackId,
722
+ startTime,
723
+ duration,
724
+ curves: [],
725
+ };
726
+ }
716
727
  function createAudioClip(trackId, startTime, duration, audioSource) {
717
728
  return {
718
729
  id: `clip_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,
@@ -803,4 +814,4 @@ function createSignalMarker(name, time, signalName, payload) {
803
814
  };
804
815
  }
805
816
 
806
- export { TimelinePlayer, TimelineRecorder, applyEasing, createAnimationCurve, createAudioClip, createCameraClip, createEventClip, createKeyframe, createMarker, createPropertyClip, createSignalMarker, createTimelineDefinition, createTimelinePlayer, createTimelineRecorder, createTrack, createTransformClip, evaluateCurve };
817
+ export { TimelinePlayer, TimelineRecorder, applyEasing, createAnimationClip, createAnimationCurve, createAudioClip, createCameraClip, createEventClip, createKeyframe, createMarker, createPropertyClip, createSignalMarker, createTimelineDefinition, createTimelinePlayer, createTimelineRecorder, createTrack, createTransformClip, evaluateCurve };
package/dist/esm/index.js CHANGED
@@ -90,14 +90,14 @@ export { RustExporter } from './scripting/exporters/RustExporter.js';
90
90
  export { TypeScriptExporter } from './scripting/exporters/TypeScriptExporter.js';
91
91
  export { createExporter, getAvailableExporters, hasExporter } from './export/index.js';
92
92
  export { canImport, createImporter, createNativeImporter, getImporterForFile, getSupportedExtensions, getSupportedFormats } from './import/index.js';
93
- export { TimelinePlayer, TimelineRecorder, applyEasing, createAnimationCurve, createAudioClip, createCameraClip, createEventClip, createKeyframe, createMarker, createPropertyClip, createSignalMarker, createTimelineDefinition, createTimelinePlayer, createTimelineRecorder, createTrack, createTransformClip, evaluateCurve } from './editor/TimelineEditor.js';
93
+ export { TimelinePlayer, TimelineRecorder, applyEasing, createAnimationCurve, createAudioClip, createCameraClip, createEventClip, createKeyframe, createMarker, createPropertyClip, createSignalMarker, createAnimationClip as createTimelineAnimationClip, createTimelineDefinition, createTimelinePlayer, createTimelineRecorder, createTrack, createTransformClip, evaluateCurve } from './editor/TimelineEditor.js';
94
94
  export { SHADER_NODE_LIBRARY, ShaderCodeGenerator, createEmptyShaderGraph, createShaderGraph, createShaderGraphEditorState, findNodeDef, generateShader, getNodeLibrary, getNodesByCategory } from './editor/ShaderGraph.js';
95
95
  export { CATEGORY_COLORS, DEFAULT_PROFILER_CONFIG, ProfilerPanel, createProfilerPanel, generateStatsOverlay } from './editor/ProfilerPanel.js';
96
96
  export { ConsolePro, DEFAULT_CONSOLE_CONFIG, captureStackTrace, createConsolePro, createGlobalConsole, inspectValue } from './editor/ConsolePro.js';
97
97
  export { AssetBrowser, DEFAULT_BROWSER_CONFIG, DEFAULT_IMPORT_OPTIONS, ThumbnailGenerator, createAssetBrowser, createThumbnailGenerator } from './editor/AssetBrowser.js';
98
98
  export { DEFAULT_TRANSFORM, PrefabManager, createComponent, createDefaultEntity, createPrefabManager } from './editor/PrefabSystem.js';
99
99
  export { CommonExecutors, DEFAULT_UNDO_REDO_CONFIG, UndoRedoManager, createAction, createUndoRedoManager } from './editor/UndoRedoPro.js';
100
- export { AnimationRetargeting, createAnimationRetargeting, createBone } from './editor/AnimationRetargeting.js';
100
+ export { AnimationRetargeting, createAnimationRetargeting, createBone, createAnimationClip as createRetargetingAnimationClip } from './editor/AnimationRetargeting.js';
101
101
  export { DialogueManager, createCondition, createConditionGroup, createDialogueManager, createDialogueNode } from './editor/DialogueSystem.js';
102
102
  export { createQuestCondition, createQuestManager } from './editor/QuestEditor.js';
103
103
  export { CraftingEditor, createCraftingEditor, createIngredient, createOutput } from './editor/CraftingEditor.js';
@@ -126,7 +126,7 @@ export { DEFAULT_BRUSH, TerrainSystem, createFlatTerrain, createGrassDetail, cre
126
126
  export { DEFAULT_LIGHTMAP_SETTINGS, LightingSystem, createAreaLight, createDefaultLightingSetup, createDirectionalLight, createLightProbe, createLightProbeGroup, createLightingSystem, createPointLight, createReflectionProbe, createSpotLight } from './systems/LightingSystem.js';
127
127
  export { DEFAULT_DEBUG_COLORS, DEFAULT_DEBUG_OPTIONS, PhysicsDebugSystem, createCollider2D, createCollider3D, createPhysicsDebugSystem, createRigidbody2D, createRigidbody3D } from './systems/PhysicsDebugSystem.js';
128
128
  export { BTBlackboard, BTComposite, BTConditionGuard, BTCooldown, BTFailer, BTInverter, BTLog, BTNode, BTNodeRegistry, BTRandomSelector, BTRandomSequence, BTRepeatUntilFail, BTRepeatUntilSuccess, BTRepeater, BTRoot, BTSubtree, BTSucceeder, BTTimeout, BTWait, BehaviorTree, createBTContext, createBehaviorTree, createBlackboard, createNodeRegistry } from './ai/BehaviorTree.js';
129
- export { BlendTree, StateMachine, createBlendTree1D, createBlendTree2D, createSMCondition, createSMConditionGroup, createSMContext, createSMDefinition, createSMLayer, createSMParameter, createSMState, createSMTransition, createStateMachine } from './ai/StateMachine.js';
129
+ export { BlendTree, StateMachine, AnimatorController as StateMachineAnimatorController, createBlendTree1D, createBlendTree2D, createSMCondition, createSMConditionGroup, createSMContext, createSMDefinition, createSMLayer, createSMParameter, createSMState, createSMTransition, createStateMachine, createAnimatorController as createStateMachineAnimatorController } from './ai/StateMachine.js';
130
130
  export { VSDebugger, VSGraphExecutor, VS_TYPE_COLORS, createBuiltInNodes, createVSConnection, createVSDebugger, createVSExecutor, createVSGraph, createVSNode } from './scripting/VisualScripting2.js';
131
131
  export { UnityBuildCloud, createNiceToUnityConfig, createUnityBuildCloud, createUnityBuildConfig, createUnityPackageConfig, generateBuildScript, generateUnityDockerfile } from './build-cloud/UnityBuildCloud.js';
132
132
  export { GodotBuildCloud, createGodotAddonConfig, createGodotBuildCloud, createGodotBuildConfig, createNiceToGodotConfig, generateGodotDockerfile } from './build-cloud/GodotBuildCloud.js';
@@ -150,6 +150,7 @@ export { Octree, SceneNode, createOctree, createSceneNode } from './native-engin
150
150
  export { createAssetManager } from './native-engine/AssetPipeline.js';
151
151
  export { PhysicsWorld, createPhysicsWorld } from './native-engine/PhysicsEngine.js';
152
152
  export { AudioEngine, createAudioEngine } from './native-engine/AudioEngine.js';
153
+ export { AnimatorController, createAnimationClip, createAnimatorController } from './native-engine/AnimationSystem.js';
153
154
  export { InputSystem, UISystem, createInputSystem, createUISystem } from './native-engine/InputSystem.js';
154
155
  export { MatchmakingManager, NetworkEntity, createLobbyManager, createMatchmakingManager, createNetworkManager } from './native-engine/NetworkingSystem.js';
155
156
  export { AsepriteImporter } from './import/AsepriteImporter.js';