コード例 #1
0
ファイル: BoneViewModel.cs プロジェクト: TiagoJSM/Storytime
 public BoneViewModel(
     TreeViewItemViewModel parent, INodeAddedCallback nodeAddCB, ICommand attachToBoneCommand, BoneActor actor)
     : base(parent, nodeAddCB, false)
 {
     BoneActor = actor;
     AttachToBoneCommand = attachToBoneCommand;
 }
コード例 #2
0
        public Bone Add(BoneActor actor)
        {
            Bone bone = null;
            if (actor.Parent != null)
            {
                var parent = actor.Parent.AssignedBone;
                bone = new Bone(parent);
            }
            else
            {
                bone = new Bone()
                {
                    Length = FirstBoneDefaultLenght
                };
                _skeleton.AddBone(bone);
            }

            actor.AssignedBone = bone;
            SetBoneData(actor);

            actor.OnParentChange += OnParentChangeHandler;

            _boneDictionary.Add(bone, actor);
            return bone;
        }
コード例 #3
0
        public void AddAnimationFrame(BoneActor actor, double animationEndTimeInSeconds, BoneState fromState, BoneState toState)
        {
            var frameAtTime = GetFrameAt(actor, animationEndTimeInSeconds);
            if (frameAtTime == null)
            {
                AddNewAnimationFrame(actor, animationEndTimeInSeconds, fromState, toState);
                return;
            }

            if (frameAtTime.EndTime.TotalSeconds != animationEndTimeInSeconds)
            {
                return;
            }

            SetActorPropertiesToBoneEndState(frameAtTime, actor, toState);
        }
コード例 #4
0
        public void AddBone(BoneActor actor)
        {
            BoneViewModel parentVM = null;
            if (actor.Parent != null)
            {
                parentVM = _boneActorMapper[actor.Parent];
            }

            actor.AssignedBone.Name = GenerateName();
            var boneVM = new BoneViewModel(parentVM, _callback, _attachToBoneCommand, actor);
            boneVM.BoneActor = actor;
            _boneActorMapper.Add(actor, boneVM);
            if(parentVM != null)
                parentVM.Children.Add(boneVM);
            else
                SkeletonViewModel.Children.Add(boneVM);
        }
コード例 #5
0
 private void SetBoneData(BoneActor actor)
 {
     actor.AssignedBone.AbsolutePosition = actor.Body.Position;
     actor.AssignedBone.AbsoluteEnd = actor.BoneEnd;
 }
コード例 #6
0
 private void OnPositionChangeHandler(BoneActor actor)
 {
     SetBoneData(actor);
     PropagateBoneChanges(actor.AssignedBone);
 }
コード例 #7
0
        private void OnParentChangeHandler(BoneActor actor)
        {
            var bone = actor.AssignedBone;
            if (actor.Parent == null)
            {
                if (bone.Parent != null)
                {
                    bone.Parent.RemoveChildren(bone);
                }
                return;
            }

            var parentBone = actor.Parent.AssignedBone;
            if (bone.Parent != null)
            {
                bone.Parent.RemoveChildren(bone);
            }
            parentBone.AddChildren(bone);
        }
コード例 #8
0
 public BoneAnimationTimeFrameModel GetFrameAt(BoneActor actor, double seconds)
 {
     var items = GetCollectionBoundToActor(actor);
     if (items == null) return null;
     var convertedSeconds = TimeSpan.FromSeconds(seconds);
     return items.FirstOrDefault(i => i.IsIntervalIntesected(convertedSeconds, true)) as BoneAnimationTimeFrameModel;
 }
コード例 #9
0
 public ObservableCollection<TimeFrame> GetCollectionBoundToActor(BoneActor actor)
 {
     if (_timeFramesMapper.ContainsKey(actor))
         return _timeFramesMapper[actor];
     return null;
 }
コード例 #10
0
 public void AddTimeLineFor(BoneActor actor)
 {
     var timeFramecollection = new ObservableCollection<TimeFrame>();
     timeFramecollection.CollectionChanged += CheckIfAnimationTimeFramesCountChanges;
     _timeFramesMapper.Add(actor, timeFramecollection);
 }
コード例 #11
0
        private void SetActorPropertiesToBoneEndState(BoneAnimationTimeFrameModel frame, BoneActor actor, BoneState toState)
        {
            frame.EndState.Translation = toState.Translation;
            frame.EndState.Rotation = toState.Rotation;

            frame.AnimationFrame.EndTranslation = toState.Translation;
            frame.AnimationFrame.EndRotation = toState.Rotation;

            var items = GetCollectionBoundToActor(actor);
            var nextFrame = GetFrameAfter(items, frame);

            if (nextFrame == null) return;

            nextFrame.AnimationFrame.StartTranslation = toState.Translation;
            nextFrame.AnimationFrame.StartRotation = toState.Rotation;
        }
コード例 #12
0
        private void AddNewAnimationFrame(BoneActor actor, double animationEndTimeInSeconds, BoneState fromState, BoneState toState)
        {
            var dataCollection = GetCollectionBoundToActor(actor);
            var frame = GetLastTimeFrame(dataCollection);

            BoneAnimationTimeFrameModel item = null;
            if (frame == null)
            {
                item = new BoneAnimationTimeFrameModel()
                {
                    StartTime = new TimeSpan(),
                    EndTime = TimeSpan.FromSeconds(animationEndTimeInSeconds),
                    StartState = new BoneState()
                    {
                        Rotation = fromState.Rotation,
                        Translation = fromState.Translation
                    },
                    EndState = new BoneState()
                    {
                        Rotation = toState.Rotation,
                        Translation = toState.Translation
                    }
                };
            }
            else
            {
                item = new BoneAnimationTimeFrameModel()
                {
                    StartTime = frame.EndTime,
                    EndTime = TimeSpan.FromSeconds(animationEndTimeInSeconds),
                    StartState = frame.EndState,
                    EndState = new BoneState()
                    {
                        Rotation = toState.Rotation,
                        Translation = toState.Translation
                    }
                };
            }

            var animationFrame = new BoneAnimationFrame()
                {
                    StartTime = item.StartTime,
                    EndTime = item.EndTime,
                    StartTranslation = item.StartState.Translation,
                    StartRotation = item.StartState.Rotation,
                    EndTranslation = item.EndState.Translation,
                    EndRotation = item.EndState.Rotation
                };
            item.AnimationFrame = animationFrame;
            Animation.AddAnimationFrame(actor.AssignedBone, animationFrame);

            dataCollection.Add(item);
        }
コード例 #13
0
 public BoneViewModel GetBoneViewModelFromActor(BoneActor actor)
 {
     if (_boneActorMapper.ContainsKey(actor))
     {
         return _boneActorMapper[actor];
     }
     return null;
 }
コード例 #14
0
 public BoneActorSceneObject(BoneActor boneActor, IPuppeteerSceneOjectActionContext context)
 {
     _boneActor = boneActor;
     _context = context;
     _bone = _boneActor.AssignedBone;
 }
コード例 #15
0
ファイル: BoneViewModel.cs プロジェクト: TiagoJSM/Storytime
 public BoneViewModel(INodeAddedCallback nodeAddCB, ICommand attachToBoneCommand, BoneActor actor)
     : this(null, nodeAddCB, attachToBoneCommand, actor)
 {
 }