Changeset 846


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

client talking to the game server properly

Location:
scenarios/GerminationX
Files:
2 added
1 deleted
15 edited

Legend:

Unmodified
Added
Removed
  • scenarios/GerminationX/fungi/src/Fungi.hx

    r827 r846  
    2323import truffle.RndGen; 
    2424import truffle.Circle; 
    25 import truffle.Client; 
    2625import truffle.Entity; 
    2726import truffle.SpriteEntity; 
     
    6160    var Scale:Float; 
    6261    var PlantType:String; 
     62    var Seeds:Array<Sprite>; 
    6363 
    6464        public function new(world:World, owner:String, pos, type, maxsize, scale) 
     
    7070        Scale=maxsize; 
    7171        NeedsUpdate=true; 
     72        Seeds=[]; 
    7273 
    7374        if (scale) 
     
    7879        else 
    7980        { 
     81            Spr.SetScale(new Vec2(Scale,Scale)); 
    8082            Age=100; 
    8183        } 
     
    8991        //addChild(tf); 
    9092        } 
     93 
     94    override function Destroy(world:World) 
     95    { 
     96        super.Destroy(world); 
     97        for (seed in Seeds) 
     98        { 
     99            world.RemoveSprite(seed); 
     100        } 
     101    } 
    91102         
    92103        public override function Update(frame:Int, world:World) 
     
    110121                         Resources.Get("seed")); 
    111122        world.AddSprite(f); 
    112         f.MouseDown([this,world],function(c)  
    113         { 
    114             var w = cast(c[1],FungiWorld); 
    115             w.Seeds.Add(new Seed(c[0].PlantType,f)); 
     123        Seeds.push(f); 
     124        f.MouseDown(this,function(p)  
     125        {             
     126            var s=new Seed(p.PlantType); 
     127            if (world.Seeds.Add(world,s)) 
     128            { 
     129                p.Seeds.remove(f); 
     130                world.RemoveSprite(f); 
     131            } 
    116132        }); 
    117133    } 
     
    241257    public var Spr:Sprite; 
    242258 
    243     public function new(t:String,s:Sprite) 
     259    public function new(t:String) 
    244260    { 
    245261        Type=t; 
    246         Spr=s; 
     262        Spr=new Sprite(new Vec2(0,0),Resources.Get("seed")); 
    247263    } 
    248264} 
     
    255271    public function new(size:Int) 
    256272    { 
    257         Seeds = new Array<Seed>(); 
     273        Seeds = []; 
    258274        Size = size; 
    259275    } 
    260276 
    261     public function Add(s:Seed) 
     277    public function Add(world:World,s:Seed) : Bool 
    262278    { 
    263279        if (Seeds.length<Size) 
     
    265281            Seeds.push(s); 
    266282            s.Spr.SetPos(new Vec2(20+Seeds.length*10,30)); 
     283            //cast(world,truffle.flash.FlashWorld).addSprite(s.Spr); 
     284            //trace("did it..."); 
    267285            s.Spr.Update(0,null); 
    268         } 
     286            return true; 
     287        } 
     288        return false; 
    269289    } 
    270290 
     
    274294        { 
    275295            var s = Seeds.pop(); 
    276             world.RemoveSprite(s.Spr); 
     296//            world.RemoveSprite(s.Spr); 
    277297            return s.Type; 
    278298        } 
     
    293313        public var WorldPos:Vec3; 
    294314        var MyRndGen:RndGen; 
    295         public var WorldClient:Client; 
    296315        public var MyTextEntry:TextEntry; 
    297         var Plants:Array<Plant>; 
     316        public var Plants:Array<Plant>; 
    298317        var MyName:String; 
    299318    var Frame:Int; 
     
    303322    var CursorLogicalPos:Vec3; 
    304323    public var Seeds:SeedStore; 
     324    var Server : ServerConnection; 
    305325 
    306326        public function new(w:Int, h:Int)  
     
    317337                WorldPos = new Vec3(0,0,0); 
    318338                MyRndGen = new RndGen(); 
    319                 WorldClient = new Client(OnServerPlantsCallback); 
    320339        CursorLogicalPos = new Vec3(5,5,0); 
     340        Server = new ServerConnection(); 
    321341 
    322342        Cursor=new Sprite(new Vec2(0,0), Resources.Get("cursor"), true); 
    323343        AddSprite(Cursor); 
    324344 
    325 /*        var arrow=new Sprite(new Vec2(0,0), Resources.Get("test")); 
    326         arrow.MouseDown(this,function(c) { c.UpdateWorld(c.WorldPos.Add(new Vec3(1,0,0))); }); 
     345        var arrow = new Sprite(new Vec2(500,0), Resources.Get("test")); 
     346        arrow.MouseUp(this,function(c) { c.UpdateWorld(c.WorldPos.Add(new Vec3(0,-1,0))); }); 
    327347        AddSprite(arrow); 
    328348 
    329         arrow = new Sprite(new Vec2(500,0), Resources.Get("test")); 
    330         arrow.MouseDown(this,function(c) { c.UpdateWorld(c.WorldPos.Add(new Vec3(-1,0,0))); }); 
     349        arrow=new Sprite(new Vec2(0,400), Resources.Get("test")); 
     350        arrow.MouseUp(this,function(c) { c.UpdateWorld(c.WorldPos.Add(new Vec3(0,1,0))); }); 
    331351        AddSprite(arrow); 
    332352 
    333         arrow=new Sprite(new Vec2(0,400), Resources.Get("test")); 
    334         arrow.MouseDown(this,function(c) { c.UpdateWorld(c.WorldPos.Add(new Vec3(0,1,0))); }); 
     353        arrow=new Sprite(new Vec2(0,0), Resources.Get("test")); 
     354        arrow.MouseUp(this,function(c) { c.UpdateWorld(c.WorldPos.Add(new Vec3(-1,0,0))); }); 
    335355        AddSprite(arrow); 
    336356 
    337357        arrow=new Sprite(new Vec2(500,400), Resources.Get("test")); 
    338         arrow.MouseDown(this,function(c) { c.UpdateWorld(c.WorldPos.Add(new Vec3(0,-1,0))); }); 
    339       AddSprite(arrow); 
    340 */ 
     358        arrow.MouseUp(this,function(c) { c.UpdateWorld(c.WorldPos.Add(new Vec3(1,0,0))); }); 
     359        AddSprite(arrow); 
     360 
    341361        MyName = "foo"; 
    342362 
     
    365385                } 
    366386 
    367  
    368 /*        MouseDown(this, function(c) 
    369         { 
    370             var type=c.Seeds.Remove(cast(c,truffle.World)); 
    371             if (type!="") 
    372             { 
    373                 c.AddServerPlant(c.CursorLogicalPos.Add(new Vec3(0,0,1)),type); 
    374             } 
    375         }); 
    376 */ 
    377  
    378387                UpdateWorld(new Vec3(0,0,0)); 
    379388                 
     
    391400        Update(0); 
    392401        SortScene(); 
    393  
    394  
    395         for (i in 0...10) 
    396         { 
    397             AddServerPlant(new Vec3(MyRndGen.RndInt()%10, 
    398                                     MyRndGen.RndInt()%10,1), 
    399             MyRndGen.Choose( 
    400                 [ 
    401                     "plant-001", 
    402                     "plant-002", 
    403                     "plant-003", 
    404                     "plant-004", 
    405                     "plant-005", 
    406                     "plant-006", 
    407                     "plant-007", 
    408                     "plant-008" 
    409                 ])); 
    410        } 
    411  
    412       WorldClient.Call("spirit-sprites",UpdateSpiritSprites); 
     402        Server.Request("spirit-sprites",this,UpdateSpiritSprites); 
    413403        } 
    414404         
     
    416406        { 
    417407                removeChild(MyTextEntry); 
    418                 WorldClient.Identify(name); 
    419408                MyName=name; 
    420409                //WorldClient.GetPlants(cast(WorldPos.x,Int),cast(WorldPos.y,Int)); 
     
    426415                 
    427416                var circles = []; 
    428                  
    429                 for (i in Plants) Remove(i); 
    430                 Plants=[]; 
    431                  
    432                 for (x in -1...2) 
     417        for (x in -1...2) 
    433418                { 
    434419                        for (y in -1...2) 
     
    460445            Objs[i].Update(0,this); 
    461446                } 
    462                  
    463                 //WorldClient.GetPlants(cast(WorldPos.x,Int),cast(WorldPos.y,Int)); 
    464         } 
    465                  
     447 
     448        ClearPlants();           
     449        Server.Request("get-tile/"+Std.string(cast(WorldPos.x,Int))+"/" 
     450                                  +Std.string(cast(WorldPos.y,Int)), 
     451        this, 
     452        function (c:truffle.World,d) 
     453        { 
     454            var data:Array<Dynamic>=cast(d.entities,Array<Dynamic>); 
     455            for (p in data) 
     456            { 
     457                var pos = new Vec3(p.pos.x,p.pos.y,1); 
     458                 
     459                if (pos.x<10 && pos.y<10 && pos.x>0 && pos.y>0 && 
     460                    c.SpaceClear(pos) && c.GetCube(pos).LogicalPos.z>-1) 
     461                { 
     462                    var plant = new Plant(c,p.owner,pos,p.type,p.size/100,false); 
     463                    c.Plants.push(plant); 
     464                } 
     465            } 
     466            c.SortScene(); 
     467        }); 
     468        } 
     469 
     470        public function AddServerPlant(pos:Vec3,type) 
     471        {         
     472        if (MyName!=null && SpaceClear(pos) && GetCube(pos).LogicalPos.z>-1) 
     473        { 
     474            var size=MyRndGen.RndFlt()+0.5; 
     475                    var plant = new Plant(this,MyName,pos,type,size,true); 
     476                    Plants.push(plant); 
     477            Server.Request("make-plant/"+Std.string(cast(WorldPos.x,Int))+"/"+ 
     478                                         Std.string(cast(WorldPos.y,Int))+"/"+ 
     479                                         Std.string(cast(pos.x,Int))+"/"+ 
     480                                         Std.string(cast(pos.y,Int))+"/"+ 
     481                                         type+"/"+ 
     482                                         MyName+"/"+ 
     483                                         Math.round(size*100), 
     484            this, function (c,data) {});        
     485            SortScene(); 
     486        } 
     487        } 
     488 
     489    public function ClearPlants() : Void 
     490    { 
     491        for (plant in Plants) 
     492        { 
     493            Remove(plant); 
     494        } 
     495        Plants = []; 
     496        } 
     497         
    466498        public function GetCube(pos:Vec3) : Cube 
    467499        { 
     
    469501        } 
    470502         
    471         public function OnServerPlantsCallback(ServerPlants:Array<ServerPlant>) 
    472         { 
    473                 for (splant in ServerPlants) 
    474                 { 
    475                         var plant = new Plant(this,splant.owner,new Vec3(splant.x,splant.y,1),splant.type,splant.size,false); 
    476                         Plants.push(plant); 
    477                 } 
    478         SortScene(); 
    479         } 
    480  
    481     public function UpdateSpiritSprites(data:Array<Dynamic>) 
     503    public function UpdateSpiritSprites(c,data:Array<Dynamic>) 
    482504    { 
    483505        var sk:SkeletonEntity = new SkeletonEntity(this,new Vec3(0,5,4)); 
     
    495517        return true; 
    496518    } 
    497  
    498         public function AddServerPlant(pos:Vec3,type) 
    499         {         
    500         if (MyName!=null && SpaceClear(pos) && GetCube(pos).LogicalPos.z>-1) 
    501         { 
    502             var size=MyRndGen.RndFlt(); 
    503              
    504                     // call by reference :Sx 
    505                     var plant = new Plant(this,MyName,pos,type,size,true); 
    506                     Plants.push(plant); 
    507                     //WorldClient.AddPlant(cast(WorldPos.x,Int), cast(WorldPos.y,Int),  
    508                         //                               new ServerPlant(MyName,cast(pos.x,Int),cast(pos.y,Int),type)); 
    509             SortScene(); 
    510         } 
    511         } 
    512519         
    513520        override public function Handle(e:Int) 
     
    534541    { 
    535542        super.Update(time); 
     543 
     544        Server.Update(); 
     545 
    536546        /*if (time>TickTime) 
    537547        { 
  • scenarios/GerminationX/fungi/src/TruffleTest.hx

    r843 r846  
    2121import truffle.RndGen; 
    2222import truffle.Circle; 
    23 import truffle.Client; 
    2423import truffle.Entity; 
    2524import truffle.SpriteEntity; 
     
    3231    var Frame:Int; 
    3332    var TickTime:Int; 
    34         public var WorldClient:Client; 
     33        public var Server:ServerConnection; 
    3534    var Sprites:Array<Sprite>; 
    3635    var TestBone:Bone; 
     
    4140                Frame=0; 
    4241        TickTime=0; 
    43                 WorldClient=new Client(OnServerPlantsCallback); 
     42                Server=new ServerConnection(); 
    4443        Sprites=new Array<Sprite>(); 
    4544 
     
    9897        SortScene(); 
    9998         
    100         WorldClient.Call("spirit-sprites",UpdateSpiritSprites); 
     99        Server.Request("spirit-sprites",this,UpdateSpiritSprites); 
    101100        } 
    102101 
    103     public function UpdateSpiritSprites(data:Array<Dynamic>) 
     102    public function UpdateSpiritSprites(c,data:Array<Dynamic>) 
    104103    { 
    105104        var sk:SkeletonEntity = new SkeletonEntity(this,new Vec3(5,0,0)); 
  • scenarios/GerminationX/fungi/src/truffle/Entity.hx

    r820 r846  
    3333        } 
    3434 
     35    // called by world before destruction (cnance to remove sprites) 
     36    public function Destroy(world:World) 
     37    { 
     38    } 
     39 
    3540        public function Pos2PixelPos(pos:Vec3) : Vec3 
    3641        { 
  • scenarios/GerminationX/fungi/src/truffle/RndGen.hx

    r814 r846  
    4747        public function RndFlt() : Float 
    4848        { 
    49                 return RndInt()/Math.pow(2,32)+0.5; 
     49                return RndInt()/Math.pow(2,32)*2; 
    5050        } 
    5151 
  • scenarios/GerminationX/fungi/src/truffle/SpriteEntity.hx

    r820 r846  
    2828        } 
    2929                 
     30    override function Destroy(world:World) 
     31    { 
     32        super.Destroy(world); 
     33        world.RemoveSprite(Spr); 
     34    } 
     35 
    3036        override public function Update(frame:Int, world:World) 
    3137        { 
  • scenarios/GerminationX/fungi/src/truffle/flash/FlashServerConnection.hx

    r843 r846  
    3030 
    3131import truffle.interfaces.ServerConnection; 
     32import truffle.interfaces.ServerRequest; 
    3233 
    33 class FlashServerConnection implements ServerConnection 
     34class FlashServerConnection extends ServerConnection 
    3435{ 
    3536    var Loader:URLLoader; 
    36     var Loading:Bool; 
    37     var LoadedCallback:Dynamic -> Void; 
     37    var LoadedCallback:Dynamic -> Dynamic -> Void; 
     38    var LoadedContext:Dynamic; 
    3839 
    3940    public function new()  
    4041        { 
    41         Loading = false; 
     42        super(); 
    4243        Loader = new URLLoader(); 
    4344        Loader.dataFormat = URLLoaderDataFormat.TEXT; 
     
    5051        } 
    5152         
    52     public function MakeParams(p:Dynamic) : String 
    53     { 
    54         var s = "?"; 
    55         var first=true; 
    56         for (field in Reflect.fields(p))  
    57         { 
    58             var value:String = Reflect.field(p, field); 
    59             if (!first) s+="&";             
    60             first=false; 
    61             s+=field+"="+value; 
    62         }      
    63         return s; 
    64     } 
    65  
    66     public function Request(Args:Dynamic, Callback:Dynamic -> Void) : Bool 
     53    override function InnerRequest(r:ServerRequest) : Void 
    6754    {         
    68         if (!Loading) 
    69         { 
    70             LoadedCallback = Callback; 
    71             // can't get URLVariables to work so doing it by hand :/ 
    72             //var urlvars:URLVariables = new URLVariables("function_name=ping");       
    73             var request:URLRequest = new URLRequest(Args.function_name/*+MakeParams(Args)*/); 
    74             request.method = URLRequestMethod.POST; 
    75             //request.data = urlvars; 
    76             Loader.load(request); 
    77             return true; 
    78         } 
    79         return false; 
     55        Ready=false; 
     56        LoadedCallback = r.Callback; 
     57        LoadedContext = r.Context; 
     58        //trace(URL); 
     59        var request:URLRequest = new URLRequest(r.URL); 
     60        request.method = URLRequestMethod.POST; 
     61        Loader.load(request); 
    8062    } 
    8163     
    8264    private function CompleteHandler(event:Event) 
    8365    { 
     66        Ready=true; 
    8467        //trace(Loader.data); 
    85         return LoadedCallback(JSON.decode(Loader.data));    
     68        var t=JSON.decode(Loader.data); 
     69        LoadedCallback(LoadedContext,JSON.decode(Loader.data));    
    8670    } 
    8771     
  • scenarios/GerminationX/fungi/src/truffle/flash/FlashSprite.hx

    r843 r846  
    4242    var MouseDownFunc:Dynamic -> Void; 
    4343    var MouseDownContext:Dynamic; 
     44    var MouseUpFunc:Dynamic -> Void; 
     45    var MouseUpContext:Dynamic; 
    4446    var MouseOverFunc:Dynamic -> Void; 
    4547    var MouseOverContext:Dynamic; 
     
    8183    } 
    8284 
     85        public function MouseUp(c:Dynamic, f:Dynamic -> Void=null) 
     86        { 
     87        MouseUpFunc=f; 
     88        MouseUpContext=c; 
     89                addEventListener(MouseEvent.MOUSE_UP, MouseUpCB); 
     90        } 
     91 
     92    public function MouseUpCB(e) 
     93    { 
     94        MouseUpFunc(MouseUpContext); 
     95    } 
     96 
    8397        public function MouseOver(c:Dynamic, f:Dynamic -> Void=null) 
    8498        { 
  • scenarios/GerminationX/fungi/src/truffle/flash/FlashWorld.hx

    r820 r846  
    4343    public function Remove(e:Entity) 
    4444    { 
     45        e.Destroy(cast(this,truffle.World)); 
    4546        Scene.remove(e); 
    4647    } 
  • scenarios/GerminationX/fungi/src/truffle/interfaces/ServerConnection.hx

    r437 r846  
    1515 
    1616package truffle.interfaces; 
     17import truffle.interfaces.ServerRequest; 
    1718 
    18 interface ServerConnection 
     19class ServerConnection 
    1920{ 
    20     public function Request(Args:Dynamic, Callback:Dynamic -> Void) : Bool; 
     21    var RequestQueue:Array<ServerRequest>; 
     22    var Ready:Bool; 
     23 
     24    public function new() 
     25    { 
     26        RequestQueue=[]; 
     27        Ready=true; 
     28    } 
     29 
     30    public function Request(URL:String,  
     31                            Context:Dynamic, 
     32                            Callback:Dynamic -> Dynamic -> Void) : Void 
     33    { 
     34        RequestQueue.push(new ServerRequest(URL,Context,Callback)); 
     35    } 
     36 
     37    public function InnerRequest(r:ServerRequest) : Void 
     38    { 
     39    } 
     40 
     41    public function Update() : Void 
     42    { 
     43        if (RequestQueue.length>0 && Ready) 
     44        { 
     45            InnerRequest(RequestQueue.pop()); 
     46        } 
     47    } 
    2148} 
  • scenarios/GerminationX/fungi/src/truffle/interfaces/Sprite.hx

    r843 r846  
    2626 
    2727        public function MouseDown(c:Dynamic, f:Dynamic -> Void=null) : Void; 
     28        public function MouseUp(c:Dynamic, f:Dynamic -> Void=null) : Void; 
    2829        public function MouseOver(c:Dynamic, f:Dynamic -> Void=null) : Void; 
    2930        public function ChangeBitmap(t:TextureDesc) : Void; 
  • scenarios/GerminationX/oak/src/oak/core.clj

    r844 r846  
    3434             "AppleTree")))) 
    3535 
    36 (def my-game-world (ref (game-world-load state-filename))) 
    37 (println (deref my-game-world)) 
    38 ;(def my-game-world (ref (make-game-world))) 
     36;(def my-game-world (ref (game-world-load state-filename))) 
     37(def my-game-world (ref (make-game-world 1000 4))) 
     38(game-world-print (deref my-game-world)) 
     39;(world-crank (deref myworld)) 
    3940 
    40 ;(world-crank (deref myworld)) 
     41(defn parse [s] 
     42  (try (Integer/parseInt (.trim s)) 
     43       (catch NumberFormatException e nil))) 
    4144 
    4245(defroutes main-routes 
    4346  (GET "/get-tile/:tilex/:tiley" [tilex tiley] 
    44        (println (list tilex tiley)) 
    4547       (let [tile (game-world-get-tile (deref my-game-world) 
    46                                        (make-vec2 tilex tiley))] 
     48                                       (make-vec2 (parse tilex) 
     49                                                  (parse tiley)))] 
    4750         (if tile 
    4851           (json/encode-to-str tile) 
    4952           (json/encode-to-str '())))) 
    50   (GET "/make-plant/:tilex/:tiley/:posx/:posy/:type/:owner" 
    51        [tilex tiley posx posy type owner] 
    52        (println (list tilex tiley posx posy type owner)) 
     53  (GET "/make-plant/:tilex/:tiley/:posx/:posy/:type/:owner/:size" 
     54       [tilex tiley posx posy type owner size] 
    5355       (dosync 
    5456        (ref-set my-game-world 
    5557                 (game-world-add-entity 
    5658                  (deref my-game-world) 
    57                   (make-vec2 tilex tiley) 
    58                   (make-plant (make-vec2 posx posy) type owner)))) 
     59                  (make-vec2 (parse tilex) (parse tiley)) 
     60                  (make-plant (make-vec2 (parse posx) (parse posy)) type owner size)))) 
    5961       (game-world-save (deref my-game-world) state-filename) 
    60        (println (deref my-game-world))) 
     62       (println (deref my-game-world)) 
     63       (json/encode-to-str '("ok"))) 
    6164  (GET "/spirit-sprites" [] 
    6265       (println (read-islands "./public/islands")) 
  • scenarios/GerminationX/oak/src/oak/game_world.clj

    r844 r846  
    1717   oak.vec2 
    1818   oak.plant 
    19    oak.tile)) 
     19   oak.tile 
     20   oak.rand) 
     21  (:require 
     22   clojure.contrib.math)) 
    2023 
    2124(defrecord game-world 
     
    2730(defn game-world-tiles [game-world] (:tiles game-world)) 
    2831(defn game-world-spirits [game-world] (:spirits game-world)) 
    29  
    30 (defn make-game-world [] 
    31   (game-world. () {} ())) 
    3232 
    3333(defn game-world-get-tile [game-world pos] 
     
    4343  (merge game-world {:tiles (cons tile (game-world-tiles game-world))})) 
    4444 
     45(defn game-world-modify-tile [game-world pos f] 
     46  (merge 
     47   game-world 
     48   {:tiles 
     49    (map 
     50     (fn [t] 
     51       (if (vec2-eq? (:pos t) pos) (f t) t)) 
     52     (game-world-tiles game-world))})) 
     53 
    4554(defn game-world-add-entity [game-world tile-pos entity] 
    4655  (let [tile (game-world-get-tile game-world tile-pos)] 
    4756    (if (not tile) 
    4857      (game-world-add-tile game-world (make-tile tile-pos (list entity))) 
    49       (tile-add-entity tile entity)))) 
     58      (game-world-modify-tile 
     59       game-world 
     60       tile-pos 
     61       (fn [tile] 
     62         (tile-add-entity tile entity)))))) 
     63 
     64(defn make-game-world [num-plants area] 
     65  (reduce 
     66   (fn [world plant] 
     67     (game-world-add-entity 
     68      world 
     69      (make-vec2 
     70       (Math/round (* (rand-gaussian) area)) 
     71       (Math/round (* (rand-gaussian) area))) 
     72      plant)) 
     73   (game-world. () {} ())  
     74   (repeatedly num-plants (fn [] (make-random-plant))))) 
     75 
     76(defn game-world-print [game-world] 
     77  (doseq [tile (game-world-tiles game-world)] 
     78    (println (format "tile %d %d" (:x (tile-pos tile)) (:y (tile-pos tile)))) 
     79    (doseq [plant (tile-entities tile)] 
     80      (println (format "plant %d %d" (:x (plant-pos plant)) (:y (plant-pos plant))))))) 
     81                                       
  • scenarios/GerminationX/oak/src/oak/plant.clj

    r844 r846  
    1313;; along with this program.  If not, see <http://www.gnu.org/licenses/>. 
    1414 
    15 (ns oak.plant) 
     15(ns oak.plant 
     16  (:use 
     17   oak.vec2) 
     18  (:require 
     19   clojure.contrib.math)) 
    1620 
    1721(defrecord plant 
     
    2125   state 
    2226   picked-by 
    23    owner]) 
     27   owner 
     28   size]) 
    2429 
    2530(defn plant-pos [plant] (:pos plant)) 
     
    2934(defn plant-picked-by [plant] (:picked-by plant)) 
    3035(defn plant-owner [plant] (:owner plant)) 
     36(defn plant-size [plant] (:size plant)) 
    3137 
    32 (defn make-plant [pos type owner] 
    33   (plant. pos type "" "" '() owner)) 
     38(defn make-plant [pos type owner size] 
     39  (plant. pos type "" "" '() owner size)) 
     40 
     41(defn make-random-plant [] 
     42  (make-plant 
     43   (make-vec2 (Math/round (rand 10)) (Math/round (rand 10))) 
     44   (rand-nth '("plant-001" 
     45               "plant-002" 
     46               "plant-003" 
     47               "plant-004" 
     48               "plant-005" 
     49               "plant-006" 
     50               "plant-007" 
     51               "plant-008")) 
     52   "germination x" 
     53   (Math/round (+ 50 (rand 100))))) 
  • scenarios/GerminationX/oak/src/oak/vec2.clj

    r844 r846  
    2424 
    2525(defn vec2-eq? [vec2 other] 
    26   (and (= (vec2-x vec2) (vec2-x other)) 
    27        (= (vec2-y vec2) (vec2-y other)))) 
     26  (and (= (:x vec2) (:x other)) 
     27       (= (:y vec2) (:y other)))) 
Note: See TracChangeset for help on using the changeset viewer.