Line data Source code
1 : #include "Edge.h"
2 :
3 0 : Edge::Edge() {
4 0 : }
5 :
6 0 : Edge::~Edge() {
7 0 : }
8 :
9 36 : Edge::Edge(Vector2f b, Vector2f e) {
10 :
11 36 : begin( b );
12 36 : end( e );
13 36 : }
14 :
15 36 : void Edge::begin( Vector2f b ) {
16 :
17 36 : begin_ = b;
18 36 : }
19 :
20 36 : void Edge::end( Vector2f e ) {
21 :
22 36 : end_ = e;
23 36 : }
24 :
25 180 : EdgeShadow* Edge::castShadow( Light* light ) {
26 :
27 : // Cast edge shadow from given light.
28 180 : EdgeShadow* shadow = 0;
29 :
30 180 : end_ - begin_;
31 :
32 180 : Vector2f edgeVector = end_ - begin_;
33 180 : Vector2f normal = edgeVector.normal();
34 180 : Vector2f lightToBegin = begin_ - light->location();
35 :
36 180 : if( normal * lightToBegin > 0 ) {
37 98 : Vector2f lightToEnd = end_ - light->location();
38 : // TODO : May need to extend more.
39 98 : Vector2f beginExtend = begin_ + lightToBegin * 5;
40 98 : Vector2f endExtend = end_ + lightToEnd * 5;
41 :
42 98 : shadow = new EdgeShadow();
43 98 : shadow->addVertex(begin_);
44 98 : shadow->addVertex(beginExtend);
45 98 : shadow->addVertex(endExtend);
46 98 : shadow->addVertex(end_);
47 : }
48 :
49 180 : return shadow;
50 : }
|