Changeset 4493 for 2013/27


Ignore:
Timestamp:
2013-07-05 12:35:47 (6 years ago)
Author:
mijoilmo
Message:

Talletus.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 2013/27/MikkoI/omapeli/omapeli/omapeli/omapeli.cs

    r4441 r4493  
    1717    { 
    1818        IsUpdated = true; 
    19         topNappi = new GameObject(3, 3, Shape.Circle); 
     19        topNappi = new GameObject(9, 9, Shape.Circle); 
    2020        topNappi.Color = Color.Red; 
    2121        Game.Add(topNappi, 1); 
    22         bottomNappi = new GameObject(3, 3, Shape.Circle); 
     22        bottomNappi = new GameObject(9, 9, Shape.Circle); 
    2323        bottomNappi.Color = Color.Green; 
    2424        Game.Add(bottomNappi, 1); 
     25        this.Destroyed += topNappi.Destroy; 
     26        this.Destroyed += bottomNappi.Destroy; 
    2527    } 
    2628 
    2729    public override void Update(Time time) 
    2830    { 
    29         topNappi.Position = new Vector(this.X, this.Top); 
    30         bottomNappi.Position = new Vector(this.X, this.Bottom); 
     31        double x = this.Height / 2 * Math.Cos((this.Angle + Angle.RightAngle).Radians); 
     32        double y = this.Height / 2 * Math.Sin((this.Angle + Angle.RightAngle).Radians); 
     33        topNappi.Position = this.Position + new Vector(x, y); 
     34        x = this.Height / 2 * Math.Cos((this.Angle - Angle.RightAngle).Radians); 
     35        y = this.Height / 2 * Math.Sin((this.Angle - Angle.RightAngle).Radians); 
     36        bottomNappi.Position = this.Position + new Vector(x, y); 
    3137        base.Update(time); 
    3238    } 
     
    4248    { 
    4349        Mouse.IsCursorVisible = true; 
    44         CreateBox(0, 0, 600, 600, "normal", double.MinValue, double.MaxValue, Angle.FromDegrees(0)); 
    45         CreateBox(0, 1600, 300, 300, "destroyer", double.MinValue, double.MaxValue, Angle.FromDegrees(45)); 
    46          
     50        CreateBox(259, 0, 300, 300, "normal", double.MinValue, double.MaxValue, Angle.FromDegrees(0)); 
     51        CreateBox(0, 1600, 300, 300, "destroyer", double.MinValue, double.MaxValue, Angle.FromDegrees(0)); 
     52 
    4753        //.AngularVelocity=0.1; 
    4854        //CreateBox(250, 400, 80, 80, "destroyer", double.MinValue, double.MaxValue).Angle = Angle.FromDegrees(14); 
     
    5056        AssignLevel(); 
    5157        Keyboard.Listen(Key.Escape, ButtonState.Pressed, delegate { Exit(); }, "Lopeta peli"); 
    52     } 
    53  
    54     void CreateShards(double x, double y, double w, double h, Vector velocity) 
    55     { 
    56         //poista return 
    57         return; 
     58        Keyboard.Listen(Key.F5, ButtonState.Down, delegate { ClearAll(); Begin(); }, "Lopeta peli"); 
     59    } 
     60 
     61    void CreateShards(double x, double y, double w, double h, Vector velocity, Angle angle) 
     62    { 
    5863        double shardWidth = w; double shardHeight = h; 
    5964        if (shardWidth < 4) { shardWidth = 4; } 
    6065        if (shardHeight < 4) { shardHeight = 4; } 
    6166 
    62         for (int i = 0; i < ((w * h) / 20); i++) 
     67        for (int i = 0; i < ((w * h) / 550); i++) 
    6368        { 
    6469            PhysicsObject shard = new PhysicsObject(shardWidth / 2, shardHeight / 2); 
     
    7479            shard.CollisionIgnoreGroup = 56; 
    7580            shard.Shape = Shape.Triangle; 
    76             shard.Color = Color.Black; 
     81            shard.Color = RandomGen.NextColor(); 
    7782            shard.Velocity = velocity; 
    7883            shard.X = randomX; 
     
    8085            shard.Width = shardWidth; 
    8186            shard.Height = shardHeight; 
     87            shard.Angle = angle; 
     88 
     89            shard.LifetimeLeft = TimeSpan.FromSeconds(20); 
    8290 
    8391            Add(shard); 
     
    101109        box.Y = y; 
    102110        box.Angle = kulma; 
    103         Mouse.ListenOn(box, MouseButton.Left, ButtonState.Pressed, BreakBox, null, box); 
    104111        switch (type) 
    105112        { 
    106113            case "normal": 
    107                 box.Color = Color.Black; 
     114                Mouse.ListenOn(box, MouseButton.Left, ButtonState.Pressed, BreakBox, null, box); 
     115                box.Color = RandomGen.NextColor();//Color.Black; 
    108116                box.Restitution = 0; 
    109                 AddCollisionHandler(box, "destroyer", delegate(PhysicsObject obj, PhysicsObject toin) { if (toin.Velocity.X > 50 || toin.Velocity.Y > 50 || toin.Velocity.X < -50 || toin.Velocity.Y < -50) { BreakBox(obj); } }); 
    110                  
     117                box.Tag = "normal"; 
     118                int divider = 126; 
     119                AddCollisionHandler(box, "destroyer", delegate(PhysicsObject obj, PhysicsObject kohde) { if ((Math.Abs(kohde.Velocity.X) * kohde.Mass) / divider > 50 || (Math.Abs(kohde.Velocity.Y) * kohde.Mass) / divider > 50) { BreakBox(obj); } }); 
     120                AddCollisionHandler(box, "normal", delegate(PhysicsObject obj, PhysicsObject kohde) { if ((Math.Abs(kohde.Velocity.X) * kohde.Mass) / divider > 50 || (Math.Abs(kohde.Velocity.Y) * kohde.Mass) / divider > 50) { BreakBox(obj); } }); 
     121 
     122 
     123 
    111124                break; 
    112125            case "destroyer": 
    113126                box.Color = Color.Red; 
    114127                box.Tag = "destroyer"; 
    115                 box.Mass = 9; 
     128                box.Mass = 10; 
     129                //Mouse.ListenOn(box, MouseButton.Left, ButtonState.Down, moveBox, null, box); 
     130                Mouse.Listen(MouseButton.Left, ButtonState.Down, moveBox, null, box); 
    116131                break; 
    117132            case "ylaboxi": 
    118                 box.Color = Color.Black; 
     133                box.Color = Color.Red; 
    119134                box.Restitution = 0; 
    120135                //box.Color = Color.Red; 
     
    125140        return box; 
    126141    } 
     142 
     143    void moveBox(PhysicsObject obj) 
     144    { 
     145 
     146        //obj.Position = Mouse.PositionOnWorld; 
     147        //obj.Velocity = new Vector(0,0); 
     148        obj.Push((Mouse.PositionOnWorld - obj.Position) * 200); 
     149    } 
     150 
    127151    void BreakBox(PhysicsObject obj) 
    128152    { 
     
    140164    { 
    141165        double divider = 1.6; 
     166 
    142167        maxShardSize.X /= divider; 
    143168        maxShardSize.Y /= divider; 
     169 
     170 
     171        //double objtopX = obj.X + obj.Height / 2 * Math.Cos((obj.Angle + Angle.RightAngle).Radians); 
     172        //double objtopY = obj.Y + obj.Height / 2 * Math.Sin((obj.Angle + Angle.RightAngle).Radians); 
     173        //double objleftX = obj.X + obj.Width / 2 * Math.Cos((obj.Angle + Angle.FullAngle).Radians); 
     174        //double objleftY = obj.Y + obj.Width / 2 * Math.Sin((obj.Angle + Angle.FullAngle).Radians); 
     175        //double objbottomX = obj.X + obj.Height / 2 * Math.Cos((obj.Angle - Angle.RightAngle).Radians); 
     176        //double objbottomY = obj.Y + obj.Height / 2 * Math.Sin((obj.Angle - Angle.RightAngle).Radians); 
     177        //double objrightX = obj.X + obj.Width / 2 * Math.Cos((obj.Angle).Radians); 
     178        //double objrightY = obj.Y + obj.Width / 2 * Math.Sin((obj.Angle).Radians); 
    144179 
    145180        //Vector parentBoxPos = new Vector(, ); 
     
    151186 
    152187        // Keskimmäisen suorakulmion paikka 
    153         Vector pos = new Vector(obj.X,obj.Y); 
     188        Vector pos = new Vector(obj.X, obj.Y); 
    154189        //Vector pos = new Vector(RandomGen.NextDouble(obj.Left + (obj.Width / divider / 2), obj.Right - (obj.Width / divider / 2)), RandomGen.NextDouble(obj.Top - (obj.Height / divider / 2), obj.Bottom + (obj.Height / divider / 2))); 
    155190        // pos = pos + (2 * (obj.Position - pos)); 
     
    159194        if (parent == null) 
    160195        { 
    161             CreateShards(pos.X, pos.Y, maxShardSize.X, maxShardSize.Y, obj.Velocity); 
     196            CreateShards(pos.X, pos.Y, maxShardSize.X, maxShardSize.Y, obj.Velocity, obj.Angle); 
    162197            return; 
    163198        } 
     
    166201            parent.Velocity = obj.Velocity; 
    167202            parent.AngularVelocity = obj.AngularVelocity; 
    168         } 
    169  
    170  
     203 
     204        } 
     205         
     206        //double parenttopX =     parent.X + parent.Height / 2 * Math.Cos((parent.Angle + Angle.RightAngle).Radians); 
     207        //double parenttopY =     parent.Y + parent.Height / 2 * Math.Sin((parent.Angle + Angle.RightAngle).Radians); 
     208        //double parentleftX =    parent.X + parent.Width / 2 * Math.Cos((parent.Angle + Angle.FullAngle).Radians); 
     209        //double parentleftY =    parent.Y + parent.Width / 2 * Math.Sin((parent.Angle + Angle.FullAngle).Radians); 
     210        //double parentbottomX =  parent.X + parent.Height / 2 * Math.Cos((parent.Angle - Angle.RightAngle).Radians); 
     211        //double parentbottomY =  parent.Y + parent.Height / 2 * Math.Sin((parent.Angle - Angle.RightAngle).Radians); 
     212        //double parentrightX =   parent.X + parent.Width / 2 * Math.Cos((parent.Angle).Radians); 
     213        //double parentrightY =   parent.Y + parent.Width / 2 * Math.Sin((parent.Angle).Radians); 
    171214 
    172215        //double x = pos.X; 
    173216        //double y = parent.Top + (obj.Top - parent.Top) / 2; 
    174217        double width = parent.Width; 
     218        //double height = objtopY - parenttopY; 
    175219        double height = obj.Top - parent.Top; 
    176220 
     
    178222 
    179223        // parent on keskimmäinen suorakulmio 
    180         pos = parent.Position + Vector.FromLengthAndAngle(parent.Height / 2 + height / 2, parent.Angle + Angle.RightAngle);// - (obj.Angle)); 
    181         PhysicsObject Topbox = CreateBox(pos.X, pos.Y, width, height, "normal", minShardSize, maxSize, parent.Angle); //ylä kesk 
    182  
    183         if (Topbox == null) 
    184         { 
    185             CreateShards(pos.X, pos.Y, width, height, obj.Velocity); 
     224        pos = parent.Position + Vector.FromLengthAndAngle(parent.Height / 2 + height / 2, parent.Angle + Angle.RightAngle); 
     225        PhysicsObject topbox = CreateBox(pos.X, pos.Y, width, height, "normal", minShardSize, maxSize, parent.Angle); //ylä kesk 
     226 
     227        if (topbox == null) 
     228        { 
     229            CreateShards(pos.X, pos.Y, width, height, obj.Velocity, obj.Angle); 
    186230        } 
    187231        else 
    188232        { 
    189             Topbox.Velocity = obj.Velocity; 
     233            topbox.Velocity = obj.Velocity; 
    190234            //x = parent.Left - ((parent.Left - obj.Left) / 2); 
     235 
     236            //width = parentleftX - objleftX; 
    191237            width = parent.Left - obj.Left; 
    192             pos = Topbox.Position - Vector.FromLengthAndAngle(Topbox.Width / 2 + width / 2, Topbox.Angle);// - (obj.Angle)); 
    193             box = CreateBox(pos.X, pos.Y, width, height, "normal", minShardSize, maxSize, Topbox.Angle); //ylä vas 
     238 
     239            pos = topbox.Position - Vector.FromLengthAndAngle(topbox.Width / 2 + width / 2, topbox.Angle);// - (obj.Angle)); 
     240            box = CreateBox(pos.X, pos.Y, width, height, "normal", minShardSize, maxSize, topbox.Angle); //ylä vas 
    194241            if (box == null) 
    195242            { 
    196                 CreateShards(pos.X, pos.Y, width, height, obj.Velocity); 
     243                CreateShards(pos.X, pos.Y, width, height, obj.Velocity, obj.Angle); 
    197244            } 
    198245            else 
    199246            { 
    200  
    201247                box.Velocity = parent.Velocity; 
    202248                box.AngularVelocity = parent.AngularVelocity; 
    203  
    204             } 
    205  
    206  
     249            } 
     250 
     251            //width = objrightX - parentrightX; 
    207252            width = obj.Right - parent.Right; 
    208253 
    209             pos = Topbox.Position + Vector.FromLengthAndAngle(Topbox.Width / 2 + width / 2, Topbox.Angle);// - (obj.Angle)); 
    210             box = CreateBox(pos.X, pos.Y, width, height, "normal", minShardSize, maxSize, Topbox.Angle); //ylä oik 
     254            pos = topbox.Position + Vector.FromLengthAndAngle(topbox.Width / 2 + width / 2, topbox.Angle);// - (obj.Angle)); 
     255            box = CreateBox(pos.X, pos.Y, width, height, "normal", minShardSize, maxSize, topbox.Angle); //ylä oik 
    211256 
    212257            if (box == null) 
    213258            { 
    214                 CreateShards(pos.X, pos.Y, width, height, obj.Velocity); 
    215             } 
    216             else { box.Velocity = obj.Velocity; box.Angle = obj.Angle; } 
    217         } 
    218  
    219  
     259                CreateShards(pos.X, pos.Y, width, height, obj.Velocity, obj.Angle); 
     260            } 
     261            else { box.Velocity = obj.Velocity; box.AngularVelocity = parent.AngularVelocity; } 
     262        } 
    220263 
    221264        //x = parent.Left - ((parent.Left - obj.Left) / 2); 
    222265        //y = parent.Y; 
     266        //width = objrightX - parentrightX; 
    223267        width = obj.Right - parent.Right; 
     268 
    224269        height = parent.Height; 
    225270 
    226         pos = parent.Position + Vector.FromLengthAndAngle(parent.Width / 2 + width / 2, parent.Angle);// - (obj.Angle)); 
     271        pos = parent.Position + Vector.FromLengthAndAngle(parent.Width / 2 + width / 2, parent.Angle); 
    227272        box = CreateBox(pos.X, pos.Y, width, height, "normal", minShardSize, maxSize, parent.Angle); //keski oik 
    228273 
    229274        if (box == null) 
    230275        { 
    231             CreateShards(pos.X, pos.Y, width, height, obj.Velocity); 
    232         } 
    233         else { box.Velocity = obj.Velocity; } 
    234  
     276            CreateShards(pos.X, pos.Y, width, height, obj.Velocity, obj.Angle); 
     277        } 
     278        else { box.Velocity = obj.Velocity; box.AngularVelocity = parent.AngularVelocity; } 
     279 
     280        //width = parentleftX - objleftX; 
    235281        width = parent.Left - obj.Left; 
    236282 
    237         pos = parent.Position - Vector.FromLengthAndAngle(parent.Width / 2 + width / 2, parent.Angle);// - (obj.Angle)); 
     283        pos = parent.Position - Vector.FromLengthAndAngle(parent.Width / 2 + width / 2, parent.Angle); 
    238284        box = CreateBox(pos.X, pos.Y, width, height, "normal", minShardSize, maxSize, parent.Angle); //keski vas 
    239  
    240  
    241285 
    242286        //x = parent.Right + ((obj.Right - parent.Right) / 2); 
    243287        width = parent.Width; 
    244         height = (parent.Bottom - obj.Bottom); 
    245  
    246         pos = parent.Position + Vector.FromLengthAndAngle(parent.Height / 2 + height / 2, parent.Angle - Angle.RightAngle);// - (obj.Angle)); 
     288        //height = parentbottomY - objbottomY; 
     289        height = parent.Bottom - obj.Bottom; 
     290 
     291        pos = parent.Position + Vector.FromLengthAndAngle(parent.Height / 2 + height / 2, parent.Angle - Angle.RightAngle); 
    247292        PhysicsObject BotBox = CreateBox(pos.X, pos.Y, width, height, "normal", minShardSize, maxSize, parent.Angle); //ala kesk 
    248293 
    249294        if (BotBox == null) 
    250295        { 
    251             CreateShards(pos.X, pos.Y, width, height, obj.Velocity); 
     296            CreateShards(pos.X, pos.Y, width, height, obj.Velocity, obj.Angle); 
    252297        } 
    253298        else 
     
    256301            BotBox.Velocity = obj.Velocity; 
    257302 
     303            //width = objleftX - parentleftX; 
    258304            width = parent.Left - obj.Left; 
    259305 
    260             pos = BotBox.Position - Vector.FromLengthAndAngle(BotBox.Width / 2 + width / 2, BotBox.Angle);// - (obj.Angle)); 
     306            pos = BotBox.Position - Vector.FromLengthAndAngle(BotBox.Width / 2 + width / 2, BotBox.Angle); 
    261307            box = CreateBox(pos.X, pos.Y, width, height, "normal", minShardSize, maxSize, BotBox.Angle); //ala vas 
    262308 
    263309            if (box == null) 
    264310            { 
    265                 CreateShards(pos.X, pos.Y, width, height, obj.Velocity); 
    266             } 
    267             else { box.Velocity = obj.Velocity; } 
    268  
     311                CreateShards(pos.X, pos.Y, width, height, obj.Velocity, obj.Angle); 
     312            } 
     313            else { box.Velocity = obj.Velocity; box.AngularVelocity = parent.AngularVelocity; } 
     314 
     315            //width = objrightX - parentrightX; 
    269316            width = obj.Right - parent.Right; 
    270317 
     
    274321            if (box == null) 
    275322            { 
    276                 CreateShards(pos.X, pos.Y, width, height, obj.Velocity); 
    277             } 
    278             else { box.Velocity = obj.Velocity; } 
    279  
    280         } 
    281  
    282  
    283  
    284     } 
     323                CreateShards(pos.X, pos.Y, width, height, obj.Velocity, obj.Angle); 
     324            } 
     325            else { box.Velocity = obj.Velocity; box.AngularVelocity = parent.AngularVelocity; } 
     326 
     327        } 
     328 
     329 
     330 
     331    } 
     332 
     333 
    285334    void AssignLevel() 
    286335    { 
     
    288337        Gravity = new Vector(0, -500); 
    289338        Level.CreateBottomBorder(); 
     339        Camera.ZoomToLevel(); 
     340        Camera.Zoom(0.7); 
    290341    } 
    291342} 
Note: See TracChangeset for help on using the changeset viewer.