public override void Start() { if (!ignoreNextPosSave) { origPos = Graphics.Position; components = ComponentsManager.GetComponents((int)Graphics.Position.X, (int)Graphics.Position.Y, (int)Graphics.Size.X, (int)Graphics.Size.Y); containsComponents = new Component[components.Count - 1]; PushedPositions.Clear(); for (int i = 0; i < components.Count; i++) { if (components[i] == this) { components.RemoveAt(i); i--; continue; } PushedPositions.Add(components[i].Graphics.PushPosition()); containsComponents[i] = components[i]; } } ignoreNextPosSave = false; ReDrawFBO = true; base.Start(); }
public void UpdateComponentsList() { var a = ComponentsManager.GetComponents((int)Graphics.Position.X, (int)Graphics.Position.Y, (int)Graphics.Size.X, (int)Graphics.Size.Y); a.Remove(this); containsComponents = a.ToArray(); Component t; bool c; for (int i = 0; i < containsComponents.Length; i++) { c = false; for (int j = i + 1; j < containsComponents.Length; j++) { if (containsComponents[i].Graphics.Layer > containsComponents[j].Graphics.Layer) { c = true; t = containsComponents[i]; containsComponents[i] = containsComponents[j]; containsComponents[j] = t; } } if (!c) { break; } } }
/// <summary> /// Function that is called EVERY update regardless of game state /// </summary> public virtual void NonGameUpdate() { Graphics.NonGameUpdate(); //selection shader if (MicroWorld.Graphics.GUI.GUIEngine.s_subComponentButtons.isVisible && MicroWorld.Graphics.GUI.GUIEngine.s_subComponentButtons.SelectedComponent == this) { if (selectionShaderState < 20) { selectionShaderState++; } if (selectionShaderState == 1) { MicroWorld.Graphics.Effects.Effects.getBluredTextureSelectedComponent(this); } } else { if (selectionShaderState > 0) { selectionShaderState--; } } //TT if (ToolTip != null && ToolTip.isVisible && Settings.GameState != Settings.GameStates.Stopped) { int x = InputEngine.curMouse.X, y = InputEngine.curMouse.Y; Utilities.Tools.ScreenToGameCoords(ref x, ref y); var a = ComponentsManager.GetComponents(x, y); for (int i = 0; i < a.Count; i++) { if (a[i] is Properties.IRotatable) { ToolTip.isVisible = false; MicroWorld.Graphics.GUI.GUIEngine.RemoveHUDScene(ToolTip); } } } }
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(); } } } }