Beispiel #1
0
 /// <summary>
 /// Construct a new instance of the ScriptControlEventArgs class
 /// </summary>
 /// <param name="controls">The controls the script is attempting to take or release to the agent</param>
 /// <param name="pass">True if the script is passing controls back to the agent</param>
 /// <param name="take">True if the script is requesting controls be released to the script</param>
 public ScriptControlEventArgs(ScriptControlChange controls, bool pass, bool take)
 {
     m_Controls = controls;
     m_Pass = pass;
     m_Take = take;
 }
        public ScriptControlData this[ScriptInstance instance]
        {
            get
            {
                ScriptControlData data;
                lock (m_ScriptControls)
                {
                    if (m_ScriptControls.TryGetValue(instance, out data))
                    {
                        return(new ScriptControlData(data));
                    }
                }
                throw new KeyNotFoundException();
            }
            set
            {
                lock (m_ScriptControls)
                {
                    if (value != null)
                    {
                        m_ScriptControls[instance] = new ScriptControlData(value);
                    }
                    else
                    {
                        m_ScriptControls.Remove(instance);
                    }
                    ControlFlags takenControls   = ControlFlags.None;
                    ControlFlags ignoredControls = ControlFlags.None;
                    foreach (var sc in m_ScriptControls.Values)
                    {
                        takenControls   |= sc.Taken;
                        ignoredControls |= sc.Ignored;
                    }
                    TakenControls   = takenControls;
                    IgnoredControls = ignoredControls;
                }
                ControlFlags taken   = TakenControls;
                ControlFlags ignored = IgnoredControls;

                var msg = new ScriptControlChange();
                if (taken != ignored)
                {
                    msg.Data.Add(new ScriptControlChange.DataEntry
                    {
                        Controls     = taken & ~ignored,
                        PassToAgent  = true,
                        TakeControls = true
                    });
                    msg.Data.Add(new ScriptControlChange.DataEntry
                    {
                        Controls     = ignored,
                        PassToAgent  = false,
                        TakeControls = true
                    });
                }
                else if (taken != ControlFlags.None)
                {
                    msg.Data.Add(new ScriptControlChange.DataEntry
                    {
                        Controls     = taken,
                        PassToAgent  = ignored == ControlFlags.None,
                        TakeControls = true
                    });
                }
                else
                {
                    msg.Data.Add(new ScriptControlChange.DataEntry
                    {
                        Controls     = ControlFlags.None,
                        PassToAgent  = true,
                        TakeControls = false
                    });
                }
                SendMessageAlways(msg, SceneID);
            }
        }