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();
        }
示例#3
0
        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;
                }
            };
        }
示例#4
0
 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();
        }
示例#8
0
        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;
        }
示例#9
0
        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();
                }
            };
        }
示例#10
0
        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);
        }
示例#11
0
 public PrimWrapper(IPrimFactory primFactory, Vector3 position, string name)
     : base(name)
 {
     _log       = LogManager.GetLogger(GetType());
     _prim      = InitPrim(primFactory, position);
     _prim.Name = name;
 }
示例#12
0
        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;
                }
            };
        }
示例#13
0
 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;
 }
示例#14
0
 public PrimWrapper(IPrimFactory primFactory, Vector3 position, string name)
     : base(name)
 {
     _log = LogManager.GetLogger(GetType());
     _prim = InitPrim(primFactory, position);
     _prim.Name = name;
 }
示例#15
0
 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;
 }
示例#17
0
        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);
        }
示例#20
0
 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);
     };
 }
示例#21
0
        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);
        }
示例#22
0
 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);
     };
 }
示例#23
0
 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;
     });
 }
示例#24
0
        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);
 }
示例#26
0
 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);
         }
     };
 }
示例#27
0
 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;
         }
     });
 }
示例#28
0
        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();
                }
            };
        }
示例#29
0
 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);
         }
     };
 }
示例#30
0
 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();
            };
        }
示例#32
0
            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);
            }
示例#33
0
        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.");
        }
示例#34
0
        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.");
        }
示例#35
0
        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();
            };
        }
示例#36
0
        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();
        }
示例#37
0
        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();
        }
示例#38
0
        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);
        }
示例#39
0
 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;
         }
     };
 }
示例#40
0
        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 + "'.");
            };
        }
示例#42
0
        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 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();
        }
示例#44
0
 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();
        }
示例#46
0
 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;
         }
     };
 }
示例#47
0
        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 + "'.");
                }
            };
        }
示例#48
0
        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;
 }
示例#50
0
 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;
        }
示例#52
0
 public VNode(IPrimFactory primFactory, string name, Vector3 position, Color colour, Parameters parameters)
     : base(primFactory, position, name, colour, 0d, parameters)
 {
     _boards = new HashSet<IPrim>();
 }
示例#53
0
 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;
 }
示例#54
0
        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();
        }
示例#55
0
 public Dialog(IPrim prim, IPrimFactory factory, params string[] buttons)
     : this(prim, factory)
 {
     _buttons = buttons;
 }
示例#56
0
 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;
 }
示例#57
0
 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);
     }
 }
示例#58
0
 protected virtual ISequenceManager MakeRecord(IConfig config, IKeyTableFactory tableFactory, IAsynchQueueFactory queueFactory, IPrimFactory primFactory)
 {
     return(new SequenceManager(this, this, config, primFactory, tableFactory, Queue));
 }
示例#59
0
        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;
        }
示例#60
0
 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;
 }