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; }
public Segment(BeamController network, params DummyData <Segment, BeamConnectionData>[] path) : base(network, path) { }
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(); } }