Пример #1
0
        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();
        }
Пример #2
0
        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;
                }
            }
        }
Пример #3
0
        /// <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);
                    }
                }
            }
        }
Пример #4
0
        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();
                    }
                }
            }
        }