|
@ -29,11 +29,13 @@ using beat_type = Beat<note_info>; |
|
|
struct AbstractLine { |
|
|
struct AbstractLine { |
|
|
math::Vec2 starting_point; |
|
|
math::Vec2 starting_point; |
|
|
math::Vec2 end_point; |
|
|
math::Vec2 end_point; |
|
|
LineKind line_kind; |
|
|
int line_kind; |
|
|
|
|
|
|
|
|
const float hsize = 5.0f; |
|
|
const float hsize = 5.0f; |
|
|
|
|
|
|
|
|
AbstractLine(math::Vec2 starting_point, math::Vec2 end_point, LineKind line_kind) |
|
|
AbstractLine() = default; |
|
|
|
|
|
|
|
|
|
|
|
AbstractLine(math::Vec2 starting_point, math::Vec2 end_point, int line_kind) |
|
|
: starting_point(starting_point) |
|
|
: starting_point(starting_point) |
|
|
, end_point(end_point) |
|
|
, end_point(end_point) |
|
|
, line_kind(line_kind) |
|
|
, line_kind(line_kind) |
|
@ -43,24 +45,32 @@ struct AbstractLine { |
|
|
std::vector<line_type> calculate_lines() const { |
|
|
std::vector<line_type> calculate_lines() const { |
|
|
auto dir = normalize(end_point - starting_point); |
|
|
auto dir = normalize(end_point - starting_point); |
|
|
auto normal = rotate_ccw(dir); |
|
|
auto normal = rotate_ccw(dir); |
|
|
|
|
|
LineKind lk = static_cast<LineKind>(line_kind); |
|
|
|
|
|
|
|
|
if(line_kind == simulation::kOneWay){ |
|
|
if(line_kind == simulation::kOneWay){ |
|
|
std::vector<line_type> ret; |
|
|
std::vector<line_type> ret; |
|
|
ret.emplace_back(starting_point + hsize*normal, end_point + hsize*normal, line_kind); |
|
|
ret.emplace_back(starting_point + hsize*normal, end_point + hsize*normal, lk); |
|
|
ret.emplace_back(end_point + hsize*normal, end_point + hsize*dir, line_kind); |
|
|
ret.emplace_back(end_point + hsize*normal, end_point + hsize*dir, lk); |
|
|
ret.emplace_back(end_point + hsize*dir, end_point - hsize*normal, line_kind); |
|
|
ret.emplace_back(end_point + hsize*dir, end_point - hsize*normal, lk); |
|
|
ret.emplace_back(end_point - hsize*normal, starting_point - hsize*normal, line_kind); |
|
|
ret.emplace_back(end_point - hsize*normal, starting_point - hsize*normal, lk); |
|
|
ret.emplace_back(starting_point - hsize*normal, starting_point - hsize*dir, line_kind); |
|
|
ret.emplace_back(starting_point - hsize*normal, starting_point - hsize*dir, lk); |
|
|
ret.emplace_back(starting_point - hsize*dir, starting_point + hsize*normal, line_kind); |
|
|
ret.emplace_back(starting_point - hsize*dir, starting_point + hsize*normal, lk); |
|
|
return ret; |
|
|
return ret; |
|
|
} else { |
|
|
} else { |
|
|
std::vector<line_type> ret; |
|
|
std::vector<line_type> ret; |
|
|
ret.emplace_back(starting_point, end_point, line_kind); |
|
|
ret.emplace_back(starting_point, end_point, lk); |
|
|
return ret; |
|
|
return ret; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
BOOST_FUSION_ADAPT_STRUCT( |
|
|
|
|
|
AbstractLine, |
|
|
|
|
|
(::math::Vec2, starting_point) |
|
|
|
|
|
(::math::Vec2, end_point) |
|
|
|
|
|
(int, line_kind) |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
struct libwebsocket; |
|
|
struct libwebsocket; |
|
|
struct App{ |
|
|
struct App{ |
|
|
std::vector<User*> people_online; |
|
|
std::vector<User*> people_online; |
|
@ -77,6 +87,10 @@ struct App{ |
|
|
beat.notes.emplace_back(note_type::kQuarterNote, note_info{100.0f, 100.0f}); |
|
|
beat.notes.emplace_back(note_type::kQuarterNote, note_info{100.0f, 100.0f}); |
|
|
|
|
|
|
|
|
AbstractLine line(Vec2{50.0f, 100.0f}, Vec2{150.0f, 200.0f}, simulation::kOneWay); |
|
|
AbstractLine line(Vec2{50.0f, 100.0f}, Vec2{150.0f, 200.0f}, simulation::kOneWay); |
|
|
|
|
|
add_line(line); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void add_line(AbstractLine const & line){ |
|
|
for(auto & l : line.calculate_lines()){ |
|
|
for(auto & l : line.calculate_lines()){ |
|
|
sim.lines.push_back(l); |
|
|
sim.lines.push_back(l); |
|
|
} |
|
|
} |
|
|