Commit | Line | Data |
---|---|---|
b0137bb6 TW |
1 | use common::{Point, Intersection}; |
2 | use core::app::{AppState, StateChange}; | |
3 | use core::controller::ControllerManager; | |
4 | use core::render::Renderer; | |
5 | use point; // defined in common, but loaded from main... | |
6 | use sdl2::event::Event; | |
7 | use sprites::SpriteManager; | |
8 | use time::{Duration, Instant}; | |
9 | ||
10 | pub struct TestState { | |
11 | start: Instant, | |
12 | } | |
13 | ||
14 | impl TestState { | |
15 | pub fn new() -> TestState { | |
16 | TestState { | |
17 | start: Instant::now(), | |
18 | } | |
19 | } | |
20 | ||
21 | fn draw_intersecting_lines(&self, renderer: &mut Renderer, p1: (i32, i32), p2: (i32, i32), p3: (i32, i32), p4: (i32, i32)) { | |
22 | let color = match Intersection::lines( | |
23 | point!(p1.0 as f64, p1.1 as f64), | |
24 | point!(p2.0 as f64, p2.1 as f64), | |
25 | point!(p3.0 as f64, p3.1 as f64), | |
26 | point!(p4.0 as f64, p4.1 as f64) | |
27 | ) { | |
28 | Intersection::Point(p) => { | |
29 | renderer.circle((p.x as i16, p.y as i16), 3, (255, 255, 0)); | |
30 | (0, 255, 0) | |
31 | } | |
32 | Intersection::None => (255, 0, 0) | |
33 | }; | |
34 | renderer.draw_line(p1, p2, color); | |
35 | renderer.draw_line(p3, p4, color); | |
36 | } | |
37 | } | |
38 | ||
39 | impl AppState for TestState { | |
40 | fn enter(&mut self, _ctrl_man: &ControllerManager) {} | |
41 | ||
42 | fn update(&mut self, _dt: Duration) -> Option<StateChange> { | |
43 | None | |
44 | } | |
45 | ||
46 | fn render(&mut self, renderer: &mut Renderer, _sprites: &SpriteManager) { | |
47 | // crossing | |
48 | self.draw_intersecting_lines(renderer, (0, 0), (20, 20), (20, 0), (0, 20)); | |
49 | self.draw_intersecting_lines(renderer, (30, 10), (50, 10), (40, 0), (40, 20)); | |
50 | ||
51 | // just touching | |
52 | self.draw_intersecting_lines(renderer, (70, 0), (70, 10), (60, 10), (80, 10)); | |
53 | self.draw_intersecting_lines(renderer, (90, 0), (100, 10), (90, 20), (110, 0)); | |
54 | self.draw_intersecting_lines(renderer, (120, 0), (140, 20), (120, 20), (130, 10)); | |
55 | self.draw_intersecting_lines(renderer, (170, 10), (160, 10), (160, 0), (160, 20)); | |
56 | ||
57 | // not touching | |
58 | self.draw_intersecting_lines(renderer, (190, 0), (210, 20), (195, 20), (200, 15)); | |
59 | ||
60 | let a = self.start.elapsed().as_seconds_f64().sin() * std::f64::consts::FRAC_PI_2; | |
61 | let (ax, ay) = ((a.cos() * 200.0) as i32, (a.sin() * 200.0) as i32); | |
62 | self.draw_intersecting_lines(renderer, (10, 400), (10 + ax, 400 + ay), (30, 200), (30, 600)); | |
63 | ||
64 | let x = (self.start.elapsed().as_seconds_f64().cos() * 60.0) as i32; | |
65 | let y = (self.start.elapsed().as_seconds_f64().sin() * 60.0) as i32; | |
66 | let x2 = ((self.start.elapsed().as_seconds_f64() + std::f64::consts::FRAC_PI_4).cos() * 60.0) as i32; | |
67 | let y2 = ((self.start.elapsed().as_seconds_f64() + std::f64::consts::FRAC_PI_4).sin() * 60.0) as i32; | |
68 | self.draw_intersecting_lines(renderer, (100 + x, 100 + y), (150 + x, 150 + y), (100 + x2, 150 + y2), (150 + x2, 100 + y2)); | |
69 | self.draw_intersecting_lines(renderer, (250 + x, 85 + y), (250 + x, 165 + y), (210 + x2, 125 + y2), (290 + x2, 125 + y2)); | |
70 | } | |
71 | ||
72 | fn leave(&mut self) { | |
73 | } | |
74 | ||
75 | fn handle_event(&mut self, _event: Event) -> Option<StateChange> { | |
76 | None | |
77 | } | |
78 | } |