public Nima.Animation.ActorAnimationInstance GetAnimationInstance(string name) { Nima.Animation.ActorAnimation animation = GetAnimation(name); if (animation == null) { return(null); } return(new Nima.Animation.ActorAnimationInstance(this, animation)); }
public void Start() { ActorBaseComponent actor = gameObject.GetComponent <ActorBaseComponent>(); if (actor != null) { m_ActorInstance = actor.ActorInstance; if (m_ActorInstance != null) { m_Animation = m_ActorInstance.GetAnimation(m_AnimationName); } } m_AnimationTime = m_Offset * m_Animation.Duration; }
private void ReadAnimationsBlock(BlockReader block) { // Read animations. int animationCount = block.ReadUInt16(); m_Animations = new Nima.Animation.ActorAnimation[animationCount]; BlockReader animationBlock = null; int animationIndex = 0; while ((animationBlock = block.ReadNextBlock()) != null) { switch (animationBlock.BlockType) { case (int)BlockTypes.Animation: Nima.Animation.ActorAnimation anim = Nima.Animation.ActorAnimation.Read(animationBlock, m_Components); m_Animations[animationIndex++] = anim; //ReadAnimationBlock(actor, block); break; } } ; }
public void Start() { m_Actor = gameObject.GetComponent <ActorBaseComponent>(); if (m_Actor != null) { // Get a game object from the actor, use this to mount items or query for other components. // GameObject headColliderGameObject = m_Actor.GetActorGameObject("HeadCollider"); // if(headColliderGameObject != null) // { // Collider2D collider = headColliderGameObject.GetComponent<Collider2D>(); // if(collider != null) // { // // Set it to a trigger, or do something else with it... // // collider.isTrigger = true; // } // } if (m_Actor.ActorInstance != null) { m_Idle = m_Actor.ActorInstance.GetAnimation("Idle"); m_Aim = m_Actor.ActorInstance.GetAnimation("Aim2"); m_Walk = m_Actor.ActorInstance.GetAnimationInstance("Walk"); m_Run = m_Actor.ActorInstance.GetAnimation("Run"); m_WalkToIdle = m_Actor.ActorInstance.GetAnimation("WalkToIdle"); // We made walk an animation instance so it has it's own sense of time which lets it do things like track events. m_Walk.AnimationEvent += delegate(object animationInstance, Nima.Animation.AnimationEventArgs args) { // Event triggered from animation. }; ActorNode characterNode = m_Actor.ActorInstance.GetNode("Character"); if (characterNode != null) { m_GroundSpeedProperty = characterNode.GetCustomFloatProperty("GroundSpeed"); m_IsRunningProperty = characterNode.GetCustomBooleanProperty("IsRunning"); } // Calculate aim slices. if (m_Aim != null) { ActorNode muzzle = m_Actor.ActorInstance.GetNode("Muzzle"); if (muzzle != null) { for (int i = 0; i < AimSliceCount; i++) { float position = i / (float)(AimSliceCount - 1) * m_Aim.Duration; m_Aim.Apply(position, m_Actor.ActorInstance, 1.0f); m_Actor.ActorInstance.Advance(0.0f); Mat2D worldTransform = muzzle.WorldTransform; AimSlice slice = m_AimLookup[i]; // Extract forward vector and position. slice.dir = new Vec2D(); Vec2D.Normalize(slice.dir, new Vec2D(worldTransform[0], worldTransform[1])); slice.point = new Vec2D(worldTransform[4] * ActorAsset.NimaToUnityScale, worldTransform[5] * ActorAsset.NimaToUnityScale); m_AimLookup[i] = slice; } } if (m_Walk != null) { m_Walk.Time = 0.0f; m_Walk.Apply(1.0f); for (int i = 0; i < AimSliceCount; i++) { float position = i / (float)(AimSliceCount - 1) * m_Aim.Duration; m_Aim.Apply(position, m_Actor.ActorInstance, 1.0f); m_Actor.ActorInstance.Advance(0.0f); Mat2D worldTransform = muzzle.WorldTransform; AimSlice slice = m_AimWalkingLookup[i]; // Extract forward vector and position. slice.dir = new Vec2D(); Vec2D.Normalize(slice.dir, new Vec2D(worldTransform[0], worldTransform[1])); slice.point = new Vec2D(worldTransform[4] * ActorAsset.NimaToUnityScale, worldTransform[5] * ActorAsset.NimaToUnityScale); m_AimWalkingLookup[i] = slice; } } } } } m_IdleTime = 0.0f; }
public void Update() { if (m_Animator == null || m_Actor == null) { return; } int numLayers = m_Animator.layerCount; for (int i = 0; i < numLayers; i++) { float layerMix = i == 0 ? 1.0f : m_Animator.GetLayerWeight(i); AnimatorStateInfo stateInfo = m_Animator.GetCurrentAnimatorStateInfo(i); AnimatorStateInfo nextStateInfo = m_Animator.GetNextAnimatorStateInfo(i); bool hasNext = nextStateInfo.fullPathHash != 0; AnimatorClipInfo[] clipInfos = m_Animator.GetCurrentAnimatorClipInfo(i); AnimatorClipInfo[] nextClipInfos = m_Animator.GetNextAnimatorClipInfo(i); for (int c = 0; c < clipInfos.Length; c++) { AnimatorClipInfo clipInfo = clipInfos[c]; float mix = clipInfo.weight * layerMix; if (mix == 0.0f) { continue; } Nima.Animation.ActorAnimation actorAnimation = ClipToAnimation(clipInfo.clip); if (actorAnimation != null) { float time = (stateInfo.normalizedTime * clipInfo.clip.length); if (stateInfo.loop) { time %= actorAnimation.Duration; } actorAnimation.Apply(time, m_Actor, mix); } } if (hasNext) { for (int c = 0; c < nextClipInfos.Length; c++) { AnimatorClipInfo clipInfo = nextClipInfos[c]; float mix = clipInfo.weight * layerMix; if (mix == 0.0f) { continue; } Nima.Animation.ActorAnimation actorAnimation = ClipToAnimation(clipInfo.clip); if (actorAnimation != null) { float time = (nextStateInfo.normalizedTime * clipInfo.clip.length); if (nextStateInfo.loop) { time %= actorAnimation.Duration; } actorAnimation.Apply(time, m_Actor, mix); } } } } }
void Start() { m_Animator = GetComponent <Animator>(); m_Actor = gameObject.GetComponent <ActorBaseComponent>(); if (m_Actor != null) { if (m_Actor.ActorInstance != null) { m_Aim = m_Actor.ActorInstance.GetAnimation("Aim2"); Nima.Animation.ActorAnimation walk = m_Actor.ActorInstance.GetAnimation("Walk"); Nima.Animation.ActorAnimation walkToIdle = m_Actor.ActorInstance.GetAnimation("WalkToIdle"); // Calculate aim slices. if (m_Aim != null) { ActorNode muzzle = m_Actor.ActorInstance.GetNode("Muzzle"); if (muzzle != null) { for (int i = 0; i < AimSliceCount; i++) { float position = i / (float)(AimSliceCount - 1) * m_Aim.Duration; m_Aim.Apply(position, m_Actor.ActorInstance, 1.0f); Mat2D worldTransform = muzzle.WorldTransform; AimSlice slice = m_AimLookup[i]; // Extract forward vector and position. slice.dir = new Vec2D(); Vec2D.Normalize(slice.dir, new Vec2D(worldTransform[0], worldTransform[1])); slice.point = new Vec2D(worldTransform[4], worldTransform[5]); m_AimLookup[i] = slice; } } if (walk != null) { walk.Apply(0.0f, m_Actor.ActorInstance, 1.0f); for (int i = 0; i < AimSliceCount; i++) { float position = i / (float)(AimSliceCount - 1) * m_Aim.Duration; m_Aim.Apply(position, m_Actor.ActorInstance, 1.0f); Mat2D worldTransform = muzzle.WorldTransform; AimSlice slice = m_AimWalkingLookup[i]; // Extract forward vector and position. slice.dir = new Vec2D(); Vec2D.Normalize(slice.dir, new Vec2D(worldTransform[0], worldTransform[1])); slice.point = new Vec2D(worldTransform[4], worldTransform[5]); m_AimWalkingLookup[i] = slice; } } if (walkToIdle != null) { walkToIdle.Apply(walkToIdle.Duration, m_Actor.ActorInstance, 1.0f); } } } } }