public override void OnRemovedFromScene()
 {
     _skeletonComponent = null;
     CloseNodesAndEdges();
     Graph = null;
     base.OnRemovedFromScene();
 }
Ejemplo n.º 2
0
        private void InvalidateBoneMapping(MySkeletonComponent skeleton)
        {
            if (_parentSkeleton?.CharacterBones == null)
            {
                return;
            }
            Array.Resize(ref _boneMapping, _mySkeleton.CharacterBones.Length);
            for (var i = 0; i < _mySkeleton.CharacterBones.Length; i++)
            {
                var bone  = _mySkeleton.CharacterBones[i];
                var match = -1;
                for (var j = 0; j < _parentSkeleton.CharacterBones.Length; j++)
                {
                    var parentBone = _parentSkeleton.CharacterBones[j];
                    if (!bone.Name.Equals(parentBone.Name, StringComparison.OrdinalIgnoreCase))
                    {
                        continue;
                    }
                    match = j;
                    break;
                }

                _boneMapping[i] = match;
            }

            UpdatePose(skeleton);
        }
 private void OnBonesReloaded(MySkeletonComponent obj)
 {
     foreach (var bone in obj.CharacterBones)
     {
         MarkBoneDirty(bone.Name);
     }
 }
Ejemplo n.º 4
0
        private void BonesReloaded(MySkeletonComponent obj)
        {
            for (var i = 0; i < Definition.SphereColliders.Length; i++)
            {
                int idx;
                if (_skeleton.FindBone(Definition.SphereColliders[i].Bone, out idx) != null)
                {
                    _sphereBones[i] = idx;
                }
                else
                {
                    _sphereBones[i] = -1;
                }
            }

            for (var i = 0; i < Definition.CapsuleColliders.Length; i++)
            {
                int idx;
                if (_skeleton.FindBone(Definition.CapsuleColliders[i].Bone, out idx) != null)
                {
                    _capsuleBones[i] = idx;
                }
                else
                {
                    _capsuleBones[i] = -1;
                }
            }
        }
Ejemplo n.º 5
0
        private void UpdatePose(MySkeletonComponent skeleton)
        {
            if (_parentSkeleton == null || _boneMapping == null)
            {
                return;
            }
            for (var i = 0; i < _boneMapping.Length; i++)
            {
                var matched = _boneMapping[i];
                var dest    = _mySkeleton.CharacterBones[i];
                if (matched != -1)
                {
                    var source    = _parentSkeleton.CharacterBones[matched];
                    var srcT      = source.Transform.AbsoluteTransform;
                    var dstParent = dest.Parent?.Transform.AbsoluteTransform ?? MyTransform.Identity;
                    dstParent.Rotation.Conjugate();
                    var tmpPos   = srcT.Position - dstParent.Position;
                    var finalPos = Vector3.Transform(tmpPos, dstParent.Rotation);
                    var finalRot = dest.InheritRotation ? Quaternion.Multiply(dstParent.Rotation, srcT.Rotation) : srcT.Rotation;
                    dest.SetTransform(ref finalPos, ref finalRot);
                }

                dest.ComputeAbsoluteTransform(null, false);
            }

            _mySkeleton.MarkPoseChanged();
        }
 public override void OnAddedToScene()
 {
     base.OnAddedToScene();
     Graph = MySession.Static.Components.Get <BendyController>().GetOrCreateLayer(Definition.Layer);
     _skeletonComponent = Entity.Components.Get <MySkeletonComponent>();
     ReloadNodesAndEdges();
     if (_skeletonComponent != null)
     {
         _skeletonComponent.OnReloadBones += OnBonesReloaded;
     }
 }
Ejemplo n.º 7
0
        public override void OnRemovedFromScene()
        {
            base.OnRemovedFromScene();
            if (_skeleton != null)
            {
                _skeleton.OnReloadBones -= BonesReloaded;
                _skeleton.OnPoseChanged -= PoseChanged;
            }

            _skeleton = null;
        }
Ejemplo n.º 8
0
        public override void OnAddedToScene()
        {
            base.OnAddedToScene();
            _skeleton = Container.Get <MySkeletonComponent>();
            if (_skeleton != null && Definition.IsSkinned)
            {
                _skeleton.OnReloadBones += BonesReloaded;
                _skeleton.OnPoseChanged += PoseChanged;
                BonesReloaded(_skeleton);
            }

            _collidersDirty = true;
        }
Ejemplo n.º 9
0
 public override void OnRemovedFromScene()
 {
     base.OnRemovedFromScene();
     if (!IsServer)
     {
         return;
     }
     RemoveScheduledUpdate(AddEffect);
     _terrainProvider = null;
     _statComponent   = null;
     if (_skeleton != null)
     {
         _skeleton.OnReloadBones -= SkeletonOnOnReloadBones;
     }
     _skeleton = null;
 }
Ejemplo n.º 10
0
        private void CheckSkeleton()
        {
            var newSkeleton = _parentCache?.Get <MySkeletonComponent>();

            if (_parentSkeleton == newSkeleton)
            {
                return;
            }
            if (_parentSkeleton != null)
            {
                _parentSkeleton.OnReloadBones -= InvalidateBoneMapping;
                _parentSkeleton.OnPoseChanged -= UpdatePose;
                _parentSkeleton = null;
            }

            _parentSkeleton = newSkeleton;
            if (_parentSkeleton == null)
            {
                return;
            }
            _parentSkeleton.OnReloadBones += InvalidateBoneMapping;
            _parentSkeleton.OnPoseChanged += UpdatePose;
            InvalidateBoneMapping(_parentSkeleton);
        }
        private void InvalidateBoneMapping(MySkeletonComponent skeleton)
        {
            if (_parentSkeleton == null)
            {
                return;
            }
            Array.Resize(ref _boneMapping, _mySkeleton.CharacterBones.Length);
            for (var i = 0; i < _mySkeleton.CharacterBones.Length; i++)
            {
                var    bone   = _mySkeleton.CharacterBones[i];
                string source = null;
                if (Definition == null || (!Definition.ExplicitMapping.TryGetValue(bone.Name, out source) && Definition.AutomaticMapping))
                {
                    source = bone.Name;
                }
                var             match     = -1;
                MyCharacterBone matchBone = null;
                if (source != null)
                {
                    for (var j = 0; j < _parentSkeleton.CharacterBones.Length; j++)
                    {
                        var parentBone = _parentSkeleton.CharacterBones[j];
                        if (source.Equals(parentBone.Name, StringComparison.OrdinalIgnoreCase))
                        {
                            matchBone = parentBone;
                            match     = j;
                            break;
                        }
                    }
                }

                _boneMapping[i] = match;
            }

            UpdatePose(skeleton);
        }
Ejemplo n.º 12
0
 private void PoseChanged(MySkeletonComponent obj)
 {
     lock (this)
         _collidersDirty = true;
 }
Ejemplo n.º 13
0
 private void OnPoseChanged(MySkeletonComponent args)
 {
     UpdateLights();
 }
Ejemplo n.º 14
0
 private void SkeletonOnOnReloadBones(MySkeletonComponent obj)
 {
     _cachedBoneIndex = null;
 }