private AccumulatedAttributeTransform InvokeMotion(AccumulatedAttributeTransform accumulatedTransforms) { var velocity = (Vector)accumulatedTransforms.CurrentAttributeValue("motion", "velocity"); if (velocity.x != 0 || velocity.y != 0 || velocity.z != 0) { lock (ongoingMotion) { if (!ongoingMotion.Contains(accumulatedTransforms.Entity)) { ongoingMotion.Add(accumulatedTransforms.Entity); } } } else { lock (ongoingMotion) { if (ongoingMotion.Contains(accumulatedTransforms.Entity)) { ongoingMotion.Remove(accumulatedTransforms.Entity); } } } return(accumulatedTransforms); }
private AccumulatedAttributeTransform InvokeSpin(AccumulatedAttributeTransform accumulatedTransforms) { var rotVelocity = (AxisAngle)accumulatedTransforms.CurrentAttributeValue("motion", "rotVelocity"); if (rotVelocity.angle != 0 && !(rotVelocity.axis.x == 0 && rotVelocity.axis.y == 0 && rotVelocity.axis.z == 0)) { lock (ongoingSpin) { if (!ongoingSpin.Contains(accumulatedTransforms.Entity)) { ongoingSpin.Add(accumulatedTransforms.Entity); } } } else { lock (ongoingSpin) { if (ongoingSpin.Contains(accumulatedTransforms.Entity)) { ongoingSpin.Remove(accumulatedTransforms.Entity); } } } return(accumulatedTransforms); }
/// <summary> /// Checks if position of entity has changed and sets y attribute to ground level if y and ground level /// are different /// </summary> /// <param name="accumulatedTransforms">Accumulated transformation that happened in the service chain</param> /// <returns>Accumulated changes with adaptions added by AvatarCollison</returns> internal AccumulatedAttributeTransform Transform(AccumulatedAttributeTransform accumulatedTransforms) { Vector entityPosition = (Vector)accumulatedTransforms.CurrentAttributeValue("location", "position"); Vector adaptedPosition = new Vector(entityPosition.x, (float)accumulatedTransforms.Entity["avatarCollision"]["groundLevel"].Value, entityPosition.z); accumulatedTransforms.AddAttributeTransformation("location", "position", adaptedPosition); return(accumulatedTransforms); }