Changeset 923


Ignore:
Timestamp:
02/04/2011 01:18:14 PM (10 years ago)
Author:
dave
Message:

FAtiMA tweak for ids, character movement based on what it's appraising

Location:
scenarios/GerminationX/oak
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • scenarios/GerminationX/oak/run.sh

    r904 r923  
    11java -classpath $( echo lib/*.jar . | sed 's/ /:/g'):src clojure.main src/oak/core.clj & 
    2 sleep 50 
     2sleep 30 
    33echo starting agents... 
    44java -cp lib/FAtiMA.jar FAtiMA.Agent localhost 46874 false CanopySpirit F CanopySpirit CanopySpirit strength:4 hurt:false pose:standing & 
  • scenarios/GerminationX/oak/src/oak/core.clj

    r917 r923  
    9494 
    9595  (GET "/spirit-info" [] 
    96        (json/encode-to-str (map 
    97                             (fn [a] 
    98                               {:name (remote-agent-name a) 
    99                                :emotions (remote-agent-emotions a) 
    100                                :actions (remote-agent-done a)}) 
    101                             (world-agents (deref fatima-world))) 
    102                            :indent 2)) 
     96       (json/encode-to-str (:spirits (deref my-game-world)))) 
     97 
    10398  (GET "/perceive" [] 
    10499       (world-perceive-all (deref fatima-world)) 
  • scenarios/GerminationX/oak/src/oak/game_world.clj

    r917 r923  
    1515(ns oak.game-world 
    1616  (:use 
     17   oak.io 
    1718   oak.forms 
    1819   oak.vec2 
     
    5657          game-world)) 
    5758 
     59(defn find-spirit [world name] 
     60  (reduce 
     61   (fn [r spirit] 
     62     (if (and (not r) (= name (:name spirit))) 
     63       spirit r)) 
     64   false 
     65   (:spirits world))) 
     66 
     67(defn layer->spirit-name [layer] 
     68  (cond 
     69   (= layer "canopy") "CanopySpirit" 
     70   (= layer "vertical") "VerticalSpirit" 
     71   (= layer "cover") "CoverSpirit" 
     72   :else "UnknownSpirit")) 
     73 
     74(defn game-world-summon-spirit [world tile-pos entity] 
     75  (let [spirit-name (layer->spirit-name (:layer entity))] 
     76    (modify :spirits 
     77            (fn [spirits] 
     78              (map 
     79               (fn [spirit] 
     80                 (if (= spirit-name (:name spirit)) 
     81                   (modify :tile 
     82                           (fn [tile] 
     83                             (println (str "summonning " spirit-name " to " tile-pos)) 
     84                             tile-pos) 
     85                           spirit) 
     86                   spirit)) 
     87               spirits)) 
     88            world))) 
     89 
    5890(defn game-world-add-entity [game-world tile-pos entity] 
    5991  (let [tile (game-world-get-tile game-world tile-pos)] 
    60     (if (not tile) 
    61       (game-world-add-tile game-world (make-tile tile-pos (list entity))) 
    62       (game-world-modify-tile 
    63        game-world 
    64        tile-pos 
    65        (fn [tile] 
    66          (tile-add-entity tile entity)))))) 
     92    (game-world-summon-spirit 
     93     (if (not tile) 
     94       (game-world-add-tile game-world (make-tile tile-pos (list entity))) 
     95       (game-world-modify-tile 
     96        game-world 
     97        tile-pos 
     98        (fn [tile] 
     99          (tile-add-entity tile entity)))) 
     100     tile-pos 
     101     entity))) 
    67102 
    68103(defn make-game-world [num-plants area] 
     
    108143            (reduce 
    109144             (fn [spirits agent] 
    110                (let [spirit (game-world-find-spirit game-world 
    111                                                     (remote-agent-name agent))] 
     145               (let [spirit (game-world-find-spirit 
     146                             game-world 
     147                             (remote-agent-name agent))] 
    112148                 (if spirit 
    113                    (cons (spirit-update spirit agent) spirits) 
     149                   (cons (spirit-update 
     150                          spirit agent 
     151                          (game-world-get-tile 
     152                           game-world (:tile spirit))) 
     153                         spirits) 
    114154                   (cons (make-spirit agent) spirits)))) 
    115155             '() 
     
    118158 
    119159(defn game-world-sync->fatima [fatima-world game-world time] 
    120   (let [tile (game-world-get-tile game-world (make-vec2 0 0))]  
     160  (reduce 
     161   (fn [fw tile] 
    121162    (reduce 
    122163     (fn [fw entity] 
     
    132173        (do 
    133174          (world-add-object fw 
    134                             {"name" (str (:layer entity) "-" (:state entity)) 
     175                            {"name" (str (:layer entity) "-" (:state entity) "#" (:id entity) "#") 
    135176                             "owner" (:layer entity) 
    136177                             "position" (str (:x (:pos entity)) "," (:y (:pos entity))) 
     
    139180                             "time" time})) 
    140181        :else fw)) 
    141      fatima-world 
    142      (:entities tile)))) 
     182     fw 
     183     (:entities tile))) 
     184   fatima-world 
     185   (:tiles game-world))) 
     186 
     187 
  • scenarios/GerminationX/oak/src/oak/io.clj

    r918 r923  
    8383    (.readObject inp))) 
    8484 
    85 (def buf (ByteBuffer/allocateDirect 40960)) 
     85(def buf (ByteBuffer/allocateDirect 409600)) 
    8686 
    8787(defn read-msg [sc] 
  • scenarios/GerminationX/oak/src/oak/spirit.clj

    r917 r923  
    1616(ns oak.spirit 
    1717  (:use 
     18   oak.io 
    1819   oak.vec2 
    1920   oak.remote-agent 
    20    oak.forms) 
     21   oak.forms 
     22   oak.tile) 
    2123  (:require 
    2224   clojure.contrib.math)) 
     
    2527  [tile 
    2628   pos 
    27    name]) 
     29   name 
     30   emotions 
     31   actions]) 
    2832 
    2933(defn make-spirit [remote-agent] 
     
    3236   (make-vec2 0 0) 
    3337   (make-vec2 0 0) 
    34    (remote-agent-name remote-agent))) 
     38   (remote-agent-name remote-agent) 
     39   '() '())) 
     40 
     41; convert foofooname#999# to 999 
     42(defn fatima-name->id [name] 
     43  (if (.contains name "#") 
     44    (parse-number (.substring name 
     45                              (+ 1 (.indexOf name "#")) 
     46                              (.lastIndexOf name "#"))) 
     47    false)) 
     48 
     49(defn spirit-update [spirit remote-agent tile] 
     50; for the moment take a straight copy of actions and emotions 
     51  (let [spirit (modify :emotions 
     52                       (fn [emotions] 
     53                         (remote-agent-emotions remote-agent)) 
     54                       (modify :actions 
     55                               (fn [actions] 
     56                                 (remote-agent-done remote-agent)) 
     57                               spirit))] 
     58     
     59    ; if we have some actions 
     60    (if (not (empty? (:actions spirit))) 
     61      (let [latest-action (first (:actions spirit)) 
     62            latest-subject (nth (.split (:msg latest-action) " ") 1) 
     63            id (fatima-name->id latest-subject)] 
     64        (if id 
     65          (let [e (tile-find-entity tile id)] 
     66            (if e 
     67              (modify :pos (fn [pos] (:pos e)) spirit) 
     68              spirit)) 
     69          spirit)) 
     70      spirit))) 
     71             
     72           
     73(comment println 
     74         (map 
     75          (fn [relation] 
     76            (list (:tag relation) 
     77                  (map 
     78                   (fn [chunk] 
     79                     (list (:tag chunk) (:content chunk))) 
     80                   (:content relation)))) 
     81          (:content (remote-agent-relations remote-agent)))) 
     82 
    3583   
    36 (defn spirit-update [spirit remote-agent] 
    37   (comment println (:name spirit)) 
    38   (comment println (remote-agent-done remote-agent)) 
    39   (comment println (map 
    40             (fn [emotion] 
    41               (if (= (:tag emotion) :Mood) 
    42                 (list "Mood" (:content emotion)) 
    43                 (let [e (:attrs emotion)] 
    44                   (list (:type e) (:cause e))))) 
    45             (:content (remote-agent-emotions remote-agent)))) 
    46   (comment println 
    47    (map 
    48     (fn [relation] 
    49       (list (:tag relation) 
    50             (map 
    51              (fn [chunk] 
    52                (list (:tag chunk) (:content chunk))) 
    53              (:content relation)))) 
    54     (:content (remote-agent-relations remote-agent)))) 
    55   spirit) 
  • scenarios/GerminationX/oak/src/oak/tile.clj

    r874 r923  
    4343    tile)) 
    4444 
     45(defn tile-find-entity [tile id] 
     46  (reduce 
     47   (fn [r e] 
     48     (if (and (not r) (= id (:id e))) 
     49       e r)) 
     50   false 
     51   (:entities tile))) 
     52 
    4553(defn tile-get-neighbours [tile pos] 
    4654  (reduce 
  • scenarios/GerminationX/oak/src/oak/world.clj

    r917 r923  
    128128                        (world-objects world)))))) 
    129129 
    130 (defn world-get-object [world name pos] 
     130(defn world-get-object [world name] 
    131131  (reduce 
    132132   (fn [r obj] 
    133      (if (and (not r) (= pos (get obj "position")) (= name (get obj "name"))) 
     133     (if (and (not r) (= name (get obj "name"))) 
    134134       obj r)) 
    135135   false 
     
    137137 
    138138(defn world-add-object [world object] 
    139   (if (not (world-get-object world (get object "name") (get object "position"))) 
     139  ; check we haven't added it already 
     140  (if (not (world-get-object world (get object "name"))) 
    140141    (do 
    141       (println (str "adding " (get object "name") " " (get object "position"))) 
    142142      (world-broadcast-all world (str "ENTITY-ADDED " (get object "name"))) 
    143       (println (str (count (world-objects world)) "objects stored")) 
     143      (println (str "added " (get object "name") " " (get object "position") " " 
     144                    (count (world-objects world)) " objects stored")) 
    144145      (merge world {:objects (cons object (world-objects world))})) 
    145146    world)) 
     
    198199                      (hash-map-to-string 
    199200                       (world-get-properties world (nth toks 1))))) 
    200        (merge agent {:done (max-cons (str (world-time world) ": " msg) 
     201       (merge agent {:done (max-cons {:time (world-time world) 
     202                                      :msg msg} 
    201203                                     (remote-agent-done agent) 4)})) 
    202204     (= type "say") 
     
    238240        (apply str (concat "ACTION-FINISHED " (remote-agent-name agent) " " 
    239241                           (map (fn [s] (str s " ")) toks)))) 
    240        (merge agent {:done (max-cons (str (world-time world) ": " msg) 
     242       (merge agent {:done (max-cons {:time (world-time world) 
     243                                      :msg msg} 
    241244                                     (remote-agent-done agent) 4)}))))) 
    242245 
Note: See TracChangeset for help on using the changeset viewer.