Changeset 814


Ignore:
Timestamp:
01/12/2011 01:25:20 PM (10 years ago)
Author:
dave
Message:

first version with lina's artwork and a test skeleton entity

Location:
scenarios/GerminationX/fungi/src
Files:
15 edited

Legend:

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

    r791 r814  
    1414// along with this program.  If not, see <http://www.gnu.org/licenses/>. 
    1515 
     16import haxe.Log; 
     17 
    1618import truffle.Truffle; 
    1719import truffle.interfaces.Key; 
    1820 
    1921import truffle.Vec3; 
     22import truffle.Vec2; 
    2023import truffle.RndGen; 
    2124import truffle.Circle; 
    2225import truffle.Client; 
    2326import truffle.Entity; 
    24  
    25 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    26  
    27 class Cube extends Entity  
     27import truffle.SpriteEntity; 
     28import truffle.SkeletonEntity; 
     29  
     30//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     31 
     32class Cube extends SpriteEntity  
    2833{        
    29         public function new(pos:Vec3)  
    30         { 
    31                 super(pos, Resources.Get("blue-cube")); 
     34        public function new(world:World, pos:Vec3)  
     35        { 
     36                super(world, pos, Resources.Get("blue-cube")); 
    3237        } 
    3338         
     
    3540        { 
    3641                if (LogicalPos.z<0) 
    37                 {  
    38                         if (rnd.RndFlt()<0.5) 
    39                         { 
    40                                 ChangeBitmap(Resources.Get("sea-cube-01")); 
    41                         } 
    42                         else 
    43                         { 
    44                                 if (rnd.RndFlt()<0.5) 
    45                                 { 
    46                                         ChangeBitmap(Resources.Get("sea-cube-02")); 
    47                                 } 
    48                                 else 
    49                                 { 
    50                                         ChangeBitmap(Resources.Get("sea-cube-03")); 
    51                                 } 
    52                         } 
     42        { 
     43            Spr.ChangeBitmap(Resources.Get( 
     44                rnd.Choose(["sea-cube-01","sea-cube-02","sea-cube-03"]))); 
    5345                } 
    5446                else  
    5547                { 
    56                         if (rnd.RndFlt()<0.5) 
    57                         { 
    58                                 ChangeBitmap(Resources.Get("grass-cube-01")); 
    59                         } 
    60                         else 
    61                         { 
    62                                 if (rnd.RndFlt()<0.5) 
    63                                 { 
    64                                         ChangeBitmap(Resources.Get("grass-cube-02")); 
    65                                 } 
    66                                 else 
    67                                 { 
    68                                         ChangeBitmap(Resources.Get("grass-cube-03")); 
    69                                 } 
    70                         } 
    71                 } 
    72         } 
    73 } 
    74  
    75 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    76  
    77 class Plant extends Entity  
     48            Spr.ChangeBitmap(Resources.Get( 
     49                rnd.Choose(["grass-cube-01","grass-cube-02","grass-cube-03"]))); 
     50                } 
     51        } 
     52} 
     53 
     54//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     55 
     56class Plant extends SpriteEntity  
    7857{ 
    7958        public var Owner:String; 
    8059        var PlantScale:Float; 
    8160        public var Age:Int; 
    82  
    83         public function new(owner:String,pos,bitmap,scale) 
    84         { 
    85                 super(pos,bitmap); 
     61    var Scale:Float; 
     62 
     63        public function new(world:World, owner:String, pos, bitmap, maxsize, scale) 
     64        { 
     65                super(world,pos,bitmap,false); 
    8666                Owner=owner; 
    8767        PlantScale=0; 
     68        Scale=maxsize; 
     69        NeedsUpdate=true; 
     70 
    8871        if (scale) 
    8972        { 
    90                     PlantScale=230; 
    91             //Scale(0.1); 
    92         } 
     73                    PlantScale=0; 
     74            Spr.SetScale(new Vec2(0,0)); 
     75        } 
     76        else 
     77        { 
     78            Age=100; 
     79        } 
     80         
     81        Spr.Hide(false); 
     82         
     83        //Spr.MouseOver(this,function(c) { trace("over plant"); }); 
    9384 
    9485        //var tf = new flash.text.TextField(); 
     
    10192                super.Update(frame,world); 
    10293        Age++; 
    103                 if (PlantScale>0) 
    104                 { 
    105                         //Scale(1.01); 
    106                         PlantScale--; 
    107                 } 
    108         } 
    109 } 
    110  
    111 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    112  
    113 class Ghost extends Entity  
     94                if (Age<100) 
     95                { 
     96                        Spr.SetScale(new Vec2((Age/100)*Scale,(Age/100)*Scale)); 
     97                } 
     98        else 
     99        { 
     100            NeedsUpdate=false; 
     101        } 
     102        } 
     103} 
     104 
     105//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     106 
     107class Ghost extends SpriteEntity  
    114108{ 
    115109    public var Name:String; 
     
    117111    public var TexBase:String; 
    118112         
    119         public function new(name:String,pos) 
     113        public function new(world:World, name:String,pos) 
    120114        { 
    121115        TexBase="ghost-"+name.toLowerCase(); 
    122                 super(pos,Resources.Get(TexBase)); 
     116                super(world,pos,Resources.Get(TexBase)); 
    123117        Name = name; 
    124118 
     
    128122        Debug.width=300; 
    129123        Debug.text = "nothing yet"; 
    130         addChild(Debug); 
     124        Spr.addChild(Debug); 
    131125        } 
    132126 
     
    135129        var ee = e.emotions.content; 
    136130        var mood=Std.parseFloat(ee[0].content[0]); 
    137         if (mood>1) ChangeBitmap(Resources.Get(TexBase+"-happy")); 
    138         else if (mood<-1) ChangeBitmap(Resources.Get(TexBase+"-sad")); 
    139         else ChangeBitmap(Resources.Get(TexBase)); 
     131        if (mood>1) Spr.ChangeBitmap(Resources.Get(TexBase+"-happy")); 
     132        else if (mood<-1) Spr.ChangeBitmap(Resources.Get(TexBase+"-sad")); 
     133        else Spr.ChangeBitmap(Resources.Get(TexBase)); 
    140134 
    141135        Debug.text=Name+"\nMood:"+ee[0].content[0]+"\n"; 
     
    151145 
    152146//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    153  
     147/* 
    154148class PlayerEntity extends Entity  
    155149{ 
     
    163157                var pos=new Vec3(LogicalPos.x,LogicalPos.y,LogicalPos.z); 
    164158 
    165                 if (e==Keyboard.toInt(Key.left)) { pos.x-=1; /*ChangeBitmap(Resources.Get("rbot-north"));*/ } 
    166                 if (e==Keyboard.toInt(Key.right)) { pos.x+=1; /*ChangeBitmap(Resources.Get("rbot-south"));*/ } 
    167                 if (e==Keyboard.toInt(Key.up)) { pos.y-=1; /*ChangeBitmap(Resources.Get("rbot-east"));*/ } 
    168                 if (e==Keyboard.toInt(Key.down)) { pos.y+=1; /*ChangeBitmap(Resources.Get("rbot-west"));*/ } 
     159                if (e==Keyboard.toInt(Key.left)) { pos.x-=1; } 
     160                if (e==Keyboard.toInt(Key.right)) { pos.x+=1; } 
     161                if (e==Keyboard.toInt(Key.up)) { pos.y-=1; } 
     162                if (e==Keyboard.toInt(Key.down)) { pos.y+=1; } 
    169163                //if (e==Keyboard.toInt(Key.space)) { world.AddServerPlant(new Vec3(pos.x,pos.y,1)); }         
    170164 
     
    223217        } 
    224218} 
     219*/ 
    225220 
    226221//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    231226        public var Height:Int; 
    232227        var Objs:Array<Cube>; 
    233         var Player:PlayerEntity; 
    234228        public var WorldPos:Vec3; 
    235229        var MyRndGen:RndGen; 
     
    241235    var TickTime:Int; 
    242236    var Ghosts:Array<Ghost>; 
     237    var Cursor:Sprite; 
     238    var CursorLogicalPos:Vec3; 
    243239 
    244240        public function new(w:Int, h:Int)  
     
    254250                WorldPos = new Vec3(0,0,0); 
    255251                MyRndGen = new RndGen(); 
    256                 WorldClient=new Client(OnServerPlantsCallback); 
     252                WorldClient = new Client(OnServerPlantsCallback); 
     253        CursorLogicalPos = new Vec3(5,5,0); 
     254 
     255        Cursor=new Sprite(new Vec2(0,0), Resources.Get("cursor"), true); 
     256        AddSprite(Cursor); 
     257         
     258/*        var arrow=new Sprite(new Vec2(0,0), Resources.Get("test")); 
     259        arrow.MouseDown(this,function(c) { c.UpdateWorld(c.WorldPos.Add(new Vec3(1,0,0))); }); 
     260        AddSprite(arrow); 
     261 
     262        arrow = new Sprite(new Vec2(500,0), Resources.Get("test")); 
     263        arrow.MouseDown(this,function(c) { c.UpdateWorld(c.WorldPos.Add(new Vec3(-1,0,0))); }); 
     264        AddSprite(arrow); 
     265 
     266        arrow=new Sprite(new Vec2(0,400), Resources.Get("test")); 
     267        arrow.MouseDown(this,function(c) { c.UpdateWorld(c.WorldPos.Add(new Vec3(0,1,0))); }); 
     268        AddSprite(arrow); 
     269 
     270        arrow=new Sprite(new Vec2(500,400), Resources.Get("test")); 
     271        arrow.MouseDown(this,function(c) { c.UpdateWorld(c.WorldPos.Add(new Vec3(0,-1,0))); }); 
     272      AddSprite(arrow); 
     273*/ 
    257274        MyName = "foo"; 
    258275 
     
    261278                        for (x in 0...w) 
    262279                        { 
    263                                 var ob:Cube = new Cube(new Vec3(0,0,0)); 
    264                 Add(ob); 
     280                                var ob:Cube = new Cube(this,new Vec3(0,0,0)); 
     281              
     282                ob.Spr.MouseOver(this,function(c) 
     283                { 
     284                    c.Cursor.Pos=ob.Spr.Pos; 
     285                    c.CursorLogicalPos = ob.LogicalPos; 
     286                }); 
    265287                                Objs.push(ob); 
    266288                        } 
    267289                } 
    268290 
     291        MouseDown(this, function(c) 
     292        { 
     293            c.AddServerPlant(c.CursorLogicalPos.Add(new Vec3(0,0,1)), 
     294            c.MyRndGen.Choose([ 
     295                "plant-001",  
     296                "plant-002",  
     297                "plant-003",  
     298                "plant-004",  
     299                "plant-005",  
     300                "plant-006",  
     301                "plant-007",  
     302                "plant-008"])); 
     303        }); 
     304 
     305        WorldClient.Call("spirit-sprites",UpdateSpiritSprites); 
     306 
    269307                UpdateWorld(new Vec3(0,0,0)); 
    270308                 
    271                 Player = new PlayerEntity(new Vec3(5,5,1)); 
    272         Add(Player); 
    273  
    274309        var Names = ["Vertical","Canopy","Cover"]; 
    275          
     310/*         
    276311        for (i in 0...3) 
    277312        { 
    278             var g = new Ghost(Names[i],new Vec3(2,(i*3)+2,1)); 
    279             Add(g); 
     313            var g = new Ghost(this,Names[i],new Vec3(2,(i*3)+2,1)); 
    280314            Ghosts.push(g); 
    281315        } 
    282  
     316*/ 
    283317//              MyTextEntry=new TextEntry(190,10,310,30,NameCallback); 
    284318//              addChild(MyTextEntry);   
     
    310344                        { 
    311345                                MyRndGen.Seed(cast((WorldPos.x+x)+(WorldPos.y+y)*139,Int)); 
    312                                  
    313346                                for (i in 0...5) 
    314347                                { 
    315                                     MyRndGen.RndFlt(); 
    316                                     MyRndGen.RndFlt(); 
    317                                     MyRndGen.RndFlt(); 
    318                                     MyRndGen.RndFlt(); 
    319348                                        var pos = new Vec3(MyRndGen.RndFlt()*10+x*10, 
    320                                                    MyRndGen.RndFlt()*10+y*10, 
    321                                                                           0); 
    322                                                                            
    323                                                    
    324                                         circles.push(new Circle(pos, MyRndGen.RndFlt()*5)); 
     349                                       MyRndGen.RndFlt()*10+y*10, 
     350                                                                           0);             
     351                                        circles.push(new Circle(pos, MyRndGen.RndFlt()*4)); 
    325352                                } 
    326353                        } 
     
    332359                        var pos=new Vec3(i%Width,Math.floor(i/Width),-1); 
    333360                        MyRndGen.Seed(cast(WorldPos.x+pos.x+WorldPos.y+pos.y*139,Int)); 
    334                         MyRndGen.RndFlt(); 
    335                         MyRndGen.RndFlt(); 
    336                         MyRndGen.RndFlt(); 
    337                         MyRndGen.RndFlt(); 
    338          
    339361                        var inside:Bool=false; 
    340362                        for (c in circles) 
     
    345367                        Objs[i].LogicalPos=pos; 
    346368                        Objs[i].UpdateTex(MyRndGen); 
     369            Objs[i].Update(0,this); 
    347370                } 
    348371                 
     
    365388                for (splant in ServerPlants) 
    366389                { 
    367                         var plant = new Plant(splant.owner,new Vec3(splant.x,splant.y,1),PlantTex(splant.type),false); 
     390                        var plant = new Plant(this,splant.owner,new Vec3(splant.x,splant.y,1),PlantTex(splant.type),splant.size,false); 
    368391                        Plants.push(plant); 
    369             Add(plant); 
    370392                } 
    371393        SortScene(); 
    372394        } 
     395 
     396    public function UpdateSpiritSprites(data:Array<Dynamic>) 
     397    { 
     398        var sk:SkeletonEntity = new SkeletonEntity(this,new Vec3(0,5,4)); 
     399        sk.NeedsUpdate=true; 
     400        sk.Build(this,data); 
     401        SortScene(); 
     402    } 
    373403         
    374404    public function SpaceClear(pos:Vec3) 
     
    376406        for (plant in Plants) 
    377407        { 
    378             if (plant.LogicalPos==pos) return false; 
     408            if (plant.LogicalPos.Eq(pos)) return false; 
    379409        } 
    380410        return true; 
     
    382412 
    383413        public function AddServerPlant(pos:Vec3,type) 
    384         { 
    385         if (MyName!=null) 
    386         { 
    387                     // call by reference :S 
    388                     var plant = new Plant(MyName,new Vec3(pos.x,pos.y,1),PlantTex(type),true); 
     414        {         
     415        //trace(type); 
     416        if (MyName!=null && SpaceClear(pos) && GetCube(pos).LogicalPos.z>-1) 
     417        { 
     418            var size=MyRndGen.RndFlt(); 
     419             
     420                    // call by reference :Sx 
     421                    var plant = new Plant(this,MyName,pos,Resources.Get(type),size,true); 
     422 
    389423                    Plants.push(plant); 
    390             Add(plant); 
    391424                    //WorldClient.AddPlant(cast(WorldPos.x,Int), cast(WorldPos.y,Int),  
    392425                        //                               new ServerPlant(MyName,cast(pos.x,Int),cast(pos.y,Int),type)); 
     426            SortScene(); 
    393427        } 
    394428        } 
     
    397431        { 
    398432        super.Handle(e); 
    399                 Player.Handle(e,this); 
    400433        Update(0); 
    401         SortScene(); 
     434        //SortScene(); 
    402435        } 
    403436 
     
    419452    { 
    420453        super.Update(time); 
    421         if (time>TickTime) 
     454/*        if (time>TickTime) 
    422455        { 
    423456            WorldClient.Call("agent-info",UpdateGhosts); 
     
    433466            } 
    434467        } 
    435  
     468         
     469        Cursor.Update(time,this,null);*/ 
    436470    } 
    437471 
     
    444478    public function new()  
    445479        { 
     480        Log.setColor(0xFFFFFF); 
    446481        super(new FungiWorld(10,10)); 
    447482    } 
  • scenarios/GerminationX/fungi/src/Resources.hx

    r791 r814  
    5252 
    5353class Test extends BitmapData { public function new() { super(0,0); } } 
     54class CursorTex extends BitmapData { public function new() { super(0,0); } } 
     55 
     56class Plant001Tex extends BitmapData { public function new() { super(0,0); } } 
     57class Plant002Tex extends BitmapData { public function new() { super(0,0); } } 
     58class Plant003Tex extends BitmapData { public function new() { super(0,0); } } 
     59class Plant004Tex extends BitmapData { public function new() { super(0,0); } } 
     60class Plant005Tex extends BitmapData { public function new() { super(0,0); } } 
     61class Plant006Tex extends BitmapData { public function new() { super(0,0); } } 
     62class Plant007Tex extends BitmapData { public function new() { super(0,0); } } 
     63class Plant008Tex extends BitmapData { public function new() { super(0,0); } } 
    5464 
    5565class Resources 
     
    91101        case "ghost-vertical-sad": tex.data = new GhostVerticalSad(); 
    92102        case "test": tex.data = new Test(); 
     103        case "cursor": tex.data = new CursorTex(); 
     104        case "plant-001": tex.data = new Plant001Tex(); 
     105        case "plant-002": tex.data = new Plant002Tex(); 
     106        case "plant-003": tex.data = new Plant003Tex(); 
     107        case "plant-004": tex.data = new Plant004Tex(); 
     108        case "plant-005": tex.data = new Plant005Tex(); 
     109        case "plant-006": tex.data = new Plant006Tex(); 
     110        case "plant-007": tex.data = new Plant007Tex(); 
     111        case "plant-008": tex.data = new Plant008Tex(); 
    93112        } 
    94113 
  • scenarios/GerminationX/fungi/src/ServerPlant.hx

    r437 r814  
    2323        public var owner:String; 
    2424        public var type:Int; 
     25    public var size:Int; 
    2526} 
  • scenarios/GerminationX/fungi/src/truffle/Bone.hx

    r791 r814  
    1919class Bone extends Sprite 
    2020{ 
     21    public var Parent:Bone; 
    2122    public var Children:List<Bone>; 
    2223 
    2324        public function new(pos:Vec2, t:TextureDesc)  
    2425    { 
     26        Children = new List<Bone>(); 
    2527        super(pos,t); 
    26         Children = new List<Bone>(); 
    2728    } 
    2829 
     
    3031    { 
    3132        Children.add(c); 
     33        c.Parent=this; 
    3234        world.AddSprite(c); 
    3335    } 
    3436 
    35         override function Update(frame:Int, world:truffle.interfaces.World, tx:Dynamic) 
     37    public function GetGlobalPos() : Vec2 
    3638    { 
    37         super.Update(frame,world,tx); 
     39        return TransformedPos(); 
     40    } 
     41 
     42        override function Update(frame:Int, tx:Dynamic) 
     43    { 
     44        super.Update(frame,tx); 
    3845        var tx=GetTransform(); 
    3946        for (c in Children) 
    4047        { 
    41             c.Update(frame,world,tx); 
     48            c.Update(frame,tx); 
    4249        } 
    4350    } 
     
    5966    public function Print() 
    6067    { 
    61         trace("Bone"); 
     68        trace("Bone "+Std.string(Pos.x)+" "+Std.string(Pos.y)); 
    6269        if (Children.length>0) 
    6370        { 
  • scenarios/GerminationX/fungi/src/truffle/Entity.hx

    r791 r814  
    2222    public var Depth:Float; 
    2323    public var Pos:Vec3; 
     24    public var NeedsUpdate:Bool; 
    2425                 
    2526        public function new(w:World,pos:Vec3)  
     
    2829        Pos = Pos2PixelPos(LogicalPos); 
    2930        Depth = Pos.z; 
     31        NeedsUpdate=false; 
    3032        w.Add(this); 
    3133        } 
     
    3537                // do the nasty iso conversion 
    3638                // this is actually an orthogonal projection matrix! (I think) 
    37                 return new Vec3(250+(pos.x*36-pos.y*26), 
    38                         50+(pos.y*18+pos.x*9)-(pos.z*37), 
     39                return new Vec3(280+(pos.x*36-pos.y*26), 
     40                        120+(pos.y*18+pos.x*9)-(pos.z*37), 
    3941                        pos.x*0.51 + pos.y*0.71 + pos.z*0.47);              
    4042        } 
     
    5052        return null; 
    5153    } 
     54 
     55    public function OnSortScene(order:Int) : Void 
     56    { 
     57    } 
    5258} 
  • scenarios/GerminationX/fungi/src/truffle/Graph.hx

    r791 r814  
    7474    public function AddEdge(edge:Edge) 
    7575    { 
    76         if (Root==999) Root=edge.From; 
    77         Edges.add(edge); 
    78         AddVertex(edge.From); 
    79         AddVertex(edge.To); 
     76        //if (!ContainsEdge(edge)) 
     77        { 
     78            if (Root==999) Root=edge.From; 
     79            Edges.add(edge); 
     80            AddVertex(edge.From); 
     81            AddVertex(edge.To); 
     82        } 
    8083    } 
    8184 
     
    133136        { 
    134137            if (edge.From==vertex) ret.add(edge); 
    135             if (edge.To==vertex) ret.add(edge); 
     138            //if (edge.To==vertex) ret.add(edge); 
    136139        } 
    137140        return ret; 
     
    180183            if (cheapest.From==-1 || cheapest.To==-1)  
    181184            { 
     185                trace("MST error"); 
    182186                return new Graph(new List<Edge>()); 
    183187            } 
  • scenarios/GerminationX/fungi/src/truffle/RndGen.hx

    r437 r814  
    2828        { 
    2929                State=s; 
     30        WarmUp(); 
    3031        } 
    3132         
     33    public function WarmUp() 
     34    { 
     35        for (i in 0...10) 
     36        { 
     37            RndInt(); 
     38        } 
     39    } 
     40 
    3241        public function RndInt() : Int 
    3342        { 
    34                 State=cast(10331*State+1203432033,Int); 
    35                 return State; 
     43                State=cast(State*214013+2531011,Int); 
     44                return cast(Math.abs(State),Int); 
    3645        } 
    3746         
     
    4049                return RndInt()/Math.pow(2,32)+0.5; 
    4150        } 
     51 
     52    public function Choose(arr:Array<Dynamic>) 
     53    { 
     54        return arr[RndInt()%arr.length]; 
     55    } 
    4256         
    4357} 
  • scenarios/GerminationX/fungi/src/truffle/SkeletonEntity.hx

    r791 r814  
    2222{ 
    2323    public var Root:Bone; 
    24                  
     24        var g:Graph; 
     25    var bones:Array<Bone>; 
     26 
    2527        public function new(world:World,pos:Vec3)  
    2628        { 
     
    4547    } 
    4648     
     49    function FindTop(desc:Array<Dynamic>) 
     50    { 
     51        var highest=9999; 
     52        var top=0; 
     53        var c=0; 
     54        for (d in desc) 
     55        { 
     56            if (d.position.y<highest) 
     57            { 
     58                highest=d.position.y; 
     59                top=c; 
     60            } 
     61            c++; 
     62        } 
     63        return top; 
     64    } 
     65     
     66    function BuildBones(desc:Array<Dynamic>) 
     67    { 
     68        var bones=new Array<Bone>(); 
     69        for (d in desc) 
     70        { 
     71            var b=new Bone(new Vec2(-Std.parseInt(d.position.x), 
     72                                    -Std.parseInt(d.position.y)), 
     73                                    Resources.Get("test")); 
     74            b.LoadFromURL(d.name); 
     75            bones.push(b); 
     76        } 
     77        return bones; 
     78    } 
     79 
     80    function CalculateMST(bones:Array<Bone>,root:Int) 
     81    { 
     82        var g=new Graph(new List<Edge>()); 
     83        var x=0; 
     84        var y=0; 
     85        for (xb in bones) 
     86        { 
     87            for (yb in bones) 
     88            { 
     89                g.AddEdge(new Edge(x,y,xb.Pos.Sub(yb.Pos).Mag())); 
     90                y++; 
     91            } 
     92            y=0; 
     93            x++; 
     94        } 
     95        return g.MST(root); 
     96    } 
     97 
    4798    public function Build(world:World,desc:Array<Dynamic>) 
    4899    { 
    49         var bones=new List<Bone>(); 
    50         var root=new Vec2(desc[0].position.x, 
    51                           desc[0].position.y); 
    52         for (d in desc) 
     100        bones=BuildBones(desc); 
     101        var top=FindTop(desc); 
     102        g=CalculateMST(bones,top); 
     103        Root=bones[top]; 
     104        world.AddSprite(Root); 
     105        var relative = new Array<Vec2>(); 
     106        for (i in 0...bones.length) relative.push(new Vec2(0,0)); 
     107 
     108        for (edge in g.Edges) 
    53109        { 
    54             var b=new Bone(new Vec2(root.x-Std.parseInt(d.position.x), 
    55                                     root.y-Std.parseInt(d.position.y)), 
    56                                     Resources.Get("test")); 
    57             b.LoadFromURL(d.name); 
    58             bones.add(b); 
     110            bones[edge.From].AddChild(world,bones[edge.To]); 
     111            relative[edge.To]=bones[edge.From].Pos.Sub(bones[edge.To].Pos); 
     112        }  
     113 
     114        for (b in 0...bones.length) 
     115        { 
     116            bones[b].Pos=relative[b].Mul(0.5); 
    59117        } 
     118    } 
    60119 
    61         Root=bones.first(); 
    62         Root.LoadFromURL(desc[0].name); 
    63         world.AddSprite(Root); 
     120    override function OnSortScene(order:Int) : Void 
     121    { 
     122        Root.SetDepth(order+10); 
     123        Root.Recurse(function(b:Bone,depth:Int)  
     124        { 
     125            b.SetDepth(order+1); 
     126        });         
     127    } 
    64128 
    65         bones.remove(bones.first()); 
    66         var current=Root; 
    67         var next=Root; 
    68  
    69         for (b in bones) 
    70         { 
    71             var c=GetClosest(b.Pos,bones); 
    72             trace(c); 
    73             b.AddChild(world,c); 
    74         } 
    75  
    76 //        Root.Print(); 
    77  
    78         var g=new Graph(new List<Edge>()); 
    79         g.AddEdge(new Edge(0,1,9.5)); 
    80         g.AddEdge(new Edge(1,2,1.9)); 
    81         g.AddEdge(new Edge(0,2,0.3)); 
    82         g.Print(); 
    83         g.MST(0).Print(); 
    84  
    85     } 
    86                  
    87129        override public function Update(frame:Int, world:truffle.interfaces.World) 
    88130        { 
     131        super.Update(frame,world); 
     132 
     133        //Root.SetRotate(25*Math.sin(frame*0.04)); 
     134        //Draw(cast(world,truffle.World)); 
     135 
     136        //UpdateDepth(); 
     137 
    89138        Root.Recurse(function(b:Bone,depth:Int)  
    90139        { 
    91             b.SetRotate(45*Math.sin(frame*0.1)); 
     140            b.SetRotate(15*Math.sin((10-depth)*0.58+frame*0.04)); 
    92141        } 
    93142        ); 
    94143 
    95         super.Update(frame,world); 
    96144        Root.SetPos(new Vec2(Pos.x,Pos.y)); 
    97         Root.Update(frame,world,null); 
     145        Root.Update(frame,null); 
    98146        } 
    99147  
     148        public function Draw(world:World) 
     149        { 
     150        world.graphics.clear(); 
     151                world.graphics.lineStyle(1, 0x00aa00, 1);        
     152 
     153        for (e in g.Edges) 
     154        { 
     155            var start=bones[e.From].GetGlobalPos(); 
     156            var end=bones[e.To].GetGlobalPos(); 
     157            world.graphics.moveTo(start.x,start.y); 
     158            world.graphics.lineTo(end.x,end.y); 
     159            world.graphics.beginFill( 0x99ff33 , 1 ); 
     160            // drawing circle  
     161            world.graphics.drawCircle( start.x , start.y , 4 ); 
     162            world.graphics.drawCircle( end.x , end.y , 4 ); 
     163        } 
     164    } 
     165 
    100166    override public function GetRoot() : Dynamic 
    101167    { 
  • scenarios/GerminationX/fungi/src/truffle/SpriteEntity.hx

    r791 r814  
    2121    public var Spr:Sprite; 
    2222                 
    23         public function new(world:World, pos:Vec3, t:TextureDesc)  
     23        public function new(world:World, pos:Vec3, t:TextureDesc, viz=true)  
    2424        { 
    2525                super(world,pos); 
    26         Spr = new Sprite(new Vec2(Pos.x,Pos.y),t); 
     26        Spr = new Sprite(new Vec2(Pos.x,Pos.y),t,true,viz); 
    2727        world.AddSprite(Spr); 
    2828        } 
     
    3232        super.Update(frame,world); 
    3333        Spr.SetPos(new Vec2(Pos.x,Pos.y)); 
    34         Spr.Update(frame,world,null); 
     34        Spr.Update(frame,null); 
    3535        } 
    3636 
  • scenarios/GerminationX/fungi/src/truffle/Vec2.hx

    r791 r814  
    5656                                                y*(1-t) + other.y*t); 
    5757        } 
     58 
     59        public function Eq(other:Vec2) : Bool 
     60        { 
     61                return x==other.x && y==other.y; 
     62        } 
     63 
     64    public function AsStr() 
     65    { 
     66        return Std.string(x)+", "+Std.string(y); 
     67    } 
    5868} 
  • scenarios/GerminationX/fungi/src/truffle/Vec3.hx

    r437 r814  
    4848                                                z*(1-t) + other.z*t); 
    4949        } 
     50 
     51        public function Eq(other:Vec3) : Bool 
     52        { 
     53                return x==other.x && y==other.y && z==other.z; 
     54        } 
     55 
     56    public function AsStr() 
     57    { 
     58        return Std.string(x)+", "+Std.string(y)+", "+Std.string(z); 
     59    } 
    5060} 
  • scenarios/GerminationX/fungi/src/truffle/flash/FlashSprite.hx

    r791 r814  
    3434{        
    3535    public var Pos:Vec2; 
     36    public var Width:Int; 
     37    public var Height:Int; 
    3638    var Angle:Float; 
    3739    var MyScale:Vec2; 
    3840    var Transform:Matrix; 
    39     var Width:Int; 
    40     var Height:Int; 
    41  
    42         public function new(pos:Vec2, t:TextureDesc)  
     41    var Depth:Int; 
     42    var MouseDownFunc:Dynamic -> Void; 
     43    var MouseDownContext:Dynamic; 
     44    var MouseOverFunc:Dynamic -> Void; 
     45    var MouseOverContext:Dynamic; 
     46    var Centre:Vec2; 
     47    var DoCentreMiddleBottom:Bool; 
     48 
     49        public function new(pos:Vec2, t:TextureDesc, midbot:Bool=false, viz=true)  
    4350        { 
    4451                super(); 
    45         ChangeBitmap(t); 
     52        visible=viz; 
    4653        Pos=pos; 
    4754        Angle=0; 
     55        Depth=-1; 
    4856        MyScale = new Vec2(1,1); 
    4957        Transform = new Matrix(); 
    5058        Width=64; 
    5159        Height=112; 
    52         } 
    53  
    54         public function MouseDown(f:Dynamic -> Void=null) 
    55         { 
    56                 addEventListener(MouseEvent.MOUSE_DOWN, f); 
    57         } 
     60        Centre=new Vec2(0,0); 
     61        DoCentreMiddleBottom=midbot; 
     62        ChangeBitmap(t); 
     63        Update(0,null); // <-- calls inherited class update??? 
     64        } 
     65 
     66    public function Hide(s:Bool) : Void 
     67    { 
     68        visible=!s; 
     69    } 
     70 
     71        public function MouseDown(c:Dynamic, f:Dynamic -> Void=null) 
     72        { 
     73        MouseDownFunc=f; 
     74        MouseDownContext=c; 
     75                addEventListener(MouseEvent.MOUSE_DOWN, MouseDownCB); 
     76        } 
     77 
     78    public function MouseDownCB(e) 
     79    { 
     80        MouseDownFunc(MouseDownContext); 
     81    } 
     82 
     83        public function MouseOver(c:Dynamic, f:Dynamic -> Void=null) 
     84        { 
     85        MouseOverFunc=f; 
     86        MouseOverContext=c; 
     87                addEventListener(MouseEvent.MOUSE_OVER, MouseOverCB); 
     88        } 
     89 
     90    public function MouseOverCB(e) 
     91    { 
     92        MouseOverFunc(MouseOverContext); 
     93    } 
     94 
     95    public function SetDepth(s:Int) 
     96    { 
     97        parent.setChildIndex(this,s); 
     98        Depth=s; 
     99    } 
     100     
     101    public function GetDepth() : Int 
     102    { 
     103        return Depth; 
     104    } 
     105 
     106    public function CentreMiddleBottom(s:Bool) : Void 
     107    { 
     108        DoCentreMiddleBottom=s; 
     109    } 
     110 
     111    function SetSize(x:Int,y:Int) 
     112    { 
     113        Width=x; 
     114        Height=y; 
     115        if (DoCentreMiddleBottom) 
     116        { 
     117            Centre.x=Width/2; 
     118            Centre.y=Height;             
     119        } 
     120        else 
     121        { 
     122            Centre.x=Width/2; 
     123            Centre.y=Height/2; 
     124        } 
     125    } 
    58126 
    59127        public function ChangeBitmap(t:TextureDesc) 
    60128        { 
     129        var tex = cast(t,truffle.flash.FlashTextureDesc); 
     130        SetSize(tex.data.width,tex.data.height); 
    61131                graphics.clear(); 
    62                 graphics.beginBitmapFill(cast(t,truffle.flash.FlashTextureDesc).data); 
    63         graphics.drawRect(0,0,64,112); 
     132                graphics.beginBitmapFill(tex.data); 
     133        graphics.drawRect(0,0,Width,Height); 
    64134                graphics.endFill(); 
    65135        } 
     
    82152        e.target.content.smoothing = true; 
    83153        var dupBitmap:Bitmap = new Bitmap(cast(e.target.content,Bitmap).bitmapData); 
    84         Width=cast(dupBitmap.width,Int); 
    85         Height=cast(dupBitmap.height,Int); 
     154        SetSize(cast(dupBitmap.width,Int),cast(dupBitmap.height,Int)); 
    86155                graphics.clear(); 
    87156                graphics.beginBitmapFill(dupBitmap.bitmapData); 
    88         graphics.drawRect(0,0,dupBitmap.width,dupBitmap.height); 
     157        graphics.drawRect(0,0,Width,Height); 
    89158                graphics.endFill();    
     159 
     160/*              graphics.lineStyle(1, 0x000000, 1);      
     161        graphics.moveTo(0,0); 
     162        graphics.lineTo(Width/2,Height/2); 
     163        graphics.lineTo(Width,Height); 
     164        graphics.lineTo(0,Height); 
     165        graphics.lineTo(0,0);*/ 
    90166    } 
    91167 
     
    101177    public function GetTransform() : Dynamic { return Transform; } 
    102178 
    103         public function Update(frame:Int, world:World, tx:Dynamic) 
    104         { 
    105         Transform.identity(); 
    106  
    107                 var cx=Width/2; 
    108                 var cy=Height/2; 
    109  
    110         Transform.translate(-cx, -cy); 
     179    public function TransformedPos() : Vec2 
     180    { 
     181        var p:Point = new Point(0,0); 
     182        p=Transform.transformPoint(p); 
     183        return new Vec2(p.x,p.y); 
     184    } 
     185     
     186        public function Update(frame:Int, tx:Dynamic) 
     187        { 
     188        Transform.identity();         
     189        // we don't want to pass on the centering offset to the hierachy 
     190        var tmp = new Matrix(Transform.a,Transform.b,Transform.c,Transform.d, 
     191           Transform.tx-Centre.x,Transform.ty-Centre.y); 
     192 
    111193                Transform.rotate(Angle*(Math.PI/180)); 
    112194        Transform.scale(MyScale.x,MyScale.y); 
    113         Transform.translate(cx, cy); 
    114195        Transform.translate(Pos.x,Pos.y); 
    115                  
    116196        if (tx!=null) 
    117197                { 
    118198            Transform.concat(tx); 
    119199        } 
    120                  
    121         transform.matrix = Transform; 
    122         } 
    123  
     200 
     201                tmp.rotate(Angle*(Math.PI/180)); 
     202        tmp.scale(MyScale.x,MyScale.y); 
     203        tmp.translate(Pos.x,Pos.y); 
     204        if (tx!=null) 
     205                { 
     206            tmp.concat(tx); 
     207        } 
     208        transform.matrix = tmp; 
     209        } 
    124210} 
  • scenarios/GerminationX/fungi/src/truffle/flash/FlashWorld.hx

    r791 r814  
    1818import flash.display.MovieClip; 
    1919import flash.display.DisplayObject; 
     20import flash.events.MouseEvent; 
    2021import truffle.interfaces.World; 
    2122import truffle.interfaces.Sprite; 
     
    2526{ 
    2627    var Scene:Array<Entity>; 
     28    var MouseDownFunc:Dynamic -> Void; 
     29    var MouseDownContext:Dynamic; 
    2730 
    2831    function new() 
     
    5255    } 
    5356 
     57        public function MouseDown(c:Dynamic, f:Dynamic -> Void=null) 
     58        { 
     59        MouseDownFunc=f; 
     60        MouseDownContext=c; 
     61                addEventListener(MouseEvent.MOUSE_DOWN, MouseDownCB); 
     62        } 
     63 
     64    public function MouseDownCB(e) 
     65    { 
     66        MouseDownFunc(MouseDownContext); 
     67    } 
     68 
    5469    public function SortScene() 
    5570    {         
     
    6479        { 
    6580            setChildIndex(e.GetRoot(),i); 
     81            e.OnSortScene(i); 
    6682            i++; 
    6783        } 
     
    7288        for (e in Scene) 
    7389        { 
    74             e.Update(time,cast(this,truffle.interfaces.World)); 
     90            if (e.NeedsUpdate) 
     91            { 
     92                e.Update(time,cast(this,truffle.interfaces.World)); 
     93            } 
    7594        } 
    7695    } 
  • scenarios/GerminationX/fungi/src/truffle/interfaces/Sprite.hx

    r791 r814  
    2222{ 
    2323    public var Pos:Vec2; 
    24         public function MouseDown(f:Dynamic -> Void=null) : Void; 
     24    public var Width:Int; 
     25    public var Height:Int; 
     26 
     27        public function MouseDown(c:Dynamic, f:Dynamic -> Void=null) : Void; 
     28        public function MouseOver(c:Dynamic, f:Dynamic -> Void=null) : Void; 
    2529        public function ChangeBitmap(t:TextureDesc) : Void; 
    2630 
     
    2832        public function SetScale(s:Vec2) : Void; 
    2933        public function SetRotate(angle:Float) : Void;   
     34    public function SetDepth(s:Int) : Void; 
     35    public function GetDepth(): Int; 
     36    public function CentreMiddleBottom(s:Bool) : Void; 
     37    public function Hide(s:Bool) : Void; 
    3038 
    31         public function Update(frame:Int, world:World, tx:Dynamic) : Void; 
     39        public function Update(frame:Int, tx:Dynamic) : Void; 
    3240 
    3341    public function GetTransform() : Dynamic; 
  • scenarios/GerminationX/fungi/src/truffle/interfaces/World.hx

    r791 r814  
    2424    public function AddSprite(s:Sprite) : Void; 
    2525    public function RemoveSprite(s:Sprite) : Void; 
     26        public function MouseDown(c:Dynamic, f:Dynamic -> Void=null) : Void; 
    2627    public function SortScene() : Void; 
    2728    public function Update(time:Int) : Void; 
Note: See TracChangeset for help on using the changeset viewer.