2using System.Collections.Generic;
5using System.Runtime.Serialization;
14 public static HashSet<int>
sunMap =
new HashSet<int>();
49 public List<Thing>
things =
new List<Thing>();
55 public List<int>
_plDay =
new List<int>();
61 public Dictionary<int, int>
gatherCounts =
new Dictionary<int, int>();
64 public Dictionary<int, CellEffect>
cellEffects =
new Dictionary<int, CellEffect>();
67 public Dictionary<int, int>
backerObjs =
new Dictionary<int, int>();
70 public Dictionary<int, PlantData>
plants =
new Dictionary<int, PlantData>();
81 public List<Chara>
charas =
new List<Chara>();
93 public FloodSpiller
flood =
new FloodSpiller();
99 public List<Footmark>
footmarks =
new List<Footmark>();
105 private HashSet<int>
roomHash =
new HashSet<int>();
107 private List<Thing>
_things =
new List<Thing>();
135 public IEnumerable<Card>
Cards => ((IEnumerable<Card>)
things).Concat((IEnumerable<Card>)
charas);
150 bits.Bits = (uint)
_bits;
153 public void CreateNew(
int size,
bool setReference =
true)
155 Debug.Log(
"Map CreateNew:");
197 Fov.map = (Cell.map = (Wall.map = (Point.map = (CellDetail.map =
this))));
202 pathfinder.
Init(
this, weightMap,
Size);
213 c.currentZone =
zone;
231 if (thing.
pos.
x >= newSize || thing.
pos.
z >= newSize)
238 if (chara.
pos.
x >= newSize || chara.
pos.
z >= newSize)
243 Size = (bounds.Size = newSize);
254 public void Shift(Vector2Int offset)
256 TweenUtil.Tween(0.1f,
null, delegate
260 item.pos.x += offset.x;
261 item.pos.z += offset.y;
265 for (
int i = 0; i <
Size; i++)
267 int num = i - offset.y;
268 for (
int j = 0; j <
Size; j++)
270 int num2 = j - offset.
x;
271 if (num2 >= 0 && num2 < Size && num >= 0 && num <
Size)
273 array[j, i] =
cells[num2, num];
277 array[j, i] =
new Cell
286 bounds.x += offset.
x;
287 bounds.z += offset.y;
288 bounds.maxX += offset.x;
289 bounds.maxZ += offset.y;
319 TweenUtil.Tween(0.1f,
null, delegate
327 List<Thing> list =
new List<Thing>();
347 for (
int i = 0; i <
Size; i++)
349 for (
int j = 0; j <
Size; j++)
379 Debug.Log(
"#io saving map:" + path);
380 IO.CreateDirectory(path);
387 num = partial.offsetX;
388 num2 = partial.offsetZ;
392 int num5 = num3 * num4;
393 byte[] array =
new byte[num5];
394 byte[] array2 =
new byte[num5];
395 byte[] array3 =
new byte[num5];
396 byte[] array4 =
new byte[num5];
397 byte[] array5 =
new byte[num5];
398 byte[] array6 =
new byte[num5];
399 byte[] array7 =
new byte[num5];
400 byte[] array8 =
new byte[num5];
401 byte[] array9 =
new byte[num5];
402 byte[] array10 =
new byte[num5];
403 byte[] array11 =
new byte[num5];
404 byte[] array12 =
new byte[num5];
405 byte[] array13 =
new byte[num5];
406 byte[] array14 =
new byte[num5];
407 byte[] array15 =
new byte[num5];
408 byte[] array16 =
new byte[num5];
409 byte[] array17 =
new byte[num5];
410 byte[] array18 =
new byte[num5];
411 byte[] array19 =
new byte[num5];
412 byte[] array20 =
new byte[num5];
413 byte[] array21 =
new byte[num5];
416 for (
int i = num; i < num + num3; i++)
418 for (
int j = num2; j < num2 + num4; j++)
421 array[num6] = cell.
objVal;
423 array2[num6] = cell.
_block;
425 array4[num6] = cell.
_floor;
426 array6[num6] = cell.
obj;
427 array20[num6] = cell.
_deco;
429 array7[num6] = cell.
objMat;
430 array8[num6] = cell.
decal;
431 array9[num6] = cell.
_dirs;
432 array12[num6] = cell.
height;
440 array10[num6] = array10[num6].SetBit(1, cell.
isSeen);
441 array10[num6] = array10[num6].SetBit(2, cell.
isHarvested);
442 array10[num6] = array10[num6].SetBit(3, cell.
impassable);
443 array10[num6] = array10[num6].SetBit(4, cell.
isModified);
444 array10[num6] = array10[num6].SetBit(5, cell.
isClearSnow);
445 array10[num6] = array10[num6].SetBit(6, cell.
isForceFloat);
447 array11[num6] = array11[num6].SetBit(0, cell.
isWatered);
448 array11[num6] = array11[num6].SetBit(1, cell.
isObjDyed);
449 array11[num6] = array11[num6].SetBit(2, cell.
crossWall);
458 Write(path +
"objVals", array);
459 Write(path +
"blocks", array2);
460 Write(path +
"blockMats", array3);
461 Write(path +
"floors", array4);
462 Write(path +
"floorMats", array5);
463 Write(path +
"objs", array6);
464 Write(path +
"objMats", array7);
465 Write(path +
"decal", array8);
466 Write(path +
"flags", array10);
467 Write(path +
"flags2", array11);
468 Write(path +
"dirs", array9);
469 Write(path +
"heights", array12);
470 Write(path +
"bridges", array13);
471 Write(path +
"bridgeMats", array14);
472 Write(path +
"bridgeHeights", array15);
473 Write(path +
"bridgePillars", array16);
474 Write(path +
"roofBlocks", array18);
475 Write(path +
"roofBlockMats", array19);
476 Write(path +
"roofBlockDirs", array17);
477 Write(path +
"decos", array20);
478 Write(path +
"decoMats", array21);
493 export.serializedCards.cards.Clear();
503 export.serializedCards.Add(chara2);
508 export.serializedCards.Add(chara2);
515 export.serializedCards.Add(thing);
525 export.serializedCards.Add(thing2);
529 List<Thing> list =
things;
530 things =
new List<Thing>();
535 void Write(
string _path,
byte[] bytes)
543 byte[] array = IO.ReadLZ4(path + s, size,
compression);
546 Debug.Log(
"Couldn't load:" + s);
547 return new byte[size];
566 int size = num * num2;
573 byte[] bytes = TryLoad(
"objVals");
574 byte[] bytes2 = TryLoad(
"blockMats");
575 byte[] bytes3 = TryLoad(
"blocks");
576 byte[] bytes4 = TryLoad(
"floorMats");
577 byte[] bytes5 = TryLoad(
"floors");
578 byte[] bytes6 = TryLoad(
"objs");
579 byte[] bytes7 = TryLoad(
"objMats");
580 byte[] bytes8 = TryLoad(
"decal");
581 byte[] bytes9 = TryLoad(
"decos");
582 byte[] bytes10 = TryLoad(
"decoMats");
583 byte[] bytes11 = TryLoad(
"dirs");
584 byte[] bytes12 = TryLoad(
"flags");
585 byte[] bytes13 = TryLoad(
"flags2");
586 byte[] bytes14 = TryLoad(
"heights");
587 byte[] bytes15 = TryLoad(
"bridges");
588 byte[] bytes16 = TryLoad(
"bridgeMats");
589 byte[] bytes17 = TryLoad(
"bridgeHeights");
590 byte[] bytes18 = TryLoad(
"bridgePillars");
591 byte[] bytes19 = TryLoad(
"roofBlocks");
592 byte[] bytes20 = TryLoad(
"roofBlockMats");
593 byte[] bytes21 = TryLoad(
"roofBlockDirs");
594 if (bytes18.Length < size)
596 bytes18 =
new byte[size];
598 if (bytes.Length < size)
600 bytes =
new byte[size];
602 if (bytes13.Length < size)
604 bytes13 =
new byte[size];
606 Validate(ref bytes,
"objVals");
607 Validate(ref bytes2,
"blockMats");
608 Validate(ref bytes3,
"blocks");
609 Validate(ref bytes4,
"floorMats");
610 Validate(ref bytes5,
"floors");
611 Validate(ref bytes6,
"objs");
612 Validate(ref bytes7,
"objMats");
613 Validate(ref bytes8,
"decal");
614 Validate(ref bytes9,
"decos");
615 Validate(ref bytes10,
"decoMats");
616 Validate(ref bytes11,
"dirs");
617 Validate(ref bytes12,
"flags");
618 Validate(ref bytes13,
"flags2");
619 Validate(ref bytes14,
"heights");
620 Validate(ref bytes15,
"bridges");
621 Validate(ref bytes16,
"bridgeMats");
622 Validate(ref bytes17,
"bridgeHeights");
623 Validate(ref bytes18,
"bridgePillars");
624 Validate(ref bytes19,
"roofBlocks");
625 Validate(ref bytes20,
"roofBlockMats");
626 Validate(ref bytes21,
"roofBlockDirs");
628 for (
int i = 0; i < num; i++)
630 for (
int j = 0; j < num2; j++)
636 objVal = bytes[num3],
637 _blockMat = bytes2[num3],
638 _block = bytes3[num3],
639 _floorMat = bytes4[num3],
640 _floor = bytes5[num3],
642 objMat = bytes7[num3],
643 decal = bytes8[num3],
644 _deco = bytes9[num3],
645 _decoMat = bytes10[num3],
646 _dirs = bytes11[num3],
647 height = bytes14[num3],
648 _bridge = bytes15[num3],
649 _bridgeMat = bytes16[num3],
650 bridgeHeight = bytes17[num3],
651 bridgePillar = bytes18[num3],
652 _roofBlock = bytes19[num3],
653 _roofBlockMat = bytes20[num3],
654 _roofBlockDir = bytes21[num3],
655 isSeen = bytes12[num3].GetBit(1),
656 isHarvested = bytes12[num3].GetBit(2),
657 impassable = bytes12[num3].GetBit(3),
658 isModified = bytes12[num3].GetBit(4),
659 isClearSnow = bytes12[num3].GetBit(5),
660 isForceFloat = bytes12[num3].GetBit(6),
661 isToggleWallPillar = bytes12[num3].GetBit(7),
662 isWatered = bytes13[num3].GetBit(0),
663 isObjDyed = bytes13[num3].GetBit(1),
664 crossWall = bytes13[num3].GetBit(2)
686 foreach (KeyValuePair<int, CellEffect> cellEffect
in cellEffects)
688 int key = cellEffect.Key;
689 int num4 = key %
Size;
690 int num5 = key /
Size;
692 if (cellEffect.Value.IsFire)
699 byte[] TryLoad(
string s)
703 void Validate(ref
byte[] reference,
string id)
705 if (reference.Length < size)
707 Debug.LogError(
"expection: size invalid:" +
id +
" " + reference.Length +
"/" + size);
708 reference =
new byte[size];
744 custom.id = (mapMetaData.id = id);
745 IO.SaveFile(_path +
"meta", mapMetaData);
752 using ZipFile zipFile = ZipFile.Read(pathZip);
753 ZipEntry zipEntry = zipFile[
"meta"];
754 if (zipEntry !=
null)
756 using (MemoryStream stream =
new MemoryStream())
758 zipEntry.Extract(stream);
760 mapMetaData.path = pathZip;
765 catch (Exception message)
767 if (Application.isEditor)
777 IO.CreateTempDirectory();
778 ZipFile zipFile = ZipFile.Read(pathZip);
779 zipFile.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently;
780 zipFile.ExtractAll(IO.TempPath);
783 using (zipFile =
new ZipFile())
785 zipFile.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently;
786 zipFile.AddDirectory(IO.TempPath);
787 zipFile.Save(pathZip);
790 IO.DeleteTempDirectory();
903 public void SetSeen(
int x,
int z,
bool seen =
true,
bool refresh =
true)
905 if (
cells[
x,
z].isSeen != seen)
918 for (
int i = 0; i <
Size; i++)
920 for (
int j = 0; j <
Size; j++)
935 EClass._map.SetSeen(p.x, p.z);
940 public void RefreshFOV(
int x,
int z,
int radius = 6,
bool recalculate =
false)
949 item.RecalculateFOV();
953 foreach (
Card item2
in list)
964 item.RecalculateFOV();
968 public void SetFloor(
int x,
int z,
int idMat = 0,
int idFloor = 0)
973 public void SetFloor(
int x,
int z,
int idMat,
int idFloor,
int dir)
976 cell._floorMat = (byte)idMat;
977 cell._floor = (byte)idFloor;
979 cell.isWatered =
false;
984 public void SetDeco(
int x,
int z,
int idMat,
int idDeco)
987 cell._decoMat = (byte)idMat;
988 cell._deco = (byte)idDeco;
992 public void SetBridge(
int x,
int z,
int height = 0,
int idMat = 0,
int idBridge = 0,
int dir = 0,
byte idPillar = 0)
995 cell.bridgeHeight = (byte)height;
996 cell._bridgeMat = (byte)idMat;
997 cell._bridge = (byte)idBridge;
998 cell.bridgePillar = idPillar;
1000 if (cell.
room !=
null)
1010 cell._roofBlockMat = (byte)idMat;
1011 cell._roofBlock = (byte)idBlock;
1012 cell._roofBlockDir = (byte)(dir + height * 4);
1016 public void SetBlock(
int x,
int z,
int idMat = 0,
int idBlock = 0)
1021 public void SetBlock(
int x,
int z,
int idMat,
int idBlock,
int dir)
1025 cell._blockMat = (byte)idMat;
1026 cell._block = (byte)idBlock;
1027 cell.blockDir = dir;
1032 cell.isToggleWallPillar =
false;
1033 if (cell.
room !=
null)
1064 if (
x > 0 &&
z <
Size - 1)
1086 if (
x > 0 &&
z <
Size - 1)
1094 if (!
cells[
x,
z].HasFloodBlock)
1110 FloodSpiller floodSpiller =
flood;
1111 IFloodCell[,] array =
cells;
1112 FloodSpiller.Result result = floodSpiller.SpillFlood(array,
x,
z);
1113 if (!result.IsValid)
1118 foreach (IFloodCell
item in result.visited)
1134 foreach (IFloodCell item2
in result.visited)
1160 foreach (IFloodCell item3
in result.visited)
1165 room.AddPoint(
new Point(b, b2));
1169 room.AddPoint(
new Point(b, b2 - 1));
1174 room.AddPoint(
new Point(b + 1, b2));
1179 room.AddPoint(
new Point(b + 1, b2 - 1));
1197 if (cell.
effect ==
null && amount > 0)
1223 if (CC !=
null && CC.IsPCFactionOrMinion && (CC.HasElement(1651) ||
EClass.
pc.
Evalue(1651) >= 2))
1228 List<Card> list =
new List<Card>();
1229 bool fire = ele == 910;
1230 bool cold = ele == 911;
1247 if (
item.IsPCFactionOrMinion)
1252 else if (!CanCook(
item))
1259 Card rootCard =
item.GetRootCard();
1269 if (
item.isThing &&
item.things.Count == 0)
1275 if (ele == 911 &&
item.HasElement(1236))
1283 Card rootCard2 =
item.GetRootCard();
1286 Msg.
Say((
item.isChara ?
"blanketInv_" :
"blanketGround_") + element.source.alias, thing,
item);
1298 foreach (
Thing item2
in item.things.List((
Thing a) => a.things.Count == 0))
1311 foreach (
Card item3
in list)
1318 if (item3.IsEquipmentOrRangedOrAmmo && (
EClass.
rnd(4) != 0 || ((item3.IsRangedWeapon || item3.Thing.isEquipped) && rootCard3.
IsPCFaction &&
EClass.
rnd(4) != 0)))
1325 if (item3.isFireproof || (!item3.category.IsChildOf(
"book") &&
EClass.
rnd(2) == 0))
1331 if (!item3.category.IsChildOf(
"drink") &&
EClass.
rnd(5) == 0)
1341 bool flag3 = CanCook(item3);
1350 if (!(item4.
row is
SourceThing.
Row { isOrigin: false, chance: not 0 } row) || row.components.IsEmpty() || (row.components.Length >= 3 && !row.components[2].StartsWith(
'+')) || !row.Category.IsChildOf(
"meal") || (row.HasTag(
CTAG.dish_fail) && power >
EClass.
rnd(500)))
1354 if (!row.factory.IsEmpty())
1356 switch (row.factory[0])
1365 if (row.components[0].Split(
'|').Contains(item3.id) || row.components[0].Split(
'|').Contains(item3.sourceCard._origin))
1370 if (list3.Count > 0)
1372 text = list3.RandomItemWeighted((
SourceThing.
Row r) => r.chance)?.
id;
1380 if (flag3 && !text.IsEmpty())
1383 List<Thing> list4 =
new List<Thing>();
1390 Msg.
Say(((rootCard3 == item3) ?
"cook_groundItem" :
"cook_invItem") + (fire ?
"" :
"_cold"), thing2, rootCard3, thing3.
Name);
1392 if (rootCard3 == item3)
1398 rootCard3.
Chara.
Pick(thing3, msg:
false);
1408 int num2 =
EClass.
rnd(item3.Num) / 2 + 1;
1409 if (item3.Num > num2)
1414 Msg.
Say((rootCard3 == item3) ?
"damage_groundItem" :
"damage_invItem", thing4, rootCard3);
1437 pos.PlayEffect(fire ?
"Element/eleFire" :
"Element/eleCold");
1443 bool CanCook(
Card c)
1445 if ((fire || cold) && c.
IsFood)
1447 return c.
category.IsChildOf(
"foodstuff");
1453 public void Burn(
int x,
int z,
bool instant =
false)
1483 if (cell.
room !=
null)
1500 foreach (
Card item in sharedPoint.ListCards())
1511 item.DamageHP(30L, 910);
1526 cell.effect = effect;
1562 cell.effect.amount += amount;
1579 public void SetObj(
int x,
int z,
int id = 0,
int value = 1,
int dir = 0)
1584 public void SetObj(
int x,
int z,
int idMat,
int idObj,
int value,
int dir,
bool ignoreRandomMat =
false)
1587 if (cell.
sourceObj.id == 118 || idObj == 118)
1589 EClass._zone.dirtyElectricity =
true;
1591 cell.obj = (byte)idObj;
1592 cell.objVal = (byte)value;
1593 cell.objMat = (byte)idMat;
1595 cell.isHarvested =
false;
1596 cell.isObjDyed =
false;
1598 if (!ignoreRandomMat && !sourceObj.
matCategory.IsEmpty())
1601 if (sourceObj.
tag.Contains(
"spot"))
1623 int num = ((!draw) ? 1 : 2);
1651 bool flag = p.sourceObj.id == 82;
1662 p.cell.objDir = row.
skin;
1690 if (recipeSource ==
null)
1695 if (iDIngredient ==
null)
1720 byte b = (flag ? point.cell._roofBlock : point.
cell.
_block);
1727 bool flag2 = c ==
null || c.IsAgent || c.IsPCFactionOrMinion;
1734 point.cell._roofBlock = 0;
1744 if (flag2 && point.
sourceObj.tileType.IsBlockMount && mineObj)
1775 point.cell.isModified =
true;
1892 if (c ==
null && task !=
null)
1896 bool num = c ==
null || c.IsAgent || c.IsPCFactionOrMinion;
1906 if (soilCost > maxSoil)
1908 num2 -=
EClass.
rnd(2 + (soilCost - maxSoil) / 10);
1921 cell.isHarvested =
true;
1931 if (cell.
HasBlock && (sourceObj.
id == 18 || sourceObj.
id == 19))
1933 MineBlock(point, recoverBlock:
false, c, mineObj:
false);
1944 switch (sourceObj.
alias)
1954 string[] array = sourceObj.
components[num3].Split(
'/');
1956 if (array.Length > 1)
1964 cell.gatherCount = 0;
1965 void Pop(
Thing thing2)
2035 if (!
item.isThing || !
item.trait.CanBeDestroyed || !
item.IsInstalled)
2039 HitResult hitResult =
item.TileType._HitTest(point,
item.Thing, canIgnore:
false);
2040 if (
item.Thing.stackOrder != detail.things.IndexOf(
item.Thing) || (hitResult !=
HitResult.Valid && hitResult !=
HitResult.Warning))
2056 for (
int i = 0; i < 4; i++)
2059 if (dependedRamp !=
null)
2073 public void AddDecal(
int x,
int z,
int id,
int amount = 1,
bool refresh =
true)
2075 if (
x < 0 || z < 0 || x >=
Size ||
z >=
Size)
2082 if (cell.
decal / 8 !=
id && cell.
decal % 8 == 0)
2086 int num = Mathf.Clamp(((cell.
decal / 8 ==
id) ? (cell.
decal % 8) : 0) + amount, 0, 7);
2087 cell.decal = (byte)(
id * 8 + num);
2095 public void SetDecal(
int x,
int z,
int id = 0,
int amount = 1,
bool refresh =
true)
2097 cells[
x,
z].
decal = (byte)((
id != 0 && amount != 0) ? ((uint)(
id * 8 + amount)) : 0u);
2154 for (
int i = 0; i <
Size; i++)
2156 for (
int j = 0; j <
Size; j++)
2166 for (
int i =
x - 2; i <
x + 3; i++)
2168 if (i < 0 || i >=
Size)
2172 for (
int j =
z - 2; j <
z + 3; j++)
2174 if (j >= 0 && j <
Size && (
x != i ||
z != j))
2193 cell.isSurrounded4d = cell2.HasFullBlock && cell3.HasFullBlock && cell4.HasFullBlock && cell5.
HasFullBlock;
2194 cell.isSurrounded = cell.isSurrounded4d && cell6.HasFullBlock && cell7.HasFullBlock && cell8.HasFullBlock && cell9.
HasFullBlock;
2202 if (blockType ==
null)
2226 if (!blockType.IsRamp)
2247 if (
left.HasRamp && !
left.HasStairs &&
left.blockDir == 3)
2252 if (
back.HasRamp && !
back.HasStairs &&
back.blockDir == 2)
2262 for (
int i = 0; i < tries; i++)
2264 point.x = center.x +
EClass.
rnd(radius * 2 + 1) - radius;
2265 point.z = center.z +
EClass.
rnd(radius * 2 + 1) - radius;
2272 Debug.Log(
"GetRandomPoint failed center:" + center?.ToString() +
" rad:" + radius);
2273 point.IsValid =
false;
2281 for (
int i = 0; i < 10000; i++)
2305 int num = ((
EClass.
rnd(2) == 0) ? 1 : (-1));
2306 int num2 = ((
EClass.
rnd(2) == 0) ? 1 : (-1));
2307 for (
int i = 0; i < 3; i++)
2309 point.x = center.x - num + i * num;
2310 for (
int j = 0; j < 3; j++)
2312 point.z = center.z - num2 + j * num2;
2324 List<Point> list =
new List<Point>();
2337 List<Point> list =
new List<Point>();
2350 List<Chara> list =
new List<Chara>();
2354 if (detail ==
null || detail.
charas.Count <= 0)
2358 foreach (
Chara chara
in item.detail.charas)
2368 Point to2 =
new Point((to.
x > center.
x) ? 1 : ((to.
x < center.
x) ? (-1) : 0), (to.
z > center.
z) ? 1 : ((to.
z < center.
z) ? (-1) : 0));
2370 List<Point> list =
new List<Point>();
2375 if ((Mathf.Abs(diff - angle2) < angle || Mathf.Abs(diff - angle2 + 360f) < angle || Mathf.Abs(360f - diff + angle2) < angle) &&
Los.
IsVisible(center, p) && !p.
IsBlocked)
2385 return Los.
ListVisible(center, to, radius,
null, returnOnBlocked);
2390 if (size >
Size / 2 + 1)
2392 size =
Size / 2 - 1;
2400 bounds.Size = b.
Size;
2405 for (
int i = 0; i <
Size; i++)
2407 for (
int j = 0; j <
Size; j++)
2409 action(
cells[i, j]);
2417 for (
int i = 0; i <
Size; i++)
2419 for (
int j = 0; j <
Size; j++)
2421 action(point.
Set(i, j));
2428 for (
int i = 0; i <
Size; i++)
2430 for (
int j = 0; j <
Size; j++)
2440 int num = (int)Mathf.Ceil(r);
2441 for (
int i = _x - num; i < _x + num + 1; i++)
2443 if (i < 0 || i >=
Size)
2447 for (
int j = _z - num; j < _z + num + 1; j++)
2449 if (j >= 0 && j <
Size && (
float)((i - _x) * (i - _x) + (j - _z) * (j - _z)) < r * r)
2461 for (
int i = _x - r; i < _x + r + 1; i++)
2463 if (i < 0 || i >=
Size)
2467 for (
int j = _z - r; j < _z + r + 1; j++)
2469 if (j >= 0 && j <
Size)
2481 int num2 = center.
z;
2483 for (
int i = num - 1; i < num + 2; i++)
2485 if (i < 0 || i >=
Size)
2489 for (
int j = num2 - 1; j < num2 + 2; j++)
2491 if (j >= 0 && j <
Size)
2504 for (num = 0; num <
Size; num++)
2507 for (num2 = 0; num2 <
Size; num2++)
2585 List<Chara> list =
new List<Chara>();
2598 List<Thing> list =
new List<Thing>();
2625 if (thing.
parent !=
null)
2629 thing.isMasked =
false;
2630 thing.isRoofItem =
false;
2661 if (chara.
uid == uid)
2685 if (thing.
uid == uid)
2697 if (thing.
trait is T)
2699 return thing.trait as T;
2724 if (area1 ==
null && area2 ==
null)
2728 Thing thing = Find(area1);
2729 if (thing ==
null && area2 !=
null)
2731 thing = Find(area2);
2754 if (area1 ==
null && area2 ==
null)
2763 if (enumerable.Count() > 0)
2765 thing = enumerable.RandomItem() as
Thing;
2768 if (thing ==
null && area2 !=
null)
2771 if (enumerable2.Count() > 0)
2773 thing = enumerable2.RandomItem() as
Thing;
2781 Thing result =
null;
2783 where a.pos.IsPublicSpace()
2785 if (enumerable.Count() > 0)
2787 result = enumerable.RandomItem() as
Thing;
2795 where a.type.IsPublicArea
2796 select a).RandomItem();
static bool not(DramaManager dm, Dictionary< string, string > line, params string[] parameters)
override bool IsRoofEditMode(Card c=null)
void Add(Act a, string s="")
Thing TryMakeRandomItem(int lv=-1, TryMakeRandomItemSource itemSource=TryMakeRandomItemSource.Default, Chara crafter=null)
void SetPlaceState(PlaceState newState, bool byPlayer=false)
ElementContainerCard elements
virtual void Die(Element e=null, Card origin=null, AttackSource attackSource=AttackSource.None, Chara originalTarget=null)
Card ChangeMaterial(int idNew, bool ignoreFixedMaterial=false)
Thing AddThing(string id, int lv=-1)
void Kick(Point p, bool ignoreSelf=false, bool checkWall=true)
void ForeachPoint(Action< Point, bool > action)
void ModCharge(int a, bool destroy=false)
bool HasEditorTag(EditorTag tag)
Thing Add(string id, int num=1, int lv=1)
SourceCategory.Row category
SourceBlock.Row sourceBlock
bool CanBuildRamp(int dir)
SourceFloor.Row sourceFloor
SourceMaterial.Row matObj
CellDetail GetOrCreateDetail()
SourceMaterial.Row matObj_fixed
void PickOrDrop(Point p, string idThing, int idMat=-1, int num=1, bool msg=true)
override bool IsPCFaction
Thing Pick(Thing t, bool msg=true, bool tryStack=true)
bool ignoreBackerDestoryFlag
Thing GetOrCreateDebugContainer()
static void MakeDish(Thing food, int lv, Chara crafter=null, int seed=-1)
static void RebuildCritter(Cell cell)
static int curve(long _a, int start, int step, int rate=75)
static SourceManager sources
static FactionBranch Branch
static Effect Get(Effect original)
void Play(float delay, Point from, float fixY=0f, Point to=null, Sprite sprite=null)
Element ModBase(int ele, int v)
static Element Create(int id, int v=0)
static FowProfile Load(string id)
static void SaveFile(string path, object obj)
bool disableUsermapBenefit
static void Load(string id, bool cloud)
bool Save(bool isAutoSave=false, bool silent=false)
void PopMineObj(Chara c=null)
LogicalPoint GetOrCreate(Point point)
static List< Point > ListVisible(Point p1, Point p2, int radius, Action< Point, bool > _onVisit=null, bool returnOnBlocked=true)
static bool IsVisible(Point p1, Point p2, Action< Point, bool > _onVisit=null)
static SourceMaterial.Row GetRandomMaterialFromCategory(int lv, string cat, SourceMaterial.Row fallback)
void SetBounds(int _x, int _z, int _maxX, int _maxZ)
Point GetSurface(int x, int z, bool walkable=true)
void ForeachCell(Action< Cell > action)
new void ForeachXYZ(Action< int, int > action)
new void ForeachCell(Action< Cell > action)
void TrySmoothPick(Point p, Thing t, Chara c)
Thing FindThing(Type type, BaseArea area1, BaseArea area2=null)
void RefreshNeighborTiles(int x, int z)
Thing FindThing(Func< Thing, bool > func)
PlantData TryGetPlant(Point p)
void ForeachSphere(int _x, int _z, float r, Action< Point > action)
Dictionary< int, int > gatherCounts
void Shift(Vector2Int offset)
Thing FindThing(Type type, Chara c=null)
void ExportMetaData(string _path, string id, PartialMap partial=null)
Chara FindChara(string id)
IEnumerable< Card > Cards
void RefreshSingleTile(int x, int z)
Point GetRandomPoint(Point center, int radius, int tries=100, bool mustBeWalkable=true, bool requireLos=true)
void RemovePlant(Point pos)
BaseArea FindPublicArea()
static void UpdateMetaData(string pathZip, PartialMap partial=null)
void DestroyObj(Point point)
void SetBridge(int x, int z, int height=0, int idMat=0, int idBridge=0, int dir=0, byte idPillar=0)
void Save(string path, ZoneExportData export=null, PartialMap partial=null)
void TrySmoothPick(Cell cell, Thing t, Chara c)
void AddCardOnActivate(Card c)
Dictionary< int, CellEffect > cellEffects
void RefreshFOV(int x, int z, int radius=6, bool recalculate=false)
List< Point > ListPointsInArc(Point center, Point to, int radius, float angle)
void MoveCard(Point p, Card t)
Thing FindThing(string workTag, Chara c)
void AddBackerTree(bool draw)
void Reveal(Point center, int power=100)
void SetBlockDir(int x, int z, int dir)
void MineObj(Point point, Task task=null, Chara c=null)
void SetLiquid(int x, int z, CellEffect effect=null)
void OnCardRemovedFromZone(Card t)
Point GetNearbyResourcePoint(Point center)
void SetDecal(int x, int z, int id=0, int amount=1, bool refresh=true)
PlantData TryGetPlant(Cell c)
int CountChara(Faction faction)
void MineBlock(Point point, bool recoverBlock=false, Chara c=null, bool mineObj=true)
List< Chara > ListCharasInCircle(Point center, float radius, bool los=true)
void SetFloor(int x, int z, int idMat, int idFloor, int dir)
void OnDeserialized(StreamingContext context)
void SetFoormark(Point pos, int id, int angle, int offset=0)
byte[] TryLoadFile(string path, string s, int size)
void _ValidateInstalled(int x, int y)
int GetRampDir(int x, int z, TileType blockType=null)
List< Thing > ListThing< T >()
Dictionary< int, int > backerObjs
void ModFire(int x, int z, int amount)
void SetDeco(int x, int z, int idMat, int idDeco)
void _AddCard(int x, int z, Card t, bool onAddToZone)
void Burn(int x, int z, bool instant=false)
void MineObjSound(Point point)
void OnSerializing(StreamingContext context)
void SetSeen(int x, int z, bool seen=true, bool refresh=true)
void ModLiquid(int x, int z, int amount)
void MineFloor(Point point, Chara c=null, bool recoverBlock=false, bool removePlatform=true)
void SetFloor(int x, int z, int idMat=0, int idFloor=0)
void SetBounds(MapBounds b)
void TryShatter(Point pos, int ele, int power, Card CC=null)
void SetBlock(int x, int z, int idMat=0, int idBlock=0)
PlantData AddPlant(Point pos, Thing seed)
void ForeachSquare(int _x, int _z, int r, Action< Point > action)
void TryRemoveRoom(int x, int z)
List< Footmark > footmarks
void SetRoofBlock(int x, int z, int idMat, int idBlock, int dir, int height)
new Point GetRandomEdge(int r=3)
void OnImport(ZoneExportData data)
List< Point > ListPointsInSquare(Point center, int radius, bool mustBeWalkable=true, bool los=true)
new void ForeachPoint(Action< Point > action)
void TryAddRoom(int x, int z)
void DestroyBlock(int x, int z)
void QuickRefreshTile(int x, int z)
List< Chara > serializedCharas
static bool isDirtySunMap
static MapMetaData GetMetaData(string pathZip)
virtual void OnSerializing()
void RemoveLonelyRamps(Cell cell)
void SetBlock(int x, int z, int idMat, int idBlock, int dir)
void SetLiquid(int x, int z, int id, int value=1)
void ValidateInstalled(Point p)
void DropBlockComponent(Point point, TileRow r, SourceMaterial.Row mat, bool recoverBlock, bool isPlatform=false, Chara c=null)
MapExportSetting exportSetting
void SetEffect(int x, int z, CellEffect effect=null)
void OnCardAddedToZone(Card t, int x, int z)
Thing FindThing(string workTag, BaseArea area1=null, BaseArea area2=null)
void ForeachNeighbor(Point center, Action< Point > action)
void OnSetBlockOrDoor(int x, int z)
void Load(string path, bool import=false, PartialMap partial=null)
CellEffectManager effectManager
List< Point > ListPointsInLine(Point center, Point to, int radius, bool returnOnBlocked=true)
Cell GetDependedRamp(Cell cell)
void MineRamp(Point point, int ramp, bool recoverBlock=false)
List< Point > ListPointsInCircle(Point center, float radius, bool mustBeWalkable=true, bool los=true)
void CreateNew(int size, bool setReference=true)
void AddDecal(int x, int z, int id, int amount=1, bool refresh=true)
void RevealAll(bool reveal=true)
IO.Compression compression
void SetObj(int x, int z, int idMat, int idObj, int value, int dir, bool ignoreRandomMat=false)
Dictionary< int, PlantData > plants
List< Chara > ListChara(Faction faction)
List< TransAnime > pointAnimes
void RefreshShadow(int x, int z)
void ApplyBackerObj(Point p, int id=-1)
void SetObj(int x, int z, int id=0, int value=1, int dir=0)
SourceBacker.Row GetBackerObj(Point p)
static HashSet< int > sunMap
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
static PathManager Instance
HashSet< int > doneBackers
void ClearMapHighlights()
SourceMaterial.Row matBlock
SourceMaterial.Row matFloor
List< Card > ListCards(bool includeMasked=false)
Point Set(int _x, int _z)
SourceMaterial.Row matBridge
void SetFloor(int idMat=0, int idFloor=0)
SoundSource PlaySound(string id, bool synced=true, float v=1f, bool spatial=true)
bool Equals(int _x, int _z)
SourceFloor.Row sourceFloor
void SetBlock(int idMat=0, int idBlock=0)
bool HasRoomOrArea(BaseArea a)
Point Clamp(bool useBounds=false)
float GetAngle2(Point to)
void Animate(AnimeID id, bool animeBlock=false)
SourceFloor.Row sourceBridge
void OnCardAddedToZone(Card c)
Dictionary< string, PropSet > workMap
static void SetSeed(int a=-1)
static List< RecipeSource > list
static RecipeSource Get(string id)
static SceneProfile Load(string id)
void AddActorEx(Card c, Action< ActorEx > onBeforeSetOwner=null)
void Restore(Map map, Map orgMap, bool addToZone, PartialMap partial=null)
void AddBlood(Point p, int a=1)
string GetSoundDead(RenderRow c=null)
bool OnMineWreck(Point point)
static Thing CreateRawMaterial(SourceMaterial.Row m)
static Thing CreateBlock(int id, int idMat)
static Thing CreateFloor(int id, int idMat, bool platform=false)
static Thing Create(string id, int idMat=-1, int lv=-1)
static Thing MakeSeed(string idSource)
virtual void OnAddedToZone()
virtual bool CanCopyInBlueprint
virtual void OnRemovedFromZone()
virtual List< Point > ListPoints(Point center=null, bool onlyPassable=true, bool allowChara=true)
virtual bool CanOnlyCarry
static void Say(string text, FontColor fontColor=FontColor.Default, Sprite sprite=null)
SerializedCards serializedCards
virtual bool DisableRooms
virtual bool IsUnderwater
Card AddCard(Card t, Point point)
void Init(IPathfindGrid _grid, WeightCell[,] _weightMap, int size)