#include #include #include #include class RoadMap: public Object { GDCLASS(RoadMap, Object) public: RoadMap(); ~RoadMap(); static RoadMap *get_singleton(); static void create_singleton(); static void destroy_singleton(); protected: Ref noise; Ref rnd; struct Segment { Vector3 p1, p2; }; Vector segments; struct Pq { struct PqItem { struct Segment data; int priority; }; List queue; void push(int priority, const struct Segment &seg) { List::Element *e; PqItem it; it.data = seg; it.priority = priority; for (e = queue.front(); e; e = e->next()) { PqItem item = e->get(); if (item.priority > priority) { queue.insert_before(e, it); break; } if (!e->next()) queue.push_back(it); } } Segment peek() { return queue.front()->get().data; } Segment pop() { Segment seg = queue.front()->get().data; queue.pop_front(); return seg; } }; struct Pq queue; void gen_primary_network(); };