- // just some test code...
- if(state == 0) {
- movement = Vector(0, 1);
- if(bbox.p1.y > 250)
- state = 1;
- }
- if(state == 1) {
- movement = Vector(0, -1);
- if(bbox.p1.y < 50)
- state = 2;
- }
- if(state == 2) {
- movement = Vector(1, 0);
- if(bbox.p1.x > 800)
- state = 3;
- }
- if(state == 3) {
- movement = Vector(-1, 0);
- if(bbox.p1.x < 400)
- state = 4;
- }
- if(state == 4) {
- movement = Vector(-1, 1);
- if(bbox.p1.x < 0)
- state = 0;
+ // check if Platform should automatically pick a destination
+ if (automatic) {
+
+ if (!player_contact && !walker->is_moving()) {
+ // Player doesn't touch platform and Platform is not moving
+
+ // Travel to node nearest to nearest player
+ // FIXME: does not really use nearest player
+ Player* player = 0;
+ std::vector<Player*> players = Sector::current()->get_players();
+ for (std::vector<Player*>::iterator playerIter = players.begin(); playerIter != players.end(); ++playerIter) {
+ player = *playerIter;
+ }
+ if (player) {
+ int nearest_node_id = path->get_nearest_node_no(player->get_bbox().p2);
+ if (nearest_node_id != -1) {
+ goto_node(nearest_node_id);
+ }
+ }
+ }
+
+ if (player_contact && !last_player_contact && !walker->is_moving()) {
+ // Player touched platform, didn't touch last frame and Platform is not moving
+
+ // Travel to node farthest from current position
+ int farthest_node_id = path->get_farthest_node_no(get_pos());
+ if (farthest_node_id != -1) {
+ goto_node(farthest_node_id);
+ }
+ }
+
+ // Clear player_contact flag set by collision() method
+ last_player_contact = player_contact;
+ player_contact = false;