Ignore:
Timestamp:
2015-06-10 13:53:17 (6 years ago)
Author:
lesejuku
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • 2015/24/LeeviK/AS Bandit Experience/AS Bandit Experience/AS Bandit Experience/AS_Bandit_Experience.cs

    r5981 r5999  
    1212    GameObject banditKadet; 
    1313    Ase banditAse; 
     14    Vector aseenOsumaKohde; 
     15    bool piirraTracer = false; 
    1416    bool ladataankoAsetta = false; 
    1517    PhysicsObject Vodka; 
     
    4547 
    4648        banditAse = new Ase(HAHMOJEN_LEVEYS, HAHMOJEN_KORKEUS, 30, int.MaxValue, 3.0); //koko, lipaskoko, reserviluodit, latausnopeus 
     49        banditAse.Damage = 26; 
     50        banditAse.Spread = Angle.FromDegrees(5); 
    4751        banditAse.FireRate = 11.6; //metriä sekunnissa 
    4852        banditAse.Power.Value = 720; //ensimmäisen luodin lähtönopeus 
    4953        banditAse.Power.DefaultValue = 720; //muiden luotien lähtönopeus 
     54        banditAse.MaxRange = 150 * HAHMOJEN_LEVEYS; 
    5055        //SoundEffect AKSaani = LoadSoundEffect("CheekiBreeki"); 
    5156        //banditAse.AttackSound = AKSaani; //väliaikainen 
     
    6671        AddCollisionHandler(bandit, Vodka, ViinaRalli); 
    6772        //Camera.Follow(bandit); 
     73 
     74        Timer ajastin = new Timer(); 
     75        ajastin.Interval = 4.0; 
     76        ajastin.Timeout += SpawnLoner; 
     77        ajastin.Start(); 
    6878 
    6979        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli"); 
     
    8797    } 
    8898 
     99    protected override void Paint(Canvas canvas) 
     100    { 
     101        if (piirraTracer) 
     102        { 
     103            canvas.BrushColor = Color.Orange; 
     104            canvas.DrawLine(banditAse.AbsolutePosition + Vector.FromLengthAndAngle(55, banditAse.AbsoluteAngle), aseenOsumaKohde); 
     105            piirraTracer = false; 
     106        } 
     107        base.Paint(canvas); 
     108    } 
     109 
    89110    void LiikutaBandit(Vector vektori, PhysicsObject bandit) 
    90111    { 
     
    94115    } 
    95116 
    96     void AmmuAseella(AssaultRifle ase) 
     117    void AmmuAseella(Ase ase) 
    97118    { 
    98119        if (ladataankoAsetta) return; 
    99120 
    100121        PhysicsObject ammus = ase.Shoot(); 
    101  
    102         if (ammus != null) 
    103         { 
    104             ammus.Size *= 10.2; 
     122        if (ammus == null) return; 
     123        ammus.Destroy(); 
     124 
     125        //if (ammus != null) 
     126        //{ 
     127        //    ammus.Size = new Vector(3.5, 1); 
     128        //    AddCollisionHandler(ammus, AmmusOsuu); 
     129        //} 
     130 
     131        Angle tamankertainenHajoama = RandomGen.NextAngle(-ase.Spread, ase.Spread); 
     132 
     133        PhysicsObject osumanKohde = ShootHitscan(ase, bandit, tamankertainenHajoama); 
     134        if (osumanKohde != null) 
     135        { 
     136            AmmusOsuu(osumanKohde); 
     137            aseenOsumaKohde = osumanKohde.AbsolutePosition; 
     138            piirraTracer = true; 
     139        } 
     140        else 
     141        { 
     142            aseenOsumaKohde = ase.Position + Vector.FromLengthAndAngle(ase.MaxRange, ase.AbsoluteAngle + tamankertainenHajoama); 
     143            piirraTracer = true; 
     144        } 
     145    } 
     146 
     147    /// <summary> 
     148    /// Ammutaan aseen suuntaan raycast aseen kantaman päähän. 
     149    /// Palauttaa asetta lähimmän PhysicsObjektin, johon säde osuu. 
     150    /// </summary> 
     151    /// <param name="a"></param> 
     152    /// <returns></returns> 
     153    PhysicsObject ShootHitscan(Ase a, GameObject owner, Angle poikkeama) 
     154    { 
     155        Vector farTarget = Vector.FromLengthAndAngle(a.MaxRange, a.AbsoluteAngle + poikkeama); 
     156 
     157        List<GameObject> potTargets = GetObjects(x => x is PhysicsObject && x != owner); 
     158 
     159        double closestDistance = double.MaxValue; 
     160        int closestIndex = -1; 
     161 
     162        for (int i = 0; i < potTargets.Count; i++) 
     163        { 
     164            if (potTargets[i].IsBlocking(a.AbsolutePosition, farTarget)) 
     165            { 
     166                double currentDistance = Vector.Distance(a.AbsolutePosition, potTargets[i].Position); 
     167 
     168                if (currentDistance < closestDistance) 
     169                { 
     170                    closestDistance = currentDistance; 
     171                    closestIndex = i; 
     172                } 
     173            } 
     174        } 
     175 
     176        if (closestIndex != -1) 
     177            return (PhysicsObject)potTargets[closestIndex]; 
     178        return null; 
     179    } 
     180 
     181    void AmmusOsuu(PhysicsObject kohde) 
     182    { 
     183        Loner k = kohde as Loner; 
     184        if (k != null) 
     185        { 
     186            k.Damagea(banditAse.Damage); 
    105187        } 
    106188    } 
     
    133215        Add(loner); 
    134216        return loner; 
     217 
    135218    } 
    136219    void LuoVodka() 
     
    150233        banditAse.Destroy(); 
    151234        banditKadet.Destroy(); 
     235        LuoMrDeath(); 
    152236 
    153237    
     
    155239    } 
    156240 
     241    void LuoMrDeath() 
     242    { 
     243        ClearAll(); 
     244        GameObject DEATH = new GameObject(LoadImage("death")); 
     245        Add(DEATH); 
     246        Level.Background.Color = Color.Black; 
     247        Keyboard.Listen(Key.Space, ButtonState.Pressed, delegate { 
     248            ClearAll(); 
     249            Begin(); 
     250        }, null); 
     251    } 
     252 
     253    void SpawnLoner() 
     254    { 
     255        //ANUS BREAKS 4 DAMAGE 
     256    } 
    157257} 
Note: See TracChangeset for help on using the changeset viewer.