|
@@ -1,3 +1,5 @@
|
|
|
+import threading
|
|
|
+
|
|
|
from flask import Blueprint, abort, request, jsonify
|
|
|
|
|
|
import db
|
|
@@ -5,8 +7,30 @@ import lib
|
|
|
|
|
|
game = Blueprint("game", __name__)
|
|
|
|
|
|
-rsv_gen = lib.random_street_view_generator(only_america=False)
|
|
|
-rsv_gen_usa = lib.random_street_view_generator(only_america=True)
|
|
|
+stock_target = 5
|
|
|
+# (gen_method, only_america): lib.PointSource
|
|
|
+sources = {
|
|
|
+ ("MAPCRUNCH", False): lib.MapCrunchPointSource(stock_target=stock_target, max_retries=1000, only_america=False),
|
|
|
+ ("MAPCRUNCH", True): lib.MapCrunchPointSource(stock_target=stock_target, max_retries=1000, only_america=True),
|
|
|
+ ("RANDOMSTREETVIEW", False): lib.RSVPointSource(stock_target=stock_target, only_america=False),
|
|
|
+ ("RANDOMSTREETVIEW", True): lib.RSVPointSource(stock_target=stock_target, only_america=True),
|
|
|
+ ("URBAN", False): lib.UrbanPointSource(
|
|
|
+ stock_target=stock_target,
|
|
|
+ max_retries=100,
|
|
|
+ retries_per_point=30,
|
|
|
+ max_dist_km=25,
|
|
|
+ usa_chance=0.1
|
|
|
+ ),
|
|
|
+ ("URBAN", True): lib.UrbanPointSource(
|
|
|
+ stock_target=stock_target,
|
|
|
+ max_retries=100,
|
|
|
+ retries_per_point=30,
|
|
|
+ max_dist_km=25,
|
|
|
+ usa_chance=1.0
|
|
|
+ )
|
|
|
+}
|
|
|
+for src in sources.values():
|
|
|
+ threading.Thread(target=src.restock).start()
|
|
|
|
|
|
|
|
|
def require_game(game_id):
|
|
@@ -52,27 +76,11 @@ def create_game():
|
|
|
if not isinstance(gen_method, str):
|
|
|
abort(400)
|
|
|
|
|
|
- coords = []
|
|
|
-
|
|
|
- if gen_method == "MAPCRUNCH":
|
|
|
- for _ in range(rounds):
|
|
|
- maybe_coord = lib.generate_coord(only_america=only_america)
|
|
|
- while maybe_coord is None:
|
|
|
- maybe_coord = lib.generate_coord(only_america=only_america)
|
|
|
- coords.append(maybe_coord)
|
|
|
- elif gen_method == "RANDOMSTREETVIEW":
|
|
|
- gen = rsv_gen_usa if only_america else rsv_gen
|
|
|
- for _ in range(rounds):
|
|
|
- coords.append(next(gen))
|
|
|
- elif gen_method == "URBAN":
|
|
|
- for _ in range(rounds):
|
|
|
- maybe_coord = lib.urban_coord(only_america=only_america)
|
|
|
- while maybe_coord is None:
|
|
|
- maybe_coord = lib.urban_coord(only_america=only_america)
|
|
|
- coords.append(maybe_coord)
|
|
|
- else:
|
|
|
+ src = sources.get((gen_method, only_america), None)
|
|
|
+ if src is None:
|
|
|
abort(400)
|
|
|
-
|
|
|
+
|
|
|
+ coords = src.get_points(n=rounds)
|
|
|
new_game = db.Game.create(timer, rounds, only_america, gen_method, coords)
|
|
|
|
|
|
return jsonify({"gameId": new_game.game_id})
|