Ignore:
Timestamp:
2015-07-01 20:27:21 (4 years ago)
Author:
sieerinn
Message:

Junabossia, savua, sekä kaikenlaista ihme säätöä tehty.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 2015/27/ohjaajat/TheLegendOfGabriel/TheLegendOfGabriel/TheLegendOfGabriel/LevelCreation.cs

    r6704 r6705  
    55using Jypeli; 
    66using Jypeli.Assets; 
     7using Jypeli.Widgets; 
    78 
    89/* 
     
    5455    void CreateBoss(Vector position, double width, double height, Angle angle, Shape shape, string name, Dictionary<string, string> properties) 
    5556    { 
    56         var bossHealth = new IntMeter(10); 
    57  
     57        BossHealth = new IntMeter(2, 0, 10); 
     58 
     59        var bar = new ProgressBar(Level.Width * 0.7, TILE_SIZE * 0.5); 
     60        bar.Y = Screen.Top - TILE_SIZE * 0.5; 
     61        bar.BindTo(BossHealth); 
     62        Add(bar); 
     63 
     64        // Juna ilmestyy välillä satunnaiseen spawniin. 
    5865        var bossTimer = new Timer(); 
    59         bossTimer.Interval = 4; 
     66        bossTimer.Interval = 8; 
    6067        bossTimer.Timeout += delegate 
    6168        { 
    62             Vector pos = RandomGen.SelectOne<Vector>(bossSpawnPositions); 
    63             //CreateBossTrainPart(pos, ); 
     69            // Luodaan päävaunu. 
     70            var pos = RandomGen.SelectOne<Vector>(bossSpawnPositions); 
     71            var train = CreateBossTrainPart(pos.X, pos.Y, trainAnimation); 
     72            double newPositionX = pos.X + train.Width; 
     73 
     74            // Luodaan muut vaunut. 
     75            int carriages = (int)(BossHealth.Value/(double)BossHealth.MaxValue * 6); 
     76            for (int i = 0; i < carriages; i++) 
     77            { 
     78                var part = CreateBossTrainPart(newPositionX, pos.Y, carriageAnimation); 
     79                newPositionX += part.Width; 
     80            } 
    6481        }; 
    6582        bossTimer.Start(); 
    66     } 
    67  
    68     void CreateBossTrainPart(Vector position, Animation anim) 
    69     { 
    70         var part = PhysicsObject.CreateStaticObject(150, 70); 
    71         part.Position = position; 
     83 
     84        BossHealth.LowerLimit += delegate 
     85        { 
     86            EnemyDieSound.Play(); 
     87            bossTimer.Stop(); 
     88            Timer.SingleShot(4.0, Victory); 
     89 
     90            foreach (var part in GetObjectsWithTag("boss")) 
     91            { 
     92                part.Destroy(); 
     93                var smoke = new GameObject(80, 160); 
     94                smoke.X = part.X; 
     95                smoke.Bottom = part.Bottom; 
     96                smoke.Animation = new Animation(smokeAnimation); 
     97                smoke.Animation.Start(1); 
     98                smoke.Animation.Played += () => smoke.Destroy(); 
     99                Add(smoke); 
     100            } 
     101        }; 
     102    } 
     103 
     104    PhysicsObject CreateBossTrainPart(double left, double y, Animation anim) 
     105    { 
     106        var part = PhysicsObject.CreateStaticObject(70, 40); 
     107        part.Left = left; 
     108        part.Y = y; 
    72109        part.Animation = anim; 
    73110        part.Animation.Start(); 
    74         part.Velocity = new Vector(-50, 0); 
     111        part.Velocity = new Vector(-80, 0); 
     112        part.Tag = "boss"; 
     113        part.CollisionIgnoreGroup = 3; 
    75114        Add(part); 
     115 
     116        // Pala on näkyvillä vain kentän sisäpuolella. 
     117        var appearTimer = new Timer(); 
     118        appearTimer.Interval = 0.05; 
     119        appearTimer.Timeout += delegate 
     120        { 
     121            part.IsVisible = part.Left < Level.Right; 
     122 
     123            if (part.Right < Level.Left) 
     124            { 
     125                part.Destroy(); 
     126                appearTimer.Stop(); 
     127            } 
     128        }; 
     129        appearTimer.Start(); 
     130 
     131        // Palat luo vihollisia jatkuvasti. 
     132        var enemySpawnTimer = new Timer(); 
     133        enemySpawnTimer.Interval = 2.0; 
     134        enemySpawnTimer.Timeout += delegate 
     135        { 
     136            if (part.Right < Level.Right) 
     137            { 
     138                CreateCoyote(part.Position, TILE_SIZE, TILE_SIZE, Angle.Zero, Shape.Rectangle, "", null); 
     139            } 
     140        }; 
     141        enemySpawnTimer.Start(); 
     142 
     143        part.Destroyed += delegate 
     144        { 
     145            appearTimer.Stop(); 
     146            enemySpawnTimer.Stop(); 
     147        }; 
     148 
     149        return part; 
    76150    } 
    77151 
     
    92166        var enemy = new Creature(width, height, 1); 
    93167        enemy.MoveAnimations = DirectionalAnimations(coyoteLeft, coyoteRight, coyoteUp, coyoteDown); 
     168        enemy.Image = enemy.MoveAnimations[Direction.Right].CurrentFrame; 
    94169        enemy.Position = position; 
    95170        enemy.Tag = "enemy"; 
    96171        enemy.Brain = new FollowerBrain(player) { Speed = 50 }; 
     172        enemy.CollisionIgnoreGroup = 3; 
    97173        Add(enemy, 1); 
    98174        enemies.Add(enemy); 
     
    103179        }); 
    104180 
    105         enemy.Health.LowerLimit += enemy.Destroy; 
     181        enemy.Health.LowerLimit += delegate 
     182        { 
     183            enemy.Destroy(); 
     184            RandomItemDrop(enemy.Position); 
     185 
     186            EnemyDieSound.Play(); 
     187 
     188            var smoke = new GameObject(20, 40); 
     189            smoke.X = enemy.X; 
     190            smoke.Bottom = enemy.Bottom; 
     191            smoke.Animation = new Animation(smokeAnimation); 
     192            smoke.Animation.Start(1); 
     193            smoke.Animation.Played += () => smoke.Destroy(); 
     194            Add(smoke); 
     195        }; 
     196    } 
     197 
     198    void RandomItemDrop(Vector position) 
     199    { 
     200        var chance = RandomGen.NextDouble(0, 100); 
     201        if (chance < 20) 
     202        { 
     203            int itemType = RandomGen.NextInt(1, 3); 
     204            var item = PhysicsObject.CreateStaticObject(10, 10); 
     205            item.Position = position; 
     206            item.Image = itemType == 1 ? GrenadeBoxImage : AmmoBoxImage; 
     207            item.Tag = itemType == 1 ? "grenadebox" : "ammobox"; 
     208            item.IgnoresCollisionResponse = true; 
     209            Add(item); 
     210        } 
    106211    } 
    107212 
     
    122227    } 
    123228 
    124         /// <summary> 
     229    /// <summary> 
    125230    /// Pelaajan päällä näkyvä tiili. 
    126231    /// </summary> 
     
    142247    /// Luo tavallisen tiilen. 
    143248    /// </summary> 
    144     GameObject CreateBasicTile(Vector position, double width, double height, Image image, int layer, Dictionary<string, string> properties) 
    145     { 
    146         var tile = properties.ContainsKey("collide") ? new PhysicsObject(width, height) : new GameObject(width, height); 
     249    void CreateBasicTile(Vector position, double width, double height, Image image, int layer, Dictionary<string, string> properties) 
     250    { 
     251        var tile = properties.ContainsKey("collide") ? PhysicsObject.CreateStaticObject(width, height) : new GameObject(width, height); 
    147252        tile.Image = image; 
    148253        tile.Position = position; 
    149254        Add(tile, layer); 
    150         return tile; 
    151255    } 
    152256 
     
    156260    void CreateExit(Vector position, double width, double height, Angle angle, Shape shape, string name, Dictionary<string, string> properties) 
    157261    { 
    158         var target = properties["goto"] == "disabled"? null : properties["goto"].Split('@'); // Jos peli kaatuu tälle riville niin joltain exitiltä puuttuu goto-property. 
     262        var target = properties["goto"] == "disabled" ? null : properties["goto"].Split('@'); // Jos peli kaatuu tälle riville niin joltain exitiltä puuttuu goto-property. 
    159263        var exit = new Exit(width, height); 
    160264        exit.Position = position; 
     
    162266        { 
    163267            exit.TargetLevel = target[0]; 
    164             exit.TargetExitName = target[1];    
     268            exit.TargetExitName = target[1]; 
    165269        } 
    166270        exit.Name = name; 
Note: See TracChangeset for help on using the changeset viewer.