示例#1
0
        public override void Render(SpriteBatch spriteBatch, Vector2i position, ReactorLayer layer, Color color, float zOrder, ImageSize imageSize, bool forDragAndDrop)
        {
            OriginalRender(spriteBatch, position, layer, color, zOrder, imageSize, forDragAndDrop);
            int priority = 1;

            foreach (ReactorMember member in ownerReactor.GetMembers())
            {
                if (member == this)
                {
                    break;
                }
                else if (member is SplitterFeature)
                {
                    priority++;
                }
            }
            RenderPriority(spriteBatch, position, color, zOrder, priority);
        }
示例#2
0
        public override void Render(SpriteBatch spriteBatch, Vector2i position, ReactorLayer layer, Color color, float zOrder, ImageSize imageSize, bool forDragAndDrop)
        {
            base.Render(spriteBatch, position, layer, GetFeatureColor() * color, zOrder, imageSize, forDragAndDrop);
            List <QuantumTunnelFeature> allTunnels;
            List <Vector2i>             tunnelPositions;

            CollectTunnels(ownerReactor, out allTunnels, out tunnelPositions);
            int tunnelIndex = allTunnels.IndexOf(this);

            RenderPriority(spriteBatch, position, color, zOrder, tunnelIndex + 1);

            if (!laserState.isPresent && !sensorCircleState.isPresent)
            {
                return;
            }

            if (sensorCircleState.isPresent)
            {
                TextureElement sensorCircle    = isSensorActivatedForRed ? redSensorCircle : blueSensorCircle;
                float          fineCircleState = sensorCircleState.GetValue() + SimulationGlobals.partialCycle / ANIMATION_LENGTH;
                Color          circleColor     = Color.WHITE.WithAlpha(0.75f - fineCircleState);
                Vector2i       circleSize      = (Vector2i)(sensorCircle.GetDimensions() * (float)(1.0 + 1.0 * (double)fineCircleState));
                spriteBatch.AddSprite(sensorCircle, new BoundingBox(boundingBox.GetCenter() + new Vector2i(-1, 0), circleSize), new BoundingBox?(), circleColor, (AngleInRadians)0.0f, circleSize / 2, FlipOptions.None, zOrder - 0.02f);
            }

            allTunnels.Add(allTunnels[0]);
            tunnelPositions.Add(tunnelPositions[0]);

            if (laserState.isPresent)
            {
                TextureElement laserBeam           = isActivatedForRed ? redLaser : blueLaser;
                float          fineLaserState      = laserState.GetValue() + SimulationGlobals.partialCycle / ANIMATION_LENGTH;
                Vector2i       startTunnelCenter   = allTunnels[tunnelIndex].boundingBox.GetCenter();
                Vector2i       endTunnelCenter     = allTunnels[tunnelIndex + 1].boundingBox.GetCenter();
                Vector2f       beamVector          = endTunnelCenter - startTunnelCenter;
                Vector2f       beamDirectionVector = beamVector / beamVector.Length();
                Vector2i       beamStart           = startTunnelCenter + (Vector2i)(beamDirectionVector * 29f);
                Vector2i       beamEnd             = endTunnelCenter + (Vector2i)(beamDirectionVector * -29f);
                SpriteHelper.AddTextureStretchedBetween(spriteBatch, laserBeam, beamStart, beamEnd, Color.WHITE.WithAlpha((float)((1.0 - (double)fineLaserState) / 2.0)), zOrder - 0.02f);
            }
        }
示例#3
0
 public override void Render(SpriteBatch spriteBatch, Vector2i position, ReactorLayer layer, Color color, float zOrder, ImageSize imageSize, bool forDragAndDrop)
 {
 }
示例#4
0
 public void AddMember(Vector2i coords, ReactorLayer layer, ReactorMember member)
 {
 }