summaryrefslogtreecommitdiff
path: root/src/gate.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/gate.rs')
-rw-r--r--src/gate.rs56
1 files changed, 29 insertions, 27 deletions
diff --git a/src/gate.rs b/src/gate.rs
index 2b2952c..1d869e1 100644
--- a/src/gate.rs
+++ b/src/gate.rs
@@ -1,3 +1,4 @@
+use crate::wire::*;
use macroquad::prelude::*;
pub struct Rec {
@@ -19,7 +20,8 @@ enum State {
#[derive(Debug, Clone)]
pub struct Connection {
- dst: Option<Box<Connection>>,
+ wire: Option<Box<Wire>>,
+ pub pos: (f32, f32),
pub radius: f32,
pub color: Color,
pub on: bool,
@@ -33,17 +35,31 @@ impl Rec {
fn contains(&self, pos: (f32, f32)) -> bool {
pos.0 >= self.x && pos.0 <= self.x + self.w && pos.1 >= self.y && pos.1 <= self.y + self.h
}
+
+ fn draw(&self) {
+ draw_rectangle(self.x, self.y, self.w, self.h, self.color);
+ }
}
impl Connection {
- pub fn new(radius: f32, color: Color, on: bool) -> Connection {
+ pub fn new(radius: f32, pos: (f32, f32), color: Color, on: bool) -> Connection {
Connection {
- dst: None,
+ wire: None,
+ pos,
radius,
color,
on,
}
}
+
+ pub fn draw(&self) {
+ draw_circle(
+ self.pos.0,
+ self.pos.1,
+ self.radius,
+ if self.on { self.color } else { GRAY },
+ );
+ }
}
pub struct Gate<'a> {
@@ -92,23 +108,16 @@ impl<'a> Gate<'a> {
}
fn draw_helper(&mut self) {
- draw_rectangle(
- self.rect.x,
- self.rect.y,
- self.rect.w,
- self.rect.h,
- self.rect.color,
- );
+ // draws the structure of the gate
+ self.rect.draw();
- for (cnt, node) in self.input.iter().enumerate() {
- draw_circle(
- self.rect.x,
- self.rect.y + 25. + (30. * cnt as f32),
- node.radius,
- if node.on { node.color } else { GRAY },
- );
+ // draws input
+ for (cnt, node) in self.input.iter_mut().enumerate() {
+ node.pos = (self.rect.x, self.rect.y + 25. + (30. * cnt as f32));
+ node.draw();
}
+ // draws label
draw_text(
self.label,
self.rect.x + self.rect.w / 2.0,
@@ -117,15 +126,8 @@ impl<'a> Gate<'a> {
WHITE,
);
- draw_circle(
- self.rect.x + self.rect.w,
- self.rect.y + self.rect.h / 2.,
- self.output.radius,
- if self.output.on {
- self.output.color
- } else {
- GRAY
- },
- );
+ // draws output
+ self.output.pos = (self.rect.x + self.rect.w, self.rect.y + self.rect.h / 2.);
+ self.output.draw();
}
}