public void UpdateLasers() { for (int i = 0; i < 4; i++) { connectedDetectors[i] = null; lasers[i].Remove(); lasers[i].Length = 0; } if (!hasEnoughPowerSupply) { return; } int x = (int)Graphics.Center.X, y = (int)Graphics.Center.Y, r = (int)range; var a = ComponentsManager.GetComponents <MovementDetector>(x - r, y - r, 2 * r, 2 * r); for (int i = 0; i < a.Count; i++) { if (a[i] != this) { if (a[i].Graphics.Position.X == Graphics.Position.X) { if (a[i].Graphics.Position.Y < Graphics.Position.Y)//up { if (connectedDetectors[0] == null || connectedDetectors[0].Graphics.Position.Y < a[i].Graphics.Position.Y) { if (connectedDetectors[0] != null) { ComponentsManager.Remove(lasers[0]); } if (!a[i].HasEnoughPowerSupply) { continue; } if (a[i].Range < Graphics.Position.Y - a[i].Graphics.Position.Y) { continue; } connectedDetectors[0] = a[i]; lasers[0].Length = (int)(Graphics.Position.Y - a[i].Graphics.Position.Y); ComponentsManager.Add(lasers[0]); } } else//down { if (connectedDetectors[2] == null || connectedDetectors[2].Graphics.Position.Y > a[i].Graphics.Position.Y) { if (connectedDetectors[2] != null) { ComponentsManager.Remove(lasers[2]); } if (!a[i].HasEnoughPowerSupply) { continue; } if (a[i].Range < a[i].Graphics.Position.Y - Graphics.Position.Y) { continue; } connectedDetectors[2] = a[i]; lasers[2].Length = (int)(a[i].Graphics.Position.Y - Graphics.Position.Y); ComponentsManager.Add(lasers[2]); } } } if (a[i].Graphics.Position.Y == Graphics.Position.Y) { if (a[i].Graphics.Position.X < Graphics.Position.X)//left { if (connectedDetectors[1] == null || connectedDetectors[1].Graphics.Position.X < a[i].Graphics.Position.X) { if (connectedDetectors[1] != null) { ComponentsManager.Remove(lasers[1]); } if (!a[i].HasEnoughPowerSupply) { continue; } if (a[i].Range < Graphics.Position.X - a[i].Graphics.Position.X) { continue; } connectedDetectors[1] = a[i]; lasers[1].Length = (int)(Graphics.Position.X - a[i].Graphics.Position.X); ComponentsManager.Add(lasers[1]); } } else//right { if (connectedDetectors[3] == null || connectedDetectors[3].Graphics.Position.Y > a[i].Graphics.Position.Y) { if (connectedDetectors[3] != null) { ComponentsManager.Remove(lasers[3]); } if (!a[i].HasEnoughPowerSupply) { continue; } if (a[i].Range < a[i].Graphics.Position.X - Graphics.Position.X) { continue; } connectedDetectors[3] = a[i]; lasers[3].Length = (int)(a[i].Graphics.Position.X - Graphics.Position.X); ComponentsManager.Add(lasers[3]); } } } } } bool b = prevPowerSupply; prevPowerSupply = true; for (int i = 0; i < 4; i++) { if (connectedDetectors[i] != null) { lasers[i].RegisterColliders(); if (!b) { connectedDetectors[i].UpdateLasers(); } } } }
/// <summary> /// Add this component to a ComponentManager here /// </summary> public virtual void AddComponentToManager() { ComponentsManager.Add(this); }