public override bool Select(Point location, Scene sender)
        {
            bool result = hitbox.Clicked(location);

            InHitbox  i = InputClicked(location);
            OutHitbox o = OutputClicked(location);

            if (i != null)
            {
                result = false;
                if (!sender.WirePlacementMode)
                {
                    sender.WireMode(location, this, i);
                }
            }

            else if (o != null)
            {
                result = false;
                if (!sender.WirePlacementMode)
                {
                    sender.WireMode(location, this, o, true);
                }
            }

            return(result);
        }
        public NOTGate(Scene scene, Point position)
            : base(ComponentType.NOT, new ComponentHitbox(new Rectangle(position, (int)scene.GetGridInterval() * 2, (int)scene.GetGridInterval() * 2)))
        {
            StartPosition = position / scene.ScaleFactor;
            Position      = position;
            Signal        = false;

            lines   = new Line[3];
            circles = new Circle[1];

            Point indent = position + new Point((int)XIndent, (int)YIndent);

            hitbox.Position = Position;

            inHitboxes    = new InHitbox[1];
            inHitboxes[0] = new InHitbox(new Point(hitbox.Position.X + (int)XIndent, hitbox.Position.Y + (int)(hitbox.Height / 2)), this, (int)IOHitboxRadius, 0);

            outHitbox = new OutHitbox(new Point(hitbox.Position.X + (int)hitbox.Width, hitbox.Position.Y + (int)(hitbox.Height / 2)), this, (int)IOHitboxRadius, 0);

            uint interval = scene.GetGridInterval();

            lines[0] = new Line(indent,
                                new Point(indent.X, indent.Y + (int)(interval * 2 - (2 * YIndent * scene.ScaleFactor))));

            lines[1] = new Line(indent,
                                new Point(indent.X + (int)(interval * 2f - 4 * XIndent), indent.Y + (int)(interval - YIndent)));

            lines[2] = new Line(lines[0].points[1],
                                new Point(indent.X + (int)(interval * 2f - 4 * XIndent), indent.Y + (int)(interval - YIndent)));

            circles[0] = new Circle(new Point(indent.X + (int)(interval * 2f - 3 * XIndent), indent.Y + (int)(interval - YIndent)), (int)(XIndent));

            startCircle = circles[0];
        }
