Ejemplo n.º 1
0
        private void UnregisterNetwork()
        {
            if (Controller == null)
            {
                return;
            }

            foreach (var k in _components)
            {
                k.OnRemovedFromScene();
            }
            _components.Clear();

            try
            {
                var def = Core.Definitions.BeamOf(Entity);
                foreach (var c in def.Components)
                {
                    foreach (var key in c.Inputs.Concat(c.Outputs).Concat(c.Internal))
                    {
                        Controller.Remove(Entity, key);
                    }
                }
                this.UnregisterRenderable();
            }
            catch (Exception e)
            {
                _log.Error(e.ToString());
                Controller.DumpData();
            }

            _dummies.Clear();
            _renderable.Clear();
            Controller = null;
        }
Ejemplo n.º 2
0
 public Segment(BeamController network, params DummyData <Segment, BeamConnectionData>[] path) : base(network,
                                                                                                      path)
 {
 }
Ejemplo n.º 3
0
        private void RegisterNetwork()
        {
            if (Controller != null)
            {
                _log.Warning("Already registered...");
                return;
            }

            Controller = (Entity as IMyCubeBlock)?.CubeGrid.Components.Get <BeamController>();
            if (Controller == null)
            {
                _log.Warning("no grid controller");
                return;
            }

            _dummies.Clear();
            _components.Clear();
            try
            {
                var def = Core.Definitions.BeamOf(Entity);
                foreach (var c in def.Components)
                {
                    foreach (var d in c.Inputs.Concat(c.Outputs).Concat(c.Internal))
                    {
                        bool created;
                        var  result = Controller.GetOrCreate(Entity, d, out created);
                        if (created)
                        {
                            _dummies.Add(result);
                        }
                    }

                    var cPath = c as Path;
                    if (cPath != null)
                    {
                        for (var i = 0; i < cPath.Dummies.Length - 1; i++)
                        {
                            Controller.Link(Entity, cPath.Dummies[i], Entity, cPath.Dummies[i + 1],
                                            new BeamConnectionData(Vector4.One));
                        }
                    }

                    var cOptics = c as Optics;
                    if (cOptics != null)
                    {
                        foreach (var k in cOptics.IncomingBeams)
                        {
                            Controller.Link(Entity, k, Entity, cOptics.IntersectionPoint,
                                            new BeamConnectionData(Vector4.One, float.PositiveInfinity, false));
                        }
                        foreach (var k in cOptics.OutgoingBeams)
                        {
                            Controller.Link(Entity, cOptics.IntersectionPoint, Entity, k.Dummy,
                                            new BeamConnectionData(k.Color, k.MaxThroughput, false));
                        }
                    }

                    var cEmitter = c as Definition.Beam.Emitter;
                    if (cEmitter != null)
                    {
                        var k = new Logic.Emitter(this, cEmitter);
                        _components.Add(k);
                    }

                    var cWeapon = c as Definition.Beam.Weapon;
                    if (cWeapon != null)
                    {
                        var k = new Logic.Weapon(this, cWeapon);
                        _components.Add(k);
                    }
                }

                foreach (var c in def.InputDetectors)
                {
                    Controller.AddDetector(Entity, c, true, false);
                }

                foreach (var c in def.OutputDetectors)
                {
                    Controller.AddDetector(Entity, c, false, true);
                }

                foreach (var c in def.BidirectionalDetectors)
                {
                    Controller.AddDetector(Entity, c, true, true);
                }


                foreach (var k in _components)
                {
                    k.OnAddedToScene();
                }

                _renderable.Clear();
                _renderable.AddRange(_components.OfType <IRenderableComponent>());

                this.RegisterRenderable();
            }
            catch (Exception e)
            {
                _log.Error(e.ToString());
                Controller.DumpData();
            }
        }