@@ -20,18 +20,24 @@ class RayAndShape extends luxe.States.State {
20
20
var intersect : LineGeometry ;
21
21
var before : LineGeometry ;
22
22
var after : LineGeometry ;
23
+ var colors : Array <Color >;
23
24
24
25
override function onenter <T >(_ : T ) {
25
26
26
- Main .display (' pink = ray \n green = before hit \n white = intersection \n purple = after hit ' );
27
+ Main .display (' press space to toggle infinite state \n press 1 to move the beam start ' );
27
28
28
- beam = new Ray ( new V (450 ,300 ), new V (400 ,100 ), false );
29
+ beam = new Ray ( new V (420 ,300 ), new V (400 ,100 ), not_infinite );
29
30
30
31
Main .rays .push (beam );
31
32
Main .shapes .push (new Circle (600 ,400 ,50 ));
32
33
Main .shapes .push (new Circle (200 ,400 ,50 ));
33
- Main .shapes .push ( Polygon .rectangle (600 ,200 ,50 ,50 ));
34
- Main .shapes .push ( Polygon .rectangle (200 ,200 ,50 ,50 ));
34
+ Main .shapes .push (Polygon .rectangle (600 ,200 ,50 ,50 ));
35
+ Main .shapes .push (Polygon .rectangle (200 ,200 ,50 ,50 ));
36
+
37
+ colors = [
38
+ new Color ().rgb (0xffffff ),
39
+ new Color (1 ,1 ,1 ,0.5 )
40
+ ];
35
41
36
42
intersect = Luxe .draw .line ({ depth :100 , batcher : Main .thicker , p0 :new Vector (), p1 :new Vector (), color :new Color ().rgb (0xffffff ) });
37
43
before = Luxe .draw .line ({ depth :100 , batcher : Main .thicker , p0 :new Vector (), p1 :new Vector (), color :new Color ().rgb (0x00f67b ) });
@@ -54,15 +60,32 @@ class RayAndShape extends luxe.States.State {
54
60
55
61
override function onkeyup (e : KeyEvent ) {
56
62
63
+ if (e .keycode == Key .key_1 ) {
64
+ if (beam .start .y == 300 ) {
65
+ beam .start .y = 200 ;
66
+ } else if (beam .start .y == 200 ) {
67
+ beam .start .y = 380 ;
68
+ } else {
69
+ beam .start .y = 300 ;
70
+ }
71
+ }
72
+
57
73
if (e .keycode == Key .space ) {
58
- if (beam != null ) beam .infinite = ! beam .infinite ;
74
+ if (beam != null ) {
75
+ // cycle infinite mode
76
+ beam .infinite = switch (beam .infinite ) {
77
+ case not_infinite : infinite_from_start ;
78
+ case infinite_from_start : infinite ;
79
+ case infinite : not_infinite ;
80
+ }
81
+ }
59
82
}
60
83
61
84
} // onkeyup
62
85
63
86
override function onmousemove ( e : MouseEvent ) {
64
87
if (beam != null ) {
65
- if (beam .infinite ) {
88
+ if (beam .infinite == infinite || beam . infinite == infinite_from_start ) { // :todo: check later if correct behaviour
66
89
var end = new Vector (e .pos .x , e .pos .y );
67
90
end .subtract_xyz (beam .start .x , beam .start .y );
68
91
end .normalize ();
@@ -98,14 +121,27 @@ class RayAndShape extends luxe.States.State {
98
121
var hitendx = c .hitEndX ();
99
122
var hitendy = c .hitEndY ();
100
123
101
- intersect .p0 = new Vector (hitstartx , hitstarty );
102
- intersect .p1 = new Vector (hitendx , hitendy );
103
-
104
- before .p0 = new Vector (c .ray .start .x , c .ray .start .y );
105
- before .p1 = new Vector (hitstartx , hitstarty );
106
-
107
- after .p0 = new Vector (hitendx , hitendy );
108
- after .p1 = new Vector (c .ray .end .x , c .ray .end .y );
124
+ Luxe .draw .ring ({ immediate :true , x :hitstartx , y :hitstarty , r :4 , color :colors [1 ] });
125
+ Luxe .draw .ring ({ immediate :true , x :hitendx , y :hitendy , r :4 , color :colors [1 ] });
126
+
127
+ if (c .end >= 1.0 ) {
128
+ Luxe .draw .line ({
129
+ p0 : new Vector (hitstartx , hitstarty ),
130
+ p1 : new Vector (c .ray .end .x , c .ray .end .y ),
131
+ color : colors [0 ],
132
+ batcher : Main .thicker ,
133
+ immediate : true
134
+ });
135
+ } else {
136
+ Luxe .draw .line ({
137
+ p0 : new Vector (hitstartx , hitstarty ),
138
+ p1 : new Vector (hitendx , hitendy ),
139
+ color : colors [0 ],
140
+ batcher : Main .thicker ,
141
+ immediate : true
142
+ });
143
+ }
144
+
109
145
110
146
Luxe .draw .text ({
111
147
point_size :13 ,
0 commit comments