Aurora.ScriptEngine.AuroraDotNetEngine.APIs.LSL_Api.llSetKeyframedMotion C# (CSharp) Метод

llSetKeyframedMotion() публичный Метод

public llSetKeyframedMotion ( Aurora.ScriptEngine.AuroraDotNetEngine.LSL_Types.list keyframes, Aurora.ScriptEngine.AuroraDotNetEngine.LSL_Types.list options ) : void
keyframes Aurora.ScriptEngine.AuroraDotNetEngine.LSL_Types.list
options Aurora.ScriptEngine.AuroraDotNetEngine.LSL_Types.list
Результат void
        public void llSetKeyframedMotion(LSL_List keyframes, LSL_List options)
        {
            if (!ScriptProtection.CheckThreatLevel(ThreatLevel.None, "LSL", m_host, "LSL", m_itemID)) return;
            if (!m_host.IsRoot)
            {
                ShoutError("Must be used in the root object!");
                return;
            }
            KeyframeAnimation.Data dataType = KeyframeAnimation.Data.Both;
            KeyframeAnimation.Modes currentMode = KeyframeAnimation.Modes.Forward;
            for (int i = 0; i < options.Length; i += 2)
            {
                LSL_Integer option = options.GetLSLIntegerItem(i);
                LSL_Integer value = options.GetLSLIntegerItem(i + 1);
                if (option == ScriptBaseClass.KFM_COMMAND)
                {
                    m_host.ParentEntity.AddKeyframedMotion(null, (KeyframeAnimation.Commands)value.value);
                    break;//Its supposed to be the only option in the list
                }
                if (option == ScriptBaseClass.KFM_MODE)
                {
                    currentMode = (KeyframeAnimation.Modes)value.value;
                }
                else if (option == ScriptBaseClass.KFM_DATA)
                {
                    dataType = (KeyframeAnimation.Data)value.value;
                }
            }
            List<Vector3> positions = new List<Vector3>();
            List<Quaternion> rotations = new List<Quaternion>();
            List<int> times = new List<int>();
            for (int i = 0; i < keyframes.Length; i += (dataType == KeyframeAnimation.Data.Both ? 3 : 2))
            {
                if (dataType == KeyframeAnimation.Data.Both ||
                    dataType == KeyframeAnimation.Data.Translation)
                {
                    LSL_Vector pos = keyframes.GetVector3Item(i);
                    positions.Add(pos.ToVector3());
                }
                if (dataType == KeyframeAnimation.Data.Both ||
                    dataType == KeyframeAnimation.Data.Rotation)
                {
                    LSL_Rotation rot = keyframes.GetQuaternionItem(i + (dataType == KeyframeAnimation.Data.Both ? 1 : 0));
                    Quaternion quat = rot.ToQuaternion();
                    quat.Normalize();
                    rotations.Add(quat);
                }
                int time = keyframes.GetLSLIntegerItem(i + (dataType == KeyframeAnimation.Data.Both ? 2 : 1));
                times.Add(time);
            }
            KeyframeAnimation animation = new KeyframeAnimation
                                              {
                                                  CurrentMode = currentMode,
                                                  PositionList = positions.ToArray(),
                                                  RotationList = rotations.ToArray(),
                                                  TimeList = times.ToArray(),
                                                  CurrentAnimationPosition = 0,
                                                  InitialPosition = m_host.AbsolutePosition,
                                                  InitialRotation = m_host.RotationOffset
                                              };
            m_host.ParentEntity.AddKeyframedMotion(animation, KeyframeAnimation.Commands.Play);
        }
LSL_Api