Changeset 6006 for 2015/24


Ignore:
Timestamp:
2015-06-10 23:05:54 (4 years ago)
Author:
sieerinn
Message:

Pitkiä suoria pätkiä voi kaivaa.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 2015/24/ohjaajat/Dungeon/Dungeon/Dungeon/Dungeon.cs

    r6005 r6006  
    294294        if (CanDig()) 
    295295        { 
    296             var alkuHuone = huoneet[digStart.X, digStart.Y]; 
    297  
    298             // Hienot partikkeliefektit. 
    299             if (!kohdeHuone.Dug) 
    300                 LuoKiviPartikkelit(kohdeHuone.Position); 
    301             if (!alkuHuone.Dug) 
    302                 LuoKiviPartikkelit(alkuHuone.Position); 
    303  
    304             // Merkataan huoneet kaivetuksi. 
    305             kohdeHuone.Dug = alkuHuone.Dug = true; 
    306  
    307             // Reiät seinään. 
    308             Direction oviSuunta = (kohdeHuone.Position - alkuHuone.Position).Angle.MainDirection; 
    309             Direction toinenOviSuunta = Direction.Inverse(oviSuunta); 
    310             alkuHuone.Walls[oviSuunta].Image = reikaSeinaKuva; 
    311             kohdeHuone.Walls[toinenOviSuunta].Image = reikaSeinaKuva; 
     296            int dx = kohdeHuone.Location.X - digStart.X; 
     297            int dy = kohdeHuone.Location.Y - digStart.Y; 
     298            Point[] kaivettavatPaikat = RuudutSuoralta(digStart, dx, dy).ToArray(); 
     299            MessageDisplay.Add("" + kaivettavatPaikat.Length); 
     300            for (int i = 0; i < kaivettavatPaikat.Length - 1; i++) 
     301            { 
     302                Dig(GetRoom(kaivettavatPaikat[i]), GetRoom(kaivettavatPaikat[i + 1])); 
     303            } 
     304             
     305            //var alkuHuone = huoneet[digStart.X, digStart.Y]; 
    312306 
    313307            // Päivitetään huoneiden kultuuri-infot. 
    314308            PaivitaHuoneidenKultuurit(); 
    315309        } 
     310    } 
     311 
     312    void Dig(Room alku, Room kohde) 
     313    { 
     314        // Hienot partikkeliefektit. 
     315        if (!alku.Dug) 
     316            LuoKiviPartikkelit(alku.Position); 
     317        if (!kohde.Dug) 
     318            LuoKiviPartikkelit(kohde.Position); 
     319 
     320        // Merkataan huoneet kaivetuksi. 
     321        alku.Dug = kohde.Dug = true; 
     322 
     323        // Reiät seinään. 
     324        Direction oviSuunta = (kohde.Position - alku.Position).Angle.MainDirection; 
     325        Direction toinenOviSuunta = Direction.Inverse(oviSuunta); 
     326        alku.Walls[oviSuunta].Image = reikaSeinaKuva; 
     327        kohde.Walls[toinenOviSuunta].Image = reikaSeinaKuva; 
    316328    } 
    317329 
     
    391403            return false; 
    392404        } 
     405 
    393406        int dx = Math.Abs(kohdeHuone.Location.X - digStart.X); 
    394407        int dy = Math.Abs(kohdeHuone.Location.Y - digStart.Y); 
    395         return dx + dy == 1; 
     408        return (dx > 0 && dy == 0) || (dy > 0 && dx == 0); 
    396409    } 
    397410 
     
    441454               from x in Enumerable.Range(0, huoneet.GetLength(0)) 
    442455               select new Point(x, y); 
     456    } 
     457 
     458    /// <summary> 
     459    /// Palauttaa ruutuja suoralta pätkältä dx ja dy verran alkaen pisteestä "alku". 
     460    /// dx tai dy pitää olla nolla. 
     461    /// </summary> 
     462    IEnumerable<Point> RuudutSuoralta(Point alku, int dx, int dy) 
     463    { 
     464        if (dx != 0) 
     465        { 
     466            for (int i = 0; i < Math.Abs(dx) + 1; i++) 
     467            { 
     468                yield return new Point(alku.X + i * Math.Sign(dx), alku.Y); 
     469            } 
     470            yield break; 
     471        } 
     472        if (dy != 0) 
     473        { 
     474            for (int i = 0; i < Math.Abs(dy) + 1; i++) 
     475            { 
     476                yield return new Point(alku.X, alku.Y + i * Math.Sign(dy)); 
     477            } 
     478        } 
    443479    } 
    444480 
Note: See TracChangeset for help on using the changeset viewer.