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