Changeset 846
- Timestamp:
- 01/18/2011 01:27:14 PM (10 years ago)
- Location:
- scenarios/GerminationX
- Files:
-
- 2 added
- 1 deleted
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
scenarios/GerminationX/fungi/src/Fungi.hx
r827 r846 23 23 import truffle.RndGen; 24 24 import truffle.Circle; 25 import truffle.Client;26 25 import truffle.Entity; 27 26 import truffle.SpriteEntity; … … 61 60 var Scale:Float; 62 61 var PlantType:String; 62 var Seeds:Array<Sprite>; 63 63 64 64 public function new(world:World, owner:String, pos, type, maxsize, scale) … … 70 70 Scale=maxsize; 71 71 NeedsUpdate=true; 72 Seeds=[]; 72 73 73 74 if (scale) … … 78 79 else 79 80 { 81 Spr.SetScale(new Vec2(Scale,Scale)); 80 82 Age=100; 81 83 } … … 89 91 //addChild(tf); 90 92 } 93 94 override function Destroy(world:World) 95 { 96 super.Destroy(world); 97 for (seed in Seeds) 98 { 99 world.RemoveSprite(seed); 100 } 101 } 91 102 92 103 public override function Update(frame:Int, world:World) … … 110 121 Resources.Get("seed")); 111 122 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 } 116 132 }); 117 133 } … … 241 257 public var Spr:Sprite; 242 258 243 public function new(t:String ,s:Sprite)259 public function new(t:String) 244 260 { 245 261 Type=t; 246 Spr= s;262 Spr=new Sprite(new Vec2(0,0),Resources.Get("seed")); 247 263 } 248 264 } … … 255 271 public function new(size:Int) 256 272 { 257 Seeds = new Array<Seed>();273 Seeds = []; 258 274 Size = size; 259 275 } 260 276 261 public function Add( s:Seed)277 public function Add(world:World,s:Seed) : Bool 262 278 { 263 279 if (Seeds.length<Size) … … 265 281 Seeds.push(s); 266 282 s.Spr.SetPos(new Vec2(20+Seeds.length*10,30)); 283 //cast(world,truffle.flash.FlashWorld).addSprite(s.Spr); 284 //trace("did it..."); 267 285 s.Spr.Update(0,null); 268 } 286 return true; 287 } 288 return false; 269 289 } 270 290 … … 274 294 { 275 295 var s = Seeds.pop(); 276 world.RemoveSprite(s.Spr);296 // world.RemoveSprite(s.Spr); 277 297 return s.Type; 278 298 } … … 293 313 public var WorldPos:Vec3; 294 314 var MyRndGen:RndGen; 295 public var WorldClient:Client;296 315 public var MyTextEntry:TextEntry; 297 var Plants:Array<Plant>;316 public var Plants:Array<Plant>; 298 317 var MyName:String; 299 318 var Frame:Int; … … 303 322 var CursorLogicalPos:Vec3; 304 323 public var Seeds:SeedStore; 324 var Server : ServerConnection; 305 325 306 326 public function new(w:Int, h:Int) … … 317 337 WorldPos = new Vec3(0,0,0); 318 338 MyRndGen = new RndGen(); 319 WorldClient = new Client(OnServerPlantsCallback);320 339 CursorLogicalPos = new Vec3(5,5,0); 340 Server = new ServerConnection(); 321 341 322 342 Cursor=new Sprite(new Vec2(0,0), Resources.Get("cursor"), true); 323 343 AddSprite(Cursor); 324 344 325 /* var arrow=new Sprite(new Vec2(0,0), Resources.Get("test"));326 arrow.Mouse Down(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))); }); 327 347 AddSprite(arrow); 328 348 329 arrow = new Sprite(new Vec2(500,0), Resources.Get("test"));330 arrow.Mouse Down(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))); }); 331 351 AddSprite(arrow); 332 352 333 arrow=new Sprite(new Vec2(0, 400), Resources.Get("test"));334 arrow.Mouse Down(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))); }); 335 355 AddSprite(arrow); 336 356 337 357 arrow=new Sprite(new Vec2(500,400), Resources.Get("test")); 338 arrow.Mouse Down(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 341 361 MyName = "foo"; 342 362 … … 365 385 } 366 386 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 378 387 UpdateWorld(new Vec3(0,0,0)); 379 388 … … 391 400 Update(0); 392 401 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); 413 403 } 414 404 … … 416 406 { 417 407 removeChild(MyTextEntry); 418 WorldClient.Identify(name);419 408 MyName=name; 420 409 //WorldClient.GetPlants(cast(WorldPos.x,Int),cast(WorldPos.y,Int)); … … 426 415 427 416 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) 433 418 { 434 419 for (y in -1...2) … … 460 445 Objs[i].Update(0,this); 461 446 } 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 466 498 public function GetCube(pos:Vec3) : Cube 467 499 { … … 469 501 } 470 502 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>) 482 504 { 483 505 var sk:SkeletonEntity = new SkeletonEntity(this,new Vec3(0,5,4)); … … 495 517 return true; 496 518 } 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 :Sx505 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 }512 519 513 520 override public function Handle(e:Int) … … 534 541 { 535 542 super.Update(time); 543 544 Server.Update(); 545 536 546 /*if (time>TickTime) 537 547 { -
scenarios/GerminationX/fungi/src/TruffleTest.hx
r843 r846 21 21 import truffle.RndGen; 22 22 import truffle.Circle; 23 import truffle.Client;24 23 import truffle.Entity; 25 24 import truffle.SpriteEntity; … … 32 31 var Frame:Int; 33 32 var TickTime:Int; 34 public var WorldClient:Client;33 public var Server:ServerConnection; 35 34 var Sprites:Array<Sprite>; 36 35 var TestBone:Bone; … … 41 40 Frame=0; 42 41 TickTime=0; 43 WorldClient=new Client(OnServerPlantsCallback);42 Server=new ServerConnection(); 44 43 Sprites=new Array<Sprite>(); 45 44 … … 98 97 SortScene(); 99 98 100 WorldClient.Call("spirit-sprites",UpdateSpiritSprites);99 Server.Request("spirit-sprites",this,UpdateSpiritSprites); 101 100 } 102 101 103 public function UpdateSpiritSprites( data:Array<Dynamic>)102 public function UpdateSpiritSprites(c,data:Array<Dynamic>) 104 103 { 105 104 var sk:SkeletonEntity = new SkeletonEntity(this,new Vec3(5,0,0)); -
scenarios/GerminationX/fungi/src/truffle/Entity.hx
r820 r846 33 33 } 34 34 35 // called by world before destruction (cnance to remove sprites) 36 public function Destroy(world:World) 37 { 38 } 39 35 40 public function Pos2PixelPos(pos:Vec3) : Vec3 36 41 { -
scenarios/GerminationX/fungi/src/truffle/RndGen.hx
r814 r846 47 47 public function RndFlt() : Float 48 48 { 49 return RndInt()/Math.pow(2,32) +0.5;49 return RndInt()/Math.pow(2,32)*2; 50 50 } 51 51 -
scenarios/GerminationX/fungi/src/truffle/SpriteEntity.hx
r820 r846 28 28 } 29 29 30 override function Destroy(world:World) 31 { 32 super.Destroy(world); 33 world.RemoveSprite(Spr); 34 } 35 30 36 override public function Update(frame:Int, world:World) 31 37 { -
scenarios/GerminationX/fungi/src/truffle/flash/FlashServerConnection.hx
r843 r846 30 30 31 31 import truffle.interfaces.ServerConnection; 32 import truffle.interfaces.ServerRequest; 32 33 33 class FlashServerConnection implements ServerConnection34 class FlashServerConnection extends ServerConnection 34 35 { 35 36 var Loader:URLLoader; 36 var Load ing:Bool;37 var LoadedC allback:Dynamic -> Void;37 var LoadedCallback:Dynamic -> Dynamic -> Void; 38 var LoadedContext:Dynamic; 38 39 39 40 public function new() 40 41 { 41 Loading = false;42 super(); 42 43 Loader = new URLLoader(); 43 44 Loader.dataFormat = URLLoaderDataFormat.TEXT; … … 50 51 } 51 52 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 67 54 { 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); 80 62 } 81 63 82 64 private function CompleteHandler(event:Event) 83 65 { 66 Ready=true; 84 67 //trace(Loader.data); 85 return LoadedCallback(JSON.decode(Loader.data)); 68 var t=JSON.decode(Loader.data); 69 LoadedCallback(LoadedContext,JSON.decode(Loader.data)); 86 70 } 87 71 -
scenarios/GerminationX/fungi/src/truffle/flash/FlashSprite.hx
r843 r846 42 42 var MouseDownFunc:Dynamic -> Void; 43 43 var MouseDownContext:Dynamic; 44 var MouseUpFunc:Dynamic -> Void; 45 var MouseUpContext:Dynamic; 44 46 var MouseOverFunc:Dynamic -> Void; 45 47 var MouseOverContext:Dynamic; … … 81 83 } 82 84 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 83 97 public function MouseOver(c:Dynamic, f:Dynamic -> Void=null) 84 98 { -
scenarios/GerminationX/fungi/src/truffle/flash/FlashWorld.hx
r820 r846 43 43 public function Remove(e:Entity) 44 44 { 45 e.Destroy(cast(this,truffle.World)); 45 46 Scene.remove(e); 46 47 } -
scenarios/GerminationX/fungi/src/truffle/interfaces/ServerConnection.hx
r437 r846 15 15 16 16 package truffle.interfaces; 17 import truffle.interfaces.ServerRequest; 17 18 18 interfaceServerConnection19 class ServerConnection 19 20 { 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 } 21 48 } -
scenarios/GerminationX/fungi/src/truffle/interfaces/Sprite.hx
r843 r846 26 26 27 27 public function MouseDown(c:Dynamic, f:Dynamic -> Void=null) : Void; 28 public function MouseUp(c:Dynamic, f:Dynamic -> Void=null) : Void; 28 29 public function MouseOver(c:Dynamic, f:Dynamic -> Void=null) : Void; 29 30 public function ChangeBitmap(t:TextureDesc) : Void; -
scenarios/GerminationX/oak/src/oak/core.clj
r844 r846 34 34 "AppleTree")))) 35 35 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)) 39 40 40 ;(world-crank (deref myworld)) 41 (defn parse [s] 42 (try (Integer/parseInt (.trim s)) 43 (catch NumberFormatException e nil))) 41 44 42 45 (defroutes main-routes 43 46 (GET "/get-tile/:tilex/:tiley" [tilex tiley] 44 (println (list tilex tiley))45 47 (let [tile (game-world-get-tile (deref my-game-world) 46 (make-vec2 tilex tiley))] 48 (make-vec2 (parse tilex) 49 (parse tiley)))] 47 50 (if tile 48 51 (json/encode-to-str tile) 49 52 (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] 53 55 (dosync 54 56 (ref-set my-game-world 55 57 (game-world-add-entity 56 58 (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)))) 59 61 (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"))) 61 64 (GET "/spirit-sprites" [] 62 65 (println (read-islands "./public/islands")) -
scenarios/GerminationX/oak/src/oak/game_world.clj
r844 r846 17 17 oak.vec2 18 18 oak.plant 19 oak.tile)) 19 oak.tile 20 oak.rand) 21 (:require 22 clojure.contrib.math)) 20 23 21 24 (defrecord game-world … … 27 30 (defn game-world-tiles [game-world] (:tiles game-world)) 28 31 (defn game-world-spirits [game-world] (:spirits game-world)) 29 30 (defn make-game-world []31 (game-world. () {} ()))32 32 33 33 (defn game-world-get-tile [game-world pos] … … 43 43 (merge game-world {:tiles (cons tile (game-world-tiles game-world))})) 44 44 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 45 54 (defn game-world-add-entity [game-world tile-pos entity] 46 55 (let [tile (game-world-get-tile game-world tile-pos)] 47 56 (if (not tile) 48 57 (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 13 13 ;; along with this program. If not, see <http://www.gnu.org/licenses/>. 14 14 15 (ns oak.plant) 15 (ns oak.plant 16 (:use 17 oak.vec2) 18 (:require 19 clojure.contrib.math)) 16 20 17 21 (defrecord plant … … 21 25 state 22 26 picked-by 23 owner]) 27 owner 28 size]) 24 29 25 30 (defn plant-pos [plant] (:pos plant)) … … 29 34 (defn plant-picked-by [plant] (:picked-by plant)) 30 35 (defn plant-owner [plant] (:owner plant)) 36 (defn plant-size [plant] (:size plant)) 31 37 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 24 24 25 25 (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.