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 }; }
public ScriptControlData(ScriptControlData data) { Taken = data.Taken; Ignored = data.Ignored; }
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); } }