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]; }
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))); }
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))); }