Added a graphical testing state
[kaka/rust-sdl-test.git] / src / teststate.rs
CommitLineData
b0137bb6
TW
1use common::{Point, Intersection};
2use core::app::{AppState, StateChange};
3use core::controller::ControllerManager;
4use core::render::Renderer;
5use point; // defined in common, but loaded from main...
6use sdl2::event::Event;
7use sprites::SpriteManager;
8use time::{Duration, Instant};
9
10pub struct TestState {
11 start: Instant,
12}
13
14impl 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
39impl 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}