コード例 #1
0
        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);
        }
コード例 #2
0
        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];
        }
コード例 #3
0
        public Switch(Scene scene, Point position)
            : base(ComponentType.Switch, new ComponentHitbox(new Rectangle(position, (int)(2 * scene.GetGridInterval()), (int)(2 * scene.GetGridInterval()))))
        {
            StartPosition = position / scene.ScaleFactor;
            Position      = position;
            Signal        = false;

            rectangles = new Rectangle[2];
            lines      = new Line[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));

            rectangles[1] = new Rectangle(indent + new Point((int)(10 * scene.ScaleFactor), (int)(5 * scene.ScaleFactor)),
                                          (int)(rectangles[0].Width - 20 * scene.ScaleFactor),
                                          (int)(rectangles[0].Height - 10 * scene.ScaleFactor));

            outHitbox = new OutHitbox(new Point(rectangles[0].position.X + rectangles[0].Width, rectangles[0].position.Y + rectangles[0].Height / 2), this, (int)(scene.ScaleFactor * IOHitboxRadius), 0);

            lines[0] = new Line(new Point(rectangles[1].position.X,
                                          rectangles[1].position.Y + rectangles[1].Height / 4),
                                new Point(rectangles[1].position.X + rectangles[1].Width,
                                          rectangles[1].position.Y + rectangles[1].Height / 4));
        }
コード例 #4
0
        public Clock(Scene scene, Point position)
            : base(ComponentType.Clock, new ComponentHitbox(new Rectangle(position, (int)scene.GetGridInterval() * 2, (int)scene.GetGridInterval() * 2)))
        {
            StartPosition = position / scene.ScaleFactor;
            Position      = position;
            Signal        = false;

            activeScene = scene;

            circles = new Circle[1];

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

            hitbox.Position = Position;

            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();
            int  radius   = (int)(interval - XIndent);

            circles[0] = new Circle(indent + new Point(radius, radius),
                                    radius);

            timer = new Timer(tInterval * tFactor)
            {
                AutoReset = true
            };
            timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
            timer.Start();
        }
コード例 #5
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)));
        }
コード例 #6
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)));
        }