コード例 #1
0
 public override void TakeControls(ScriptInstance instance, int controls, int accept, int pass_on)
 {
     this[instance] = new ScriptControlData
     {
         Taken   = accept != 0 ? (ControlFlags)controls : ControlFlags.None,
         Ignored = pass_on == 0 ? (ControlFlags)controls : ControlFlags.None
     };
 }
コード例 #2
0
 public ScriptControlData(ScriptControlData data)
 {
     Taken   = data.Taken;
     Ignored = data.Ignored;
 }
コード例 #3
0
        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);
            }
        }