Beispiel #3
0
        public Light(Scene scene, Point position)
            : base(ComponentType.Light, new ComponentHitbox(new Rectangle(position, (int)(2 * scene.GetGridInterval()), (int)(2 * scene.GetGridInterval()))))
        {
            StartPosition = position / scene.ScaleFactor;
            Position      = position;
            Signal        = false;

            rectangles = new Rectangle[1];
            circles    = new Circle[1];

            hitbox.Position = Position;

            Point indent = position + new Point((int)XIndent, (int)YIndent);

            uint interval = scene.GetGridInterval();

            rectangles[0] = new Rectangle(indent, (int)(2 * interval - 2 * XIndent * scene.ScaleFactor),
                                          (int)(2 * interval - 2 * YIndent * scene.ScaleFactor));

            circles[0] = new Circle(new Point(rectangles[0].position.X + rectangles[0].Width / 2,
                                              rectangles[0].position.Y + rectangles[0].Height / 2),
                                    (int)((4f / 10) * rectangles[0].Width));

            startCircle = new Circle(new Point(rectangles[0].position.X + rectangles[0].Width / 2,
                                               rectangles[0].position.Y + rectangles[0].Height / 2),
                                     (int)((4f / 10) * rectangles[0].Width / scene.ScaleFactor));

            inHitboxes    = new InHitbox[1];
            inHitboxes[0] = new InHitbox(new Point(rectangles[0].position.X, rectangles[0].position.Y + rectangles[0].Height / 2), this, (int)(scene.ScaleFactor * IOHitboxRadius), 0);
        }
        public XORGate(Scene scene, Point position)
            : base(ComponentType.XOR, new ComponentHitbox(new Rectangle(position, (int)scene.GetGridInterval() * 2, (int)scene.GetGridInterval() * 2)))
        {
            StartPosition = position / scene.ScaleFactor;
            Position      = position;
            Signal        = false;

            arcs = new Arc[4];

            Point indent = position + new Point((int)XIndent, (int)YIndent);

            hitbox.Position = Position;

            inHitboxes    = new InHitbox[2];
            inHitboxes[0] = new InHitbox(new Point(hitbox.Position.X + (int)XIndent, hitbox.Position.Y + (int)(hitbox.Height / 4)), this, (int)IOHitboxRadius, 0);
            inHitboxes[1] = new InHitbox(new Point(hitbox.Position.X + (int)XIndent, hitbox.Position.Y + (int)(3 * hitbox.Height / 4)), this, (int)IOHitboxRadius, 1);

            outHitbox = new OutHitbox(new Point(hitbox.Position.X + (int)hitbox.Width, hitbox.Position.Y + (int)(hitbox.Height / 2)), this, (int)IOHitboxRadius, 0);

            uint interval = scene.GetGridInterval();

            arcs[0] = new Arc(indent + new Point((int)(interval / 4), 0),
                              indent + new Point((int)(interval / 4), 0) + new Point(0, (int)(interval * 2) - (int)(2 * YIndent)),
                              indent + new Point((int)(interval / 4), 0) + new Point((int)(interval / 2), (int)(interval * 2 / 3f)),
                              indent + new Point((int)(interval / 4), 0) + new Point(0, (int)(interval * 2) - (int)(2 * YIndent))
                              + new Point((int)(interval / 2), -(int)(interval * 2 / 3f)));

            arcs[1] = new Arc(indent + new Point((int)(interval / 4), 0),
                              indent + new Point((int)interval * 2 - (int)(2 * XIndent), (int)(interval - YIndent)),
                              indent + new Point((int)(interval * 4.5f / 3f), 0),
                              indent + new Point((int)(interval * 5f / 3f), (int)(interval * 1 / 2f)));

            arcs[2] = new Arc(indent + new Point((int)(interval / 4), 0) + new Point(0, (int)(interval * 2) - (int)(2 * YIndent)),

                              indent + new Point(0, (int)(interval * 2) - (int)(2 * YIndent))
                              + new Point((int)interval * 2 - (int)(2 * XIndent), -(int)(interval - YIndent)),

                              indent + new Point(0, (int)(interval * 2) - (int)(2 * YIndent))
                              + new Point((int)(interval * 4.5f / 3f), 0),

                              indent + new Point(0, (int)(interval * 2) - (int)(2 * YIndent))
                              + new Point((int)(interval * 5f / 3f), -(int)(interval * 1 / 2f)));

            arcs[3] = new Arc(indent,
                              indent + new Point(0, (int)(interval * 2) - (int)(2 * YIndent)),
                              indent + new Point((int)(interval / 2), (int)(interval * 2 / 3f)),
                              indent + new Point(0, (int)(interval * 2) - (int)(2 * YIndent))
                              + new Point((int)(interval / 2), -(int)(interval * 2 / 3f)));
        }
Beispiel #5
0
        public ANDGate(Scene scene, Point position)
            : base(ComponentType.AND, new ComponentHitbox(new Rectangle(position, (int)scene.GetGridInterval() * 2, (int)scene.GetGridInterval() * 2)))
        {
            StartPosition = position / scene.ScaleFactor;
            Position      = position;
            Signal        = false;

            lines = new Line[3];
            arcs  = new Arc[1];

            Point indent = position + new Point((int)XIndent, (int)YIndent);

            hitbox.Position = Position;

            inHitboxes    = new InHitbox[2];
            inHitboxes[0] = new InHitbox(new Point(hitbox.Position.X + (int)XIndent, hitbox.Position.Y + (int)(hitbox.Height / 4)), this, (int)IOHitboxRadius, 0);
            inHitboxes[1] = new InHitbox(new Point(hitbox.Position.X + (int)XIndent, hitbox.Position.Y + (int)(3 * hitbox.Height / 4)), this, (int)IOHitboxRadius, 1);

            outHitbox = new OutHitbox(new Point(hitbox.Position.X + (int)hitbox.Width, hitbox.Position.Y + (int)(hitbox.Height / 2)), this, (int)IOHitboxRadius, 0);

            uint interval = scene.GetGridInterval();

            lines[0] = new Line(indent,
                                new Point(indent.X, indent.Y + (int)(interval * 2 - (2 * YIndent * scene.ScaleFactor))));

            lines[1] = new Line(indent,
                                new Point(indent.X + (int)(interval * 4f / 3), indent.Y));

            lines[2] = new Line(lines[0].points[1],
                                new Point(indent.X + (int)(interval * 4f / 3), indent.Y + (int)(interval * 2 - (2 * YIndent * scene.ScaleFactor))));

            arcs[0] = new Arc(lines[1].points[1],
                              lines[2].points[1],
                              lines[1].points[1] + new Point((int)(interval / 1.5f), (int)(interval / 4f)),
                              lines[2].points[1] + new Point((int)(interval / 1.5f), -(int)(interval / 4f)));
        }