Changeset 6006 for 2015/24/ohjaajat/Dungeon/Dungeon
- Timestamp:
- 2015-06-10 23:05:54 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
2015/24/ohjaajat/Dungeon/Dungeon/Dungeon/Dungeon.cs
r6005 r6006 294 294 if (CanDig()) 295 295 { 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]; 312 306 313 307 // Päivitetään huoneiden kultuuri-infot. 314 308 PaivitaHuoneidenKultuurit(); 315 309 } 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; 316 328 } 317 329 … … 391 403 return false; 392 404 } 405 393 406 int dx = Math.Abs(kohdeHuone.Location.X - digStart.X); 394 407 int dy = Math.Abs(kohdeHuone.Location.Y - digStart.Y); 395 return dx + dy == 1;408 return (dx > 0 && dy == 0) || (dy > 0 && dx == 0); 396 409 } 397 410 … … 441 454 from x in Enumerable.Range(0, huoneet.GetLength(0)) 442 455 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 } 443 479 } 444 480
Note: See TracChangeset
for help on using the changeset viewer.