public CreateTopologyControl(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, IConfigSource config) : base(tableFactory, queueFactory, primFactory, model, config) { /* //Touch Button IButton floor = Factory.MakeButton("Floor", Permissions, HostPrim.ID); floor.OnTouched += (source, args) => AddRouter(args.AvatarName, args.AvatarID, args.TouchPosition); */ IConfig controlConfig = config.Configs["Control"]; string god = controlConfig.Get(GOD_KEY, GOD); string topologyDefault = controlConfig.Get(TOPOLOGY_KEY, GOD); _listener = (name, id, text, channel) => { string[] args = text.Split(' '); if (id.Equals(HostPrim.Owner) && args[0].ToUpper().Equals("SAVE")) { if (args.Length > 1) { HostPrim.Say("Saving topology as " + args[1]); Topology.SaveTopology(name, id, args[1]); } else { HostPrim.Say("Showing Dialog"); SaveDialog save = new SaveDialog(HostPrim, primFactory, "Topology", topologyDefault, user => Topology.GetUserFolder(god)); save.OnSave += (userName, userID, file) => Topology.SaveTopology(name, id, file); save.Show(name, id); } } }; primFactory.OnChat += _listener; }
public ChatButtonSetupSingle(IPrimFactory factory, IPrim host) { _host = host; _owner = host.Owner; _cont = true; _boundButtons = new HashSet <string>(); _requestedButtons = new HashSet <string>(); Random r = new Random(); _channel = r.Next(int.MinValue, -1); factory.AddChannelListener(_channel, (button, id, text, channel) => { string[] msg = text.Split(','); UUID owner; if (msg.Length == 2 && msg[0].Equals(INIT) && UUID.TryParse(msg[1], out owner) && owner.Equals(_owner)) { _boundButtons.Add(button); if (_requestedButtons.Contains(button)) { _requestedButtons.Remove(button); if (ButtonRegistered != null) { ButtonRegistered(button, _owner); } } } }); NotifyChannel(); }
public SaveDialog(IPrim prim, IPrimFactory factory, string toSave, string defaultName, Func <string, string> getFolder) { _defaultName = defaultName; _toSave = toSave; _getFolder = getFolder; dialog = new Dialog(prim, factory, SAVE, SAVE_AS, Dialog.CANCEL); dialog.ResponseReceived += (name, id, pressed, chatted) => { switch (pressed) { case SAVE: if (OnSave != null) { OnSave(name, id, GetDefaultName(name)); } break; case SAVE_AS: if (chatted == null) { Show(name, id, true); } else if (OnSave != null) { OnSave(name, id, chatted); } break; case Dialog.CANCEL: break; } }; }
public Record(IToggle toggle, SandboxControl control, IPrim hostPrim, IPrimFactory factory, IConfig controlConfig) : base(toggle) { _control = control; _save = new SaveDialog(hostPrim, factory, "sequence", control.DefaultRecordingName, name => control.Record.GetFolder(name)); _save.OnSave += (name, id, file) => control.Record.SaveRecording(name, file); }
public AutosaveHUD(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, IConfigSource config) : base(tableFactory, queueFactory, primFactory, model, config) { _autosaveFile = Path.Combine(Topology.GetFolder(Factory.Owner), AUTOSAVE_NAME); if (File.Exists(_autosaveFile)) Topology.LoadTopology(Factory.Owner, Factory.Host.Owner, _autosaveFile); }
public PrimWrapper(IPrimFactory primFactory, Vector3 position, string name, Color colour, double selected, Parameters parameters) : base(name, colour, selected, parameters) { _log = LogManager.GetLogger(GetType()); _prim = InitPrim(primFactory, position); _prim.Name = name; }
public ChatButtonSetupSingle(IPrimFactory factory, IPrim host) { _host = host; _owner = host.Owner; _cont = true; _boundButtons = new HashSet<string>(); _requestedButtons = new HashSet<string>(); Random r = new Random(); _channel = r.Next(int.MinValue, -1); factory.AddChannelListener(_channel, (button, id, text, channel) => { string[] msg = text.Split(','); UUID owner; if (msg.Length == 2 && msg[0].Equals(INIT) && UUID.TryParse(msg[1], out owner) && owner.Equals(_owner)) { _boundButtons.Add(button); if (_requestedButtons.Contains(button)) { _requestedButtons.Remove(button); if (ButtonRegistered != null) ButtonRegistered(button, _owner); } } }); NotifyChannel(); }
public VPacket(IPacket packet, IVNode from, IVNode to, IVLink link, IPrimFactory primFactory, IAsynchQueue queue, View view) : base(primFactory, from.Pos, packet.Name, packet.Colour, packet.Selected, packet.Parameters) { Prim.Editable = false; _packet = packet; _from = from; _to = to; _link = link; _step = 0; _view = view; Selected = packet.Selected; Configure(); _deleteListener = id => Dropped("Visualisation layer dropped " + Name + "."); _from.OnWorldMove += (id, oldPos, newPos) => Reconfigure(); _to.OnWorldMove += (id, oldPos, newPos) => Reconfigure(); _from.OnAPIMove += (id, oldPos, newPos) => Reconfigure(); _to.OnAPIMove += (id, oldPos, newPos) => Reconfigure(); link.OnWeightChanged += (id, weight) => Reconfigure(); link.OnWorldDelete += _deleteListener; link.OnSystemDelete += _deleteListener; //_tickListener = () => queue.QueueWorkItem(state => UpdatePosition()); _tickListener = () => queue.QWork("Move Packet", () => UpdatePosition()); view.OnTick += _tickListener; }
public static void Init(IConfig controlConfig, UUID godID, Control control, IPrimFactory factory) { factory.AddLinkSetRoot(factory.Host.ID); string userFolder = controlConfig.Get("UserFolder", "."); string godName = controlConfig.GetString(GOD_KEY, GOD); string sequenceFolder = controlConfig.Get("SequenceFolder", "."); string sequence = controlConfig.GetString(SEQUENCE_KEY); if (sequence == null) { control.HostPrim.Say("Unable to start sequence control. No sequence file specified."); throw new Exception("Unable to start sequence control. No sequence file specified."); } string location = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, Path.Combine(userFolder, Path.Combine(godName, Path.Combine(sequenceFolder, sequence)))); if (!File.Exists(location)) { control.HostPrim.Say("Unable to start sequence control. Sequence File '" + location + "' does not exist."); throw new Exception("Unable to start sequence control. Sequence File '" + location + "' does not exist."); } IButton PlayButton = control.MakeButton("Play"); IButton PauseButton = control.MakeButton("Pause"); IButton StopButton = control.MakeButton("Stop"); IButton StepButton = control.MakeButton("Step"); IToggle PauseToggle = new Toggle(PauseButton, 1, control.ToggleGlow); foreach (var pause in PauseToggle.Prims) { pause.Colour = Color.White; } PlayButton.OnTouched += (source, args) => { if (!control.Record.PlayingSequence) { control.Clear(godName, godID); control.Record.PlayRecording(godName, godID, sequence); } }; StopButton.OnTouched += (source, args) => { control.Record.StopPlayback(); control.Clear(godName, godID); control.HostPrim.Say("Stopped playback."); }; PauseToggle.OnToggled += (source, args) => { control.Record.Paused = PauseToggle.IsOn; foreach (var prim in PauseToggle.Prims) { prim.Glow = PauseToggle.IsOn ? .1d : 0d; prim.Colour = Color.White; } }; StepButton.OnTouched += (source, args) => { if (!control.Model.Step() && control.Record.PlayingSequence) { control.Record.PlayNextEvent(); } }; }
protected override IPrim InitPrim(IPrimFactory primFactory, Vector3 position) { IPrim p = primFactory.MakePrim(Name, position, DefaultColour, new Vector3(0f, 0f, .001f), PrimType.Cylinder); p.Editable = false; return(p); }
public PrimWrapper(IPrimFactory primFactory, Vector3 position, string name) : base(name) { _log = LogManager.GetLogger(GetType()); _prim = InitPrim(primFactory, position); _prim.Name = name; }
public SelectDialog(IPrim prim, IPrimFactory factory, Func <string, string> getFolder, string sharedFolder) { _getFolder = getFolder; _sharedFolder = sharedFolder; _fileSubsets = new Dictionary <UUID, int>(); _dialog = new Dialog(prim, factory); _dialog.ResponseReceived += (name, id, pressed, chatted) => { switch (pressed) { case MORE: ShowNextSet(name, id); break; case Dialog.CANCEL: _fileSubsets.Remove(id); break; default: _fileSubsets.Remove(id); if (OnSelect != null) { OnSelect(name, id, pressed); } break; } }; }
public Record(IToggle toggle, SandboxControl control, IPrim hostPrim, IPrimFactory factory, IConfig controlConfig) : base(toggle) { _control = control; _save = new SaveDialog(hostPrim, factory, "sequence", control.DefaultRecordingName, name => control.Record.GetUserFolder(name)); _save.OnSave += (name, id, file) => control.Record.SaveRecording(name, file); }
public SandboxControlLink(ILink link, INode from, INode to, SandboxControl control, IKeyTableFactory tableFactory, IPrimFactory primFactory, IPermissions permissions) : base(link, from, to, control, permissions) { _control = control; _bufferedChanges = tableFactory.MakeKeyTable<double>(); _dialog = new Dialog(control.HostPrim, primFactory, LINK_BUTTONS); _dialog.ResponseReceived += DialogPressed; }
public View(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IConfigSource config) : base(tableFactory, queueFactory) { _factory = primFactory; _displayingBoards = tableFactory.MakeKeyTable <IEnumerable <UUID> >(); _moveQ = queueFactory.MakeQueue(); _deliverQ = queueFactory.MakeQueue(); //_moveQ = new SmartThreadPool(int.MaxValue, 30, 3); IConfig viewConfig = config.Configs["View"]; if (viewConfig == null) { viewConfig = config.Configs[0]; } _wait = viewConfig.GetInt("Wait", _wait); _waitMultiplier = viewConfig.GetFloat("WaitMultiplier", 5f); _displayChannel = viewConfig.GetInt("ListeningChannel", -43); _autoUpdate = viewConfig.GetBoolean("AutoUpdateTables", false); int tableResolution = viewConfig.GetInt("TableResolution", -1); if (tableResolution > 0) { VNode.SetTableResolution(tableResolution); } _moveQ.Start("View Move Queue" /*, viewConfig.GetInt("PacketsPerThread", PACKETS_PER_THREAD)*/); _deliverQ.Start("View Deliver Queue"); //_moveQ.Start(); VLink.MaxWidth = viewConfig.GetFloat("maxLinkWidth", VLink.MaxWidth); VLink.MinWidth = viewConfig.GetFloat("minLinkWidth", VLink.MinWidth); VPacket.MaxMovesPerUnit = viewConfig.GetInt("maxNumPacketMovesPerUnit", VPacket.MaxMovesPerUnit); VPacket.MinMovesPerUnit = viewConfig.GetInt("minNumPacketMovesPerUnit", VPacket.MinMovesPerUnit); VPacket.DefaultMovesPerUnit = viewConfig.GetInt("defaultNumPacketMovesPerUnit", VPacket.DefaultMovesPerUnit); _tickThread = new Thread(() => { _cont = true; int wait = (int)(Wait * _waitMultiplier); int tick = 0; while (_cont) { Util.Wait(wait, _cont && wait > 0, this); DateTime start = DateTime.Now; if (_cont && OnTick != null) { OnTick(); } wait = (int)((Wait * _waitMultiplier) - DateTime.Now.Subtract(start).TotalMilliseconds); tick++; } }); _tickThread.Name = "View Tick Thread"; _tickThread.Start(); Logger.Info("View started."); }
public AdvancedControl(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, UUID hostID, IConfigSource config) : base(tableFactory, queueFactory, primFactory, model, hostID, config) { IConfig controlConfig = config.Configs["Control"]; if (controlConfig == null) controlConfig = config.Configs[0]; _defaultTopologyName = controlConfig.Get("DefaultTopologyName", "Topology"); _defaultRecordingName = controlConfig.Get("DefaultSequenceName", "Sequence"); }
public SequenceControl(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, IConfigSource config) : base(tableFactory, queueFactory, primFactory, model, config) { IConfig controlConfig = config.Configs[CONTROL_CONFIG]; if (controlConfig == null) controlConfig = config.Configs[0]; Init(controlConfig, HostPrim.Owner, this, Factory); }
public Clear(IButton button, IControlUtil control, IPrimFactory factory) : base(button) { _control = control; _dialog = new Dialog(button.Prims.Count() > 0 ? button.Prims.First() : factory.Host, factory, YES, NO); _dialog.ResponseReceived += (name, id, text, chat) => { if (text.Equals(YES)) _control.Clear(name, id); }; }
protected override IPrim InitPrim(IPrimFactory primFactory, Vector3 position) { IPrim p = primFactory.MakePrim(Name, position, DefaultColour, new Vector3(0f, 0f, .001f), PrimType.Cylinder); p.Editable = false; //ISpy<IPrim> pSpy = new Spy<IPrim>(p); //pSpy.OnMethodEvent += (source, method, ret, parameters) => p.Say("Called " + method.Name); //return pSpy.Instance; return(p); }
public ChangeAlg(IButton button, IControlUtil control, IPrimFactory factory) : base(button) { _control = control; _dialog = new Dialog(button.Prims.Count() > 0 ? button.Prims.First() : factory.Host, factory, control.Model.Algorithms.Concat(new String[] { Dialog.CANCEL }).ToArray()); _dialog.ResponseReceived += (name, id, text, chat) => { if (!text.Equals(Dialog.CANCEL)) _control.Model.SetAlgorithm(text); }; }
public Dialog(IPrim prim, IPrimFactory factory) { _prim = prim; _primFactory = factory; _receivedText = new Dictionary<UUID, string>(); _primFactory.AddChannelListener(ChatChannel, (name, id, text, channel) => { if (_receivedText.ContainsKey(id)) _receivedText[id] = text; }); }
protected override IPrim InitPrim(IPrimFactory primFactory, Vector3 position) { bool isEP = Parameters.Get <bool>("IsEP"); bool locked = Parameters.Get <bool>("Lock"); Logger.Info("Creating prim with colour " + DefaultColour); IPrim p = primFactory.MakePrim(Name, position, DefaultColour, new Vector3(.5f, .5f, .5f), isEP ? PrimType.Cylinder : PrimType.Sphere, Quaternion.Identity); p.Editable = !locked; return(p); }
protected override void InitButtons(Dictionary<string, List<IPrim>> primNames, IPrimFactory factory) { base.InitButtons(primNames, factory); float x = 0f; float y = -2.5f; float z = .75f; float inc = 1.5f; Vector3 scale = new Vector3(.6f, 1f, 1f); AddButton(primNames, "Load", new Vector3(x, y, z), scale, LoadButtonTouched); AddButton(primNames, "Save", new Vector3(x, y += inc, z), scale, SaveTopologyTouched); }
public ChangeAlg(IButton button, IControlUtil control, IPrimFactory factory) : base(button) { _control = control; _dialog = new Dialog(button.Prims.Count() > 0 ? button.Prims.First() : factory.Host, factory, control.Model.Algorithms.Concat(new String[] { Dialog.CANCEL }).ToArray()); _dialog.ResponseReceived += (name, id, text, chat) => { if (!text.Equals(Dialog.CANCEL)) { _control.Model.SetAlgorithm(text); } }; }
public Dialog(IPrim prim, IPrimFactory factory) { _prim = prim; _primFactory = factory; _receivedText = new Dictionary <UUID, string>(); _primFactory.AddChannelListener(ChatChannel, (name, id, text, channel) => { if (_receivedText.ContainsKey(id)) { _receivedText[id] = text; } }); }
public RoutingTable(IButton button, Module.Control control, IPrimFactory primFactory) { _selectedButtons = new HashSet <UUID>(); _factory = primFactory; _control = control; _button = button; foreach (var prim in button.Prims) { control.Record.MakeMapped <IEntity>(new MappableEntity(prim)); } button.OnTouched += (source, args) => { if (_selectedButtons.Contains(source)) { primFactory[source].Glow = 0d; _selectedButtons.Remove(source); if (_selectedButtons.Count == 0) { control.State.ResetState(args.AvatarName, args.AvatarID); } } else { string state = control.State.GetState(args.AvatarName, args.AvatarID); if (state.Equals(SandboxControl.EPSelected) || state.Equals(SandboxControl.RouterSelected)) { ILogicEntity selectedNode = control.State.GetSelectedEntity(args.AvatarName, args.AvatarID); _control.HostPrim.Say("Displaying forwarding table for " + selectedNode.Name); control.Model.DisplayForwardingTable(selectedNode.ID, new Parameters(), source); control.State.ResetState(args.AvatarName, args.AvatarID); } else { _selectedButtons.Add(source); if (!_prims.Contains(source)) { control.Record.MakeMapped <IEntity>(new MappableEntity(primFactory[source])); _prims.Add(source); } primFactory[source].Glow = control.ToggleGlow; control.State.SetState(SandboxControl.DisplayTableSelected, args.AvatarName, args.AvatarID); } } }; control.State.OnStateChange += (source, args) => { if (!args.NewState.Equals(SandboxControl.DisplayTableSelected)) { ResetSelected(); } }; }
public Clear(IButton button, IControlUtil control, IPrimFactory factory) : base(button) { _control = control; _dialog = new Dialog(button.Prims.Count() > 0 ? button.Prims.First() : factory.Host, factory, YES, NO); _dialog.ResponseReceived += (name, id, text, chat) => { if (text.Equals(YES)) { _control.Clear(name, id); } }; }
protected override Dictionary<string, List<IPrim>> GetPrimNames(IPrimFactory primFactory) { Dictionary<string, List<IPrim>> primNames = new Dictionary<string, List<IPrim>>(); foreach (IPrim child in HostPrim.Children) { if (child == null) continue; if (!primNames.ContainsKey(child.Name)) primNames.Add(child.Name, new List<IPrim>()); primNames[child.Name].Add(child); } return primNames; }
public static void Init(IConfig controlConfig, UUID godID, Control control, IPrimFactory factory) { factory.AddLinkSetRoot(factory.Host.ID); string userFolder = controlConfig.Get("UserFolder", "."); string godName = controlConfig.GetString(GOD_KEY, GOD); string sequenceFolder = controlConfig.Get("SequenceFolder", "."); string sequence = controlConfig.GetString(SEQUENCE_KEY); if (sequence == null) { control.HostPrim.Say("Unable to start sequence control. No sequence file specified."); throw new Exception("Unable to start sequence control. No sequence file specified."); } string location = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, Path.Combine(userFolder, Path.Combine(godName, Path.Combine(sequenceFolder, sequence)))); if (!File.Exists(location)) { control.HostPrim.Say("Unable to start sequence control. Sequence File '" + location + "' does not exist."); throw new Exception("Unable to start sequence control. Sequence File '" + location + "' does not exist."); } IButton PlayButton = control.MakeButton("Play"); IButton PauseButton = control.MakeButton("Pause"); IButton StopButton = control.MakeButton("Stop"); IButton StepButton = control.MakeButton("Step"); IToggle PauseToggle = new Toggle(PauseButton, 1, control.ToggleGlow); foreach (var pause in PauseToggle.Prims) pause.Colour = Color.White; PlayButton.OnTouched += (source, args) => { if (!control.Record.PlayingSequence) { control.Clear(godName, godID); control.Record.PlayRecording(godName, godID, sequence); } }; StopButton.OnTouched += (source, args) => { control.Record.StopPlayback(); control.Clear(godName, godID); control.HostPrim.Say("Stopped playback."); }; PauseToggle.OnToggled += (source, args) => { control.Record.Paused = PauseToggle.IsOn; foreach (var prim in PauseToggle.Prims) { prim.Glow = PauseToggle.IsOn ? .1d : 0d; prim.Colour = Color.White; } }; StepButton.OnTouched += (source, args) => { if (!control.Model.Step() && control.Record.PlayingSequence) control.Record.PlayNextEvent(); }; }
public AbstractLogger(TToLog toWrap, IPrimFactory primFactory) { _toWrap = toWrap; _primFactory = primFactory; _logType = typeof(TToLog); _lastEvent = default(DateTime); _name = typeof(TToLog).FullName + "GenericLogger"; _logger = LogManager.GetLogger(_name); AddNodeCreator(Parameters.VectorType, LogVector); AddNodeCreator(Parameters.IdType, LogID); AddNodeCreator(typeof(Parameters), LogParameters); }
public Control(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, IConfigSource config) : base(tableFactory, queueFactory) { ControlConfig = config.Configs[CONTROL_CONFIG]; IConfig commonConfig = config.Configs["Common"]; if (ControlConfig == null) { ControlConfig = config.Configs[0]; } if (commonConfig == null) { commonConfig = config.Configs[0]; } _toggleGlow = ControlConfig.GetDouble("ToggleGlow", .15); _fade = ControlConfig.GetDouble("Fade", .8); _defaultRecordingName = ControlConfig.Get("DefaultSequenceName", "Sequence"); _defaultTopologyName = ControlConfig.Get("DefaultTopologyName", "Topology"); _multiNumber = ControlConfig.GetInt("MultiSendNumber", 10); _multiSendDelay = ControlConfig.GetInt("MultiSendDelay", 750); _wait = commonConfig.GetInt("Wait", 50); _factory = primFactory; _record = MakeRecord(ControlConfig, tableFactory, queueFactory, primFactory); _topology = MakeTopology(ControlConfig); _permissions = MakePermissions(tableFactory, config); _state = MakeState(tableFactory, config); _model = Record.Make <IModel>(model, false); string tableName = ControlConfig.Get(TABLE_KEY, null); int tableCount = ControlConfig.GetInt(TABLE_COUNT, 1); _tables = new List <RoutingTable>(); if (tableName != null && tableCount > 1) { for (int i = 1; i <= tableCount; i++) { _tables.Add(new RoutingTable(Factory.MakeButton(tableName + i, Permissions), this, Factory)); } } else if (tableName != null) { _tables.Add(new RoutingTable(Factory.MakeButton(tableName, Permissions), this, Factory)); } _tables.Add(new RoutingTable(Factory.MakeButton(ControlConfig.Get(TABLE_HUD_KEY, "TableDisplayHUD"), Permissions), this, Factory)); Logger.Info("Control started."); }
public OriginalControl(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, UUID hostID, IConfigSource config) : base(tableFactory, queueFactory) { _hostPrim = primFactory[hostID]; _readerMap = new Dictionary <string, UUID>(); _writerMap = tableFactory.MakeKeyTable <string>(); _paused = tableFactory.MakeKeyTable <bool>(); IConfig controlConfig = config.Configs["Control"]; IConfig commonConfig = config.Configs["Common"]; if (controlConfig == null) { controlConfig = config.Configs[0]; } if (commonConfig == null) { commonConfig = config.Configs[0]; } _wait = commonConfig.GetInt("Wait", 50); _userFolder = controlConfig.Get("UserFolder", "."); _recordingEnabled = controlConfig.GetBoolean("RecordingEnabled", false); _timing = controlConfig.GetBoolean("TimedPlayback", true); _schemaFile = controlConfig.GetString("TopologySchema", null); _reader = new OpenSimLogReader(_readerMap, model, HostPrim.Pos); _reader.MapInstance <IModule>(this); _writers = tableFactory.MakeKeyTable <IXmlLogWriter>(); _factory = primFactory; if (_recordingEnabled) { _modelWriter = new OpenSimLogWriter <IModel>(_writerMap, model, HostPrim.Pos, true, false); _model = _modelWriter.Instance; IXmlLogWriter <IModule> baseWriter = new OpenSimLogWriter <IModule>(_writerMap, this, HostPrim.Pos, true); _recordingBase = baseWriter.Instance; _writers.Add(hostID, baseWriter); } else { _model = model; } Namespace = controlConfig.Get("Namespace", Namespace); Logger.Info("Control started."); }
public RoutingTable(IButton button, Module.Control control, IPrimFactory primFactory) { _selectedButtons = new HashSet<UUID>(); _factory = primFactory; _control = control; _button = button; foreach (var prim in button.Prims) { control.Record.MakeMapped<IEntity>(new MappableEntity(prim)); prim.Glow = 0d; if (prim.IsAttachment) prim.Colour = Color.LightGray; } button.OnTouched += (source, args) => { IPrim p = primFactory[source]; if (_selectedButtons.Contains(source)) { p.Glow = 0d; if (p.IsAttachment) p.Colour = Color.LightGray; _selectedButtons.Remove(source); if (_selectedButtons.Count == 0) control.State.ResetState(args.AvatarName, args.AvatarID); } else { string state = control.State.GetState(args.AvatarName, args.AvatarID); if (state.Equals(SandboxControl.EPSelected) || state.Equals(SandboxControl.RouterSelected)) { ILogicEntity selectedNode = control.State.GetSelectedEntity(args.AvatarName, args.AvatarID); _control.HostPrim.Say("Displaying forwarding table for " + selectedNode.Name); control.Model.DisplayForwardingTable(selectedNode.ID, new Parameters(), source); control.State.ResetState(args.AvatarName, args.AvatarID); } else { _selectedButtons.Add(source); if (!_prims.Contains(source)) { control.Record.MakeMapped<IEntity>(new MappableEntity(primFactory[source])); _prims.Add(source); } p.Glow = control.ToggleGlow; if (p.IsAttachment) p.Colour = Color.White; control.State.SetState(SandboxControl.DisplayTableSelected, args.AvatarName, args.AvatarID); } } }; control.State.OnStateChange += (source, args) => { if (!args.NewState.Equals(SandboxControl.DisplayTableSelected)) ResetSelected(); }; }
public VLink(IPrimFactory primFactory, IVNode from, IVNode to, float weight = default(float), Parameters parameters = null, bool bidirectional = true) : base(primFactory, GetPos(from.Pos, to.Pos), "Link between " + from.Name + " and " + to.Name, Color.White, 0d, parameters) { From = from; To = to; IsBidirectional = bidirectional; Parameters = parameters == null ? new Parameters() : parameters; Weight = weight; from.OnWorldMove += (id, oldPos, newPos) => LengthChanged(oldPos, To.Pos); to.OnWorldMove += (id, oldPos, newPos) => LengthChanged(From.Pos, oldPos); from.OnAPIMove += (id, oldPos, newPos) => LengthChanged(oldPos, To.Pos); to.OnAPIMove += (id, oldPos, newPos) => LengthChanged(From.Pos, oldPos); Position(); }
protected override Dictionary <string, List <IPrim> > GetPrimNames(IPrimFactory primFactory) { Dictionary <string, List <IPrim> > primNames = new Dictionary <string, List <IPrim> >(); foreach (IPrim child in HostPrim.Children) { if (child == null) { continue; } if (!primNames.ContainsKey(child.Name)) { primNames.Add(child.Name, new List <IPrim>()); } primNames[child.Name].Add(child); } return(primNames); }
public ModifyLinks(IButton button, SandboxControl control, IPrimFactory factory) : base(button) { _control = control; _dialog = new Dialog(button.Prims.Count() > 0 ? button.Prims.First() : factory.Host, factory, SandboxControlLink.UNIT, SandboxControlLink.LENGTH, SandboxControlLink.RANDOM, Dialog.CANCEL); _dialog.ResponseReceived += (name, id, text, chat) => { switch (text) { case SandboxControlLink.UNIT: SandboxControlLink.SetType(name, id, ControlLink.LinkType.Unit, _control, GetParameters(id)); break; case SandboxControlLink.RANDOM: SandboxControlLink.SetType(name, id, ControlLink.LinkType.Random, _control, GetParameters(id)); break; case SandboxControlLink.LENGTH: SandboxControlLink.SetType(name, id, ControlLink.LinkType.Length, _control, GetParameters(id)); break; } }; }
public Open(IButton button, IControlUtil control, IPrimFactory factory) : base(button) { IPrim prim = button.Prims.Count() > 0 ? button.Prims.First() : factory.Host; _dialog = new Dialog(prim, factory, SEQUENCE, TOPOLOGY, Dialog.CANCEL); SelectDialog openSequenceDialog = new SelectDialog(prim, factory, name => control.Record.GetUserFolder(name), control.Record.SharedFolder); SelectDialog openTopologyDialog = new SelectDialog(prim, factory, name => control.Topology.GetUserFolder(name), control.Topology.SharedFolder); _dialog.ResponseReceived += (name, id, text, chat) => { if (text.Equals(Dialog.CANCEL)) return; switch (text) { case SEQUENCE: openSequenceDialog.Show(name, id); break; case TOPOLOGY: openTopologyDialog.Show(name, id); break; } }; openSequenceDialog.OnSelect += (name, id, file) => control.Record.PlayRecording(name, id, file); openTopologyDialog.OnSelect += (name, id, file) => control.Topology.LoadTopology(name, id, file); }
public LockedPermissions(IPrimFactory factory, IConfigSource config, IPrim host, Control.Impl.Module.Control control) { _ownerID = UUID.Zero; _host = host; IConfig controlConfig = config.Configs["Control"]; double fade = controlConfig.GetDouble("LockFade", control.Fade); double glow = controlConfig.GetDouble("LockGlow", control.ToggleGlow); _lockWait = controlConfig.GetInt("ControlsLockTimeout", 300000); _lockToggle = new Toggle(factory.MakeButton("Lock", new LockPermissions(this)), fade, glow); _lockToggle.OnToggledOn += (source, args) => SetCurrentOwner(args.ID, args.Name); _lockToggle.OnToggledOff += (source, args) => { _ownerID = UUID.Zero; _host.Say(_ownerName + " relinquished control of sandbox."); JM726.Lib.Static.Util.Wake(this); }; _lockToggle.OnTouched += (source, args) => { if (_Locked && !args.AvatarID.Equals(_ownerID)) _host.Say("Unable to take control of sandbox. Sandbox is currently locked to '" + _ownerName + "'."); }; }
public CreateSequenceControl(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, IConfigSource config) : base(tableFactory, queueFactory, primFactory, model, config) { IConfig controlConfig = config.Configs["Control"]; string god = controlConfig.Get(GOD_KEY, GOD); string topology = controlConfig.Get(TOPOLOGY_KEY, null); string sequenceDefault = controlConfig.Get(SEQUENCE_KEY, SEQUENCE); if (topology != null) Topology.LoadTopology(god, Factory.Host.Owner, topology); _listener = (name, id, text, channel) => { string[] args = text.Split(' '); if (id.Equals(HostPrim.Owner) && args[0].ToUpper().Equals("SAVE")) { if (args.Length > 1) { HostPrim.Say("Saving sequence as " + args[1]); if (topology != null) Record.SaveRecording(god, args[1], topology); else Record.SaveRecording(god, args[1]); } else { HostPrim.Say("Showing Dialog"); SaveDialog save = new SaveDialog(HostPrim, primFactory, "Sequence", sequenceDefault, user => Record.GetUserFolder(god)); save.OnSave += (user, userID, file) => { if (topology == null) Record.SaveRecording(god, file); else Record.SaveRecording(god, file, topology); }; save.Show(name, id); } } }; primFactory.OnChat += _listener; Record.StartRecording(); }
public SelectDialog(IPrim prim, IPrimFactory factory, Func<string, string> getFolder) { _getFolder = getFolder; _fileSubsets = new Dictionary<UUID, int>(); _dialog = new Dialog(prim, factory); _dialog.ResponseReceived += (name, id, pressed, chatted) => { switch (pressed) { case MORE: ShowNextSet(name, id); break; case Dialog.CANCEL: _fileSubsets.Remove(id); break; default: _fileSubsets.Remove(id); if (OnSelect != null) OnSelect(name, id, pressed); break; } }; }
public TopologyControl(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, IConfigSource config) : base(tableFactory, queueFactory, primFactory, model, config) { IConfig control = config.Configs[CONTROL_CONFIG]; if (control == null) control = config.Configs[0]; _reposition = !control.GetBoolean("RotateWithHost", true) && control.GetBoolean("Reposition", true); _hostPos = HostPrim.Pos; _hostRot = HostPrim.Rotation; string topology = control.GetString(TOPOLOGY_KEY); string godName = control.GetString(GOD_KEY, GOD); if (topology == null) { HostPrim.Say("Unable to start topology control. No topology file specified."); throw new Exception("Unable to start topology control. No topology file specified."); } Topology.LoadTopology(godName, HostPrim.Owner, topology); HostPrim.Say("Started Topology Control."); Factory.AddLinkSetRoot(Factory.Host.ID); IButton PauseButton = MakeButton("Pause"); IButton StepButton = MakeButton("Step"); IToggle PauseToggle = new Toggle(PauseButton, 1, ToggleGlow); foreach (var pause in PauseToggle.Prims) pause.Colour = Color.White; PauseToggle.OnToggled += (source, args) => { Record.Paused = PauseToggle.IsOn; foreach (var prim in PauseToggle.Prims) { prim.Glow = PauseToggle.IsOn ? .1d : 0d; prim.Colour = Color.White; } }; StepButton.OnTouched += (source, args) => Model.Step(); }
public SaveDialog(IPrim prim, IPrimFactory factory, string toSave, string defaultName, Func<string, string> getFolder) { _defaultName = defaultName; _toSave = toSave; _getFolder = getFolder; dialog = new Dialog(prim, factory, SAVE, SAVE_AS, Dialog.CANCEL); dialog.ResponseReceived += (name, id, pressed, chatted) => { switch (pressed) { case SAVE: if (OnSave != null) OnSave(name, id, GetDefaultName(name)); break; case SAVE_AS: if (chatted == null) Show(name, id, true); else if (OnSave != null) OnSave(name, id, chatted); break; case Dialog.CANCEL: break; } }; }
public LockedPermissions(IPrimFactory factory, IConfigSource config, IPrim host, Control.Impl.Module.Control control) { _ownerID = UUID.Zero; _host = host; IConfig controlConfig = config.Configs["Control"]; double fade = controlConfig.GetDouble("LockFade", control.Fade); double glow = controlConfig.GetDouble("LockGlow", control.ToggleGlow); _lockWait = controlConfig.GetInt("ControlsLockTimeout", 300000); _lockToggle = new Toggle(factory.MakeButton("Lock", new LockPermissions(this)), fade, glow); _lockToggle.OnToggledOn += (source, args) => SetCurrentOwner(args.ID, args.Name); _lockToggle.OnToggledOff += (source, args) => { _ownerID = UUID.Zero; _host.Say(_ownerName + " relinquished control of sandbox."); JM726.Lib.Static.Util.Wake(this); }; _lockToggle.OnTouched += (source, args) => { if (_Locked && !args.AvatarID.Equals(_ownerID)) { _host.Say("Unable to take control of sandbox. Sandbox is currently locked to '" + _ownerName + "'."); } }; }
public Open(IButton button, IControlUtil control, IPrimFactory factory) : base(button) { IPrim prim = button.Prims.Count() > 0 ? button.Prims.First() : factory.Host; _dialog = new Dialog(prim, factory, SEQUENCE, TOPOLOGY, Dialog.CANCEL); SelectDialog openSequenceDialog = new SelectDialog(prim, factory, name => control.Record.GetUserFolder(name), control.Record.SharedFolder); SelectDialog openTopologyDialog = new SelectDialog(prim, factory, name => control.Topology.GetUserFolder(name), control.Topology.SharedFolder); _dialog.ResponseReceived += (name, id, text, chat) => { if (text.Equals(Dialog.CANCEL)) { return; } switch (text) { case SEQUENCE: openSequenceDialog.Show(name, id); break; case TOPOLOGY: openTopologyDialog.Show(name, id); break; } }; openSequenceDialog.OnSelect += (name, id, file) => control.Record.PlayRecording(name, id, file); openTopologyDialog.OnSelect += (name, id, file) => control.Topology.LoadTopology(name, id, file); }
public IndividualControl(IHost host, IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, UUID hostID, IConfigSource config) : base(tableFactory, queueFactory, primFactory, model, hostID, config) { _owner = host.Object.OwnerId; }
public Save(IButton button, SandboxControl control, IPrimFactory factory, IConfig controlConfig) : base(button) { _save = new SaveDialog(button.Prims.Count() > 0 ? button.Prims.First() : factory.Host, factory, "topology", control.DefaultTopologyName, name => control.Topology.GetFolder(name)); _save.OnSave += (name, id, file) => control.Topology.SaveTopology(name, id, file); }
public CreateTopologyControl(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, IConfigSource config) : base(tableFactory, queueFactory, primFactory, model, config) { /* * //Touch Button * IButton floor = Factory.MakeButton("Floor", Permissions, HostPrim.ID); * floor.OnTouched += (source, args) => AddRouter(args.AvatarName, args.AvatarID, args.TouchPosition); */ IConfig controlConfig = config.Configs["Control"]; string god = controlConfig.Get(GOD_KEY, GOD); string topologyDefault = controlConfig.Get(TOPOLOGY_KEY, GOD); _listener = (name, id, text, channel) => { string[] args = text.Split(' '); if (id.Equals(HostPrim.Owner) && args[0].ToUpper().Equals("SAVE")) { if (args.Length > 1) { HostPrim.Say("Saving topology as " + args[1]); Topology.SaveTopology(name, id, args[1]); } else { HostPrim.Say("Showing Dialog"); SaveDialog save = new SaveDialog(HostPrim, primFactory, "Topology", topologyDefault, user => Topology.GetUserFolder(god)); save.OnSave += (userName, userID, file) => Topology.SaveTopology(name, id, file); save.Show(name, id); } } }; primFactory.OnChat += _listener; }
public VNode(IPrimFactory primFactory, string name, Vector3 position, Color colour, Parameters parameters) : base(primFactory, position, name, colour, 0d, parameters) { _boards = new HashSet<IPrim>(); }
protected override IPrim InitPrim(IPrimFactory primFactory, Vector3 position) { bool isEP = Parameters.Get<bool>("IsEP"); bool locked = Parameters.Get<bool>("Lock"); Logger.Info("Creating prim with colour " + DefaultColour); IPrim p = primFactory.MakePrim(Name, position, DefaultColour, new Vector3(.5f, .5f, .5f), isEP ? PrimType.Cylinder : PrimType.Sphere, Quaternion.Identity); p.Editable = !locked; return p; }
public TopologyControl(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, IConfigSource config) : base(tableFactory, queueFactory, primFactory, model, config) { IConfig control = config.Configs[CONTROL_CONFIG]; if (control == null) { control = config.Configs[0]; } _reposition = !control.GetBoolean("RotateWithHost", true) && control.GetBoolean("Reposition", true); _hostPos = HostPrim.Pos; _hostRot = HostPrim.Rotation; string topology = control.GetString(TOPOLOGY_KEY); string godName = control.GetString(GOD_KEY, GOD); if (topology == null) { HostPrim.Say("Unable to start topology control. No topology file specified."); throw new Exception("Unable to start topology control. No topology file specified."); } Topology.LoadTopology(godName, HostPrim.Owner, topology); HostPrim.Say("Started Topology Control."); Factory.AddLinkSetRoot(Factory.Host.ID); IButton PauseButton = MakeButton("Pause"); IButton StepButton = MakeButton("Step"); IToggle PauseToggle = new Toggle(PauseButton, 1, ToggleGlow); foreach (var pause in PauseToggle.Prims) { pause.Colour = Color.White; } PauseToggle.OnToggled += (source, args) => { Record.Paused = PauseToggle.IsOn; foreach (var prim in PauseToggle.Prims) { prim.Glow = PauseToggle.IsOn ? .1d : 0d; prim.Colour = Color.White; } }; StepButton.OnTouched += (source, args) => Model.Step(); }
public Dialog(IPrim prim, IPrimFactory factory, params string[] buttons) : this(prim, factory) { _buttons = buttons; }
protected override IPrim InitPrim(IPrimFactory primFactory, Vector3 position) { IPrim p = primFactory.MakePrim(Name, position, DefaultColour, new Vector3(0f, 0f, .001f), PrimType.Cylinder); p.Editable = false; return p; }
public AutosaveHUD(IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory, IModel model, IConfigSource config) : base(tableFactory, queueFactory, primFactory, model, config) { _autosaveFile = Path.Combine(Topology.GetUserFolder(Factory.Owner), AUTOSAVE_NAME); if (File.Exists(_autosaveFile)) { Topology.LoadTopology(Factory.Owner, Factory.Host.Owner, _autosaveFile); } }
protected virtual ISequenceManager MakeRecord(IConfig config, IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory) { return(new SequenceManager(this, this, config, primFactory, tableFactory, Queue)); }
protected override IPrim InitPrim(IPrimFactory primFactory, Vector3 position) { IPrim p = primFactory.MakePrim(Name, position, DefaultColour, new Vector3(0f, 0f, .001f), PrimType.Cylinder); p.Editable = false; //ISpy<IPrim> pSpy = new Spy<IPrim>(p); //pSpy.OnMethodEvent += (source, method, ret, parameters) => p.Say("Called " + method.Name); //return pSpy.Instance; return p; }