public override void OnRemovedFromScene() { _skeletonComponent = null; CloseNodesAndEdges(); Graph = null; base.OnRemovedFromScene(); }
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); } }
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; } } }
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; } }
public override void OnRemovedFromScene() { base.OnRemovedFromScene(); if (_skeleton != null) { _skeleton.OnReloadBones -= BonesReloaded; _skeleton.OnPoseChanged -= PoseChanged; } _skeleton = null; }
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; }
public override void OnRemovedFromScene() { base.OnRemovedFromScene(); if (!IsServer) { return; } RemoveScheduledUpdate(AddEffect); _terrainProvider = null; _statComponent = null; if (_skeleton != null) { _skeleton.OnReloadBones -= SkeletonOnOnReloadBones; } _skeleton = null; }
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); }
private void PoseChanged(MySkeletonComponent obj) { lock (this) _collidersDirty = true; }
private void OnPoseChanged(MySkeletonComponent args) { UpdateLights(); }
private void SkeletonOnOnReloadBones(MySkeletonComponent obj) { _cachedBoneIndex = null; }