Beispiel #1
0
 private bool ShouldWaitForRunningAnimationsToFinish(ModelConditionState conditionState)
 {
     return(_activeConditionState != null &&
            conditionState.WaitForStateToFinishIfPossible != null &&
            _activeConditionState.TransitionKey == conditionState.WaitForStateToFinishIfPossible &&
            (_activeModelDrawConditionState?.StillActive() ?? false));
 }
Beispiel #2
0
        protected virtual bool SetActiveAnimationState(AnimationState animationState, Random random)
        {
            if (animationState == _activeAnimationState && (_activeModelDrawConditionState?.StillActive() ?? false))
            {
                return(false);
            }

            if (animationState == null ||
                animationState.Animations.Count == 0 ||
                _activeModelDrawConditionState == null)
            {
                return(true);
            }

            PreviousAnimationState = _activeAnimationState;

            if (_activeModelDrawConditionState?.Model != null)
            {
                foreach (var animationInstance in _activeModelDrawConditionState.Model.AnimationInstances)
                {
                    animationInstance.Stop();
                }
            }

            var modelInstance = _activeModelDrawConditionState.Model;

            modelInstance.AnimationInstances.Clear();
            _activeAnimationState = animationState;

            var animationBlock = animationState.Animations[random.Next(0, animationState.Animations.Count - 1)];

            if (animationBlock != null)
            {
                var anim = animationBlock.Animation.Value;
                //Check if the animation does really exist
                if (anim != null)
                {
                    var flags             = animationState.Flags;
                    var mode              = animationBlock.AnimationMode;
                    var animationInstance = new AnimationInstance(modelInstance.ModelBoneInstances, anim, mode, flags, GameObject, _context.Random);
                    modelInstance.AnimationInstances.Add(animationInstance);
                    animationInstance.Play(animationBlock.AnimationSpeedFactorRange.GetValue(random));
                }
            }

            if (animationState != null && animationState.Script != null)
            {
                _context.Scene3D.Game.Lua.ExecuteDrawModuleLuaCode(this, animationState.Script);
            }

            NLog.LogManager.GetCurrentClassLogger().Info($"Set active animation state for {GameObject.Definition.Name}");

            return(true);
        }
Beispiel #3
0
        private void SetActiveAnimationState(AnimationState animationState, Random random)
        {
            if (animationState == null ||
                animationState.Animations.Count == 0 ||
                _activeModelDrawConditionState == null)
            {
                return;
            }

            if (_activeModelDrawConditionState.StillActive() == false)
            {
                _activeAnimationState = null;
            }
            else if (animationState == _activeAnimationState)
            {
                return;
            }

            _activeAnimationState = animationState;

            var modelInstance = _activeModelDrawConditionState.Model;

            modelInstance.AnimationInstances.Clear();

            var animationBlock = animationState.Animations[random.Next(0, animationState.Animations.Count - 1)];

            if (animationBlock != null)
            {
                foreach (var animation in animationBlock.Animations)
                {
                    var anim = animation.Value;
                    //Check if the animation does really exist
                    if (anim != null)
                    {
                        var flags             = animationState.Flags;
                        var mode              = animationBlock.AnimationMode;
                        var animationInstance = new AnimationInstance(modelInstance, anim, mode, flags, GameObject);
                        modelInstance.AnimationInstances.Add(animationInstance);
                        animationInstance.Play();
                        break;
                    }
                }
            }
        }