diff --git a/resources/public/img/heightmaps/isle_of_man.png b/resources/public/img/heightmaps/isle_of_man.png new file mode 100644 index 0000000..7de05e9 Binary files /dev/null and b/resources/public/img/heightmaps/isle_of_man.png differ diff --git a/resources/templates/params.html b/resources/templates/params.html new file mode 100644 index 0000000..f0e13cb --- /dev/null +++ b/resources/templates/params.html @@ -0,0 +1,37 @@ +{% extends "templates/base.html" %} +{% block content %} +<form action="{{servlet-context}}/params" method="POST"> + <p class="widget"> + <label for="ruleset">The rule set to use</label> + <select name="ruleset"> + <option value="">No change - use your current rules</option> + {% for ruleset in rulesets %} + <option value="{{ruleset}}">{{ruleset}}</option> + {% endfor %} + </select> + </p> + <p class="widget"> + <label for="heightmap">The map to use</label> + <select name="heightmap"> + <option value="">No change - use your current map</option> + {% for heightmap in heightmaps %} + <option value="{{heightmap}}">{{heightmap}}</option> + {% endfor %} + </select> + </p> + <p class="widget"> + <label for="pause"> + Pause duration + </label> + <input id="pause" type="range" value="{{pause}}" min="0" max="60" step="5" /> + </p> + <p class="help"> + The pause beteen computing a new state of your world, in seconds + </p> + <p class="widget"> + <label for="submit">When you have chosen your parameters</label> + <input name="submit" id="submit" type="submit" value="Save your parameters!"/> + </p> +</form> + +{% endblock %} \ No newline at end of file diff --git a/resources/templates/trusted-content.html b/resources/templates/trusted-content.html new file mode 100644 index 0000000..94f188b --- /dev/null +++ b/resources/templates/trusted-content.html @@ -0,0 +1,6 @@ +{% extends "templates/base.html" %} +{% block content %} + <div> + {{content|safe}} + </div> +{% endblock %} diff --git a/src/mw_ui/routes/params.clj b/src/mw_ui/routes/params.clj new file mode 100644 index 0000000..d7f4150 --- /dev/null +++ b/src/mw_ui/routes/params.clj @@ -0,0 +1,56 @@ +(ns mw-ui.routes.params + (:use clojure.walk + compojure.core) + (:require [hiccup.core :refer [html]] + [mw-engine.heightmap :as heightmap] + [mw-parser.bulk :as compiler] + [mw-ui.layout :as layout] + [mw-ui.util :as util] + [mw-ui.render-world :as world] + [noir.session :as session])) + +(defn- send-params [] + {{:title "Choose your world" + :heightmaps (util/list-resources "resources/public/img/heightmaps" #"([0-9a-z-_]+).png") + :pause (or (session/get :pause) 5) + :rulesets (util/list-resources "resources/rulesets" #"([0-9a-z-_]+).txt") + }) + +(defn params-page + "Handler for params request. If no `request` passed, show empty params form. + If `request` is passed, put parameters from request into session and show + the world page." + ([] + (layout/render "params.html" (send-params))) + ([request] + (try + (let [params (keywordize-keys (:form-params request)) + map (:heightmap params) + pause (:pause params) + rulefile (:ruleset params) + rulepath (str "resources/rulesets/" rulefile ".txt")] + (if (not (= map "")) + (session/put! :world + (heightmap/apply-heightmap + (str "resources/public/img/heightmaps/" map ".png")))) + (if (not (= rulefile "")) + (do + (session/put! :rule-text (slurp rulepath)) + (session/put! :rules (compiler/compile-file rulepath)))) + (if (not (= pause "")) + (session/put! :pause pause)) + (layout/render "params.html" + (merge (send-params) + {:r rulefile + :h map + :message "Your parameters are saved, now look at your world"}))) + (catch Exception e + (let [params (keywordize-keys (:form-params request))] + (layout/render "params.html" + (merge (send-params) + {:title "Choose your world" + :r (:ruleset params) + :h (:heightmap params) + :message "Your paramters are not saved" + :error (str (.getName (.getClass e)) ": " (.getMessage e) "; " params)} + )))))))