Пример #1
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();
                    }
                }
            }
        }