Joshua Moerman
12 years ago
4 changed files with 116 additions and 88 deletions
@ -0,0 +1,42 @@ |
|||||
|
#pragma once |
||||
|
|
||||
|
#include <chrono> |
||||
|
#include <cmath> |
||||
|
#include <vector> |
||||
|
#include <algorithm> |
||||
|
|
||||
|
#include "basics.h" |
||||
|
|
||||
|
struct App{ |
||||
|
std::vector<User*> people_online; |
||||
|
int uid{0}; |
||||
|
|
||||
|
void update_positions(){ |
||||
|
const float speed = 0.4; |
||||
|
|
||||
|
typedef std::chrono::duration<double, std::ratio<1,1>> fseconds; |
||||
|
static auto start = std::chrono::steady_clock::now(); |
||||
|
auto end = std::chrono::steady_clock::now(); |
||||
|
double time = std::chrono::duration_cast<fseconds>(end-start).count(); |
||||
|
|
||||
|
//std::cout << time << std::endl;
|
||||
|
auto n = people_online.size(); |
||||
|
for(int i = 0; i < n; ++i){ |
||||
|
User& user = *people_online[i]; |
||||
|
double x = cos(speed * time + 2*M_PI*i/double(n)); |
||||
|
double y = sin(speed * time + 2*M_PI*i/double(n)); |
||||
|
|
||||
|
user.position.x = 200 + 200*x; |
||||
|
user.position.y = 200 + 200*y; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void login(User& user){ |
||||
|
user.index = uid++; |
||||
|
people_online.push_back(&user); |
||||
|
} |
||||
|
|
||||
|
void logout(User& user){ |
||||
|
people_online.erase(std::remove(people_online.begin(), people_online.end(), &user), people_online.end()); |
||||
|
} |
||||
|
}; |
@ -0,0 +1,47 @@ |
|||||
|
#pragma once |
||||
|
|
||||
|
#include <string> |
||||
|
#include <boost/fusion/include/define_struct.hpp> |
||||
|
#include <boost/fusion/include/adapt_struct.hpp> |
||||
|
|
||||
|
struct Empty{}; |
||||
|
|
||||
|
BOOST_FUSION_DEFINE_STRUCT( |
||||
|
, Size, |
||||
|
(int, width) |
||||
|
(int, height) |
||||
|
) |
||||
|
|
||||
|
BOOST_FUSION_DEFINE_STRUCT( |
||||
|
, Position, |
||||
|
(int, x) |
||||
|
(int, y) |
||||
|
) |
||||
|
|
||||
|
BOOST_FUSION_DEFINE_STRUCT( |
||||
|
, IncomingPacket, |
||||
|
(std::string, name) |
||||
|
(Size, size) |
||||
|
) |
||||
|
|
||||
|
struct User { |
||||
|
unsigned int index{0}; |
||||
|
std::string name{"Unknown guest"}; |
||||
|
|
||||
|
Size size{0,0}; |
||||
|
Position position{0,0}; |
||||
|
|
||||
|
User& operator=(IncomingPacket const & p){ |
||||
|
name = p.name; |
||||
|
size = p.size; |
||||
|
return *this; |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
BOOST_FUSION_ADAPT_STRUCT( |
||||
|
User, |
||||
|
(unsigned int, index) |
||||
|
(std::string, name) |
||||
|
(Size, size) |
||||
|
(Position, position) |
||||
|
) |
@ -0,0 +1,12 @@ |
|||||
|
#pragma once |
||||
|
|
||||
|
#include "json.h" |
||||
|
|
||||
|
template <typename C> |
||||
|
inline js::Value ptrvector_to_json(C const & container){ |
||||
|
js::Array array; |
||||
|
for(auto x : container){ |
||||
|
array.push_back(to_json(*x)); |
||||
|
} |
||||
|
return array; |
||||
|
} |
Reference in new issue