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];
414 for (
int i = num; i < num + num3; i++)
416 for (
int j = num2; j < num2 + num4; j++)
419 array[num6] = cell.
objVal;
421 array2[num6] = cell.
_block;
423 array4[num6] = cell.
_floor;
424 array6[num6] = cell.
obj;
425 array7[num6] = cell.
objMat;
426 array8[num6] = cell.
decal;
427 array9[num6] = cell.
_dirs;
428 array12[num6] = cell.
height;
436 array10[num6] = array10[num6].SetBit(1, cell.
isSeen);
437 array10[num6] = array10[num6].SetBit(2, cell.
isHarvested);
438 array10[num6] = array10[num6].SetBit(3, cell.
impassable);
439 array10[num6] = array10[num6].SetBit(4, cell.
isModified);
440 array10[num6] = array10[num6].SetBit(5, cell.
isClearSnow);
441 array10[num6] = array10[num6].SetBit(6, cell.
isForceFloat);
443 array11[num6] = array11[num6].SetBit(0, cell.
isWatered);
444 array11[num6] = array11[num6].SetBit(1, cell.
isObjDyed);
445 array11[num6] = array11[num6].SetBit(2, cell.
crossWall);
454 Write(path +
"objVals", array);
455 Write(path +
"blocks", array2);
456 Write(path +
"blockMats", array3);
457 Write(path +
"floors", array4);
458 Write(path +
"floorMats", array5);
459 Write(path +
"objs", array6);
460 Write(path +
"objMats", array7);
461 Write(path +
"decal", array8);
462 Write(path +
"flags", array10);
463 Write(path +
"flags2", array11);
464 Write(path +
"dirs", array9);
465 Write(path +
"heights", array12);
466 Write(path +
"bridges", array13);
467 Write(path +
"bridgeMats", array14);
468 Write(path +
"bridgeHeights", array15);
469 Write(path +
"bridgePillars", array16);
470 Write(path +
"roofBlocks", array18);
471 Write(path +
"roofBlockMats", array19);
472 Write(path +
"roofBlockDirs", array17);
487 export.serializedCards.cards.Clear();
497 export.serializedCards.Add(chara2);
502 export.serializedCards.Add(chara2);
509 export.serializedCards.Add(thing);
519 export.serializedCards.Add(thing2);
523 List<Thing> list =
things;
524 things =
new List<Thing>();
529 void Write(
string _path,
byte[] bytes)
537 byte[] array = IO.ReadLZ4(path + s, size,
compression);
540 Debug.Log(
"Couldn't load:" + s);
541 return new byte[size];
560 int size = num * num2;
567 byte[] bytes2 = TryLoad(
"objVals");
568 byte[] bytes3 = TryLoad(
"blockMats");
569 byte[] bytes4 = TryLoad(
"blocks");
570 byte[] bytes5 = TryLoad(
"floorMats");
571 byte[] bytes6 = TryLoad(
"floors");
572 byte[] bytes7 = TryLoad(
"objs");
573 byte[] bytes8 = TryLoad(
"objMats");
574 byte[] bytes9 = TryLoad(
"decal");
575 byte[] bytes10 = TryLoad(
"dirs");
576 byte[] bytes11 = TryLoad(
"flags");
577 byte[] bytes12 = TryLoad(
"flags2");
578 byte[] bytes13 = TryLoad(
"heights");
579 byte[] bytes14 = TryLoad(
"bridges");
580 byte[] bytes15 = TryLoad(
"bridgeMats");
581 byte[] bytes16 = TryLoad(
"bridgeHeights");
582 byte[] bytes17 = TryLoad(
"bridgePillars");
583 byte[] bytes18 = TryLoad(
"roofBlocks");
584 byte[] bytes19 = TryLoad(
"roofBlockMats");
585 byte[] bytes20 = TryLoad(
"roofBlockDirs");
586 if (bytes17.Length < size)
588 bytes17 =
new byte[size];
590 if (bytes2.Length < size)
592 bytes2 =
new byte[size];
594 if (bytes12.Length < size)
596 bytes12 =
new byte[size];
598 Validate(ref bytes2,
"objVals");
599 Validate(ref bytes3,
"blockMats");
600 Validate(ref bytes4,
"blocks");
601 Validate(ref bytes5,
"floorMats");
602 Validate(ref bytes6,
"floors");
603 Validate(ref bytes7,
"objs");
604 Validate(ref bytes8,
"objMats");
605 Validate(ref bytes9,
"decal");
606 Validate(ref bytes10,
"dirs");
607 Validate(ref bytes11,
"flags");
608 Validate(ref bytes12,
"flags2");
609 Validate(ref bytes13,
"heights");
610 Validate(ref bytes14,
"bridges");
611 Validate(ref bytes15,
"bridgeMats");
612 Validate(ref bytes16,
"bridgeHeights");
613 Validate(ref bytes17,
"bridgePillars");
614 Validate(ref bytes18,
"roofBlocks");
615 Validate(ref bytes19,
"roofBlockMats");
616 Validate(ref bytes20,
"roofBlockDirs");
620 for (
int i = 0; i < num; i++)
622 for (
int j = 0; j < num2; j++)
628 objVal = bytes2[num3],
629 _blockMat = bytes3[num3],
630 _block = bytes4[num3],
631 _floorMat = bytes5[num3],
632 _floor = bytes6[num3],
634 objMat = bytes8[num3],
635 decal = bytes9[num3],
636 _dirs = bytes10[num3],
637 height = bytes13[num3],
638 _bridge = bytes14[num3],
639 _bridgeMat = bytes15[num3],
640 bridgeHeight = bytes16[num3],
641 bridgePillar = bytes17[num3],
642 _roofBlock = bytes18[num3],
643 _roofBlockMat = bytes19[num3],
644 _roofBlockDir = bytes20[num3],
645 isSeen = bytes11[num3].GetBit(1),
646 isHarvested = bytes11[num3].GetBit(2),
647 impassable = bytes11[num3].GetBit(3),
648 isModified = bytes11[num3].GetBit(4),
649 isClearSnow = bytes11[num3].GetBit(5),
650 isForceFloat = bytes11[num3].GetBit(6),
651 isToggleWallPillar = bytes11[num3].GetBit(7),
652 isWatered = bytes12[num3].GetBit(0),
653 isObjDyed = bytes12[num3].GetBit(1),
654 crossWall = bytes12[num3].GetBit(2)
676 foreach (KeyValuePair<int, CellEffect> cellEffect
in cellEffects)
678 int key = cellEffect.Key;
679 int num4 = key %
Size;
680 int num5 = key /
Size;
682 if (cellEffect.Value.IsFire)
689 byte[] TryLoad(
string s)
693 void Validate(ref
byte[] bytes,
string id)
695 if (bytes.Length < size)
697 Debug.LogError(
"expection: size invalid:" +
id +
" " + bytes.Length +
"/" + size);
698 bytes =
new byte[size];
734 custom.id = (mapMetaData.id = id);
735 IO.SaveFile(_path +
"meta", mapMetaData);
742 using ZipFile zipFile = ZipFile.Read(pathZip);
743 ZipEntry zipEntry = zipFile[
"meta"];
744 if (zipEntry !=
null)
746 using (MemoryStream stream =
new MemoryStream())
748 zipEntry.Extract(stream);
750 mapMetaData.path = pathZip;
755 catch (Exception message)
757 if (Application.isEditor)
767 IO.CreateTempDirectory();
768 ZipFile zipFile = ZipFile.Read(pathZip);
769 zipFile.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently;
770 zipFile.ExtractAll(IO.TempPath);
773 using (zipFile =
new ZipFile())
775 zipFile.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently;
776 zipFile.AddDirectory(IO.TempPath);
777 zipFile.Save(pathZip);
780 IO.DeleteTempDirectory();
892 public void SetSeen(
int x,
int z,
bool seen =
true,
bool refresh =
true)
894 if (
cells[
x,
z].isSeen != seen)
907 for (
int i = 0; i <
Size; i++)
909 for (
int j = 0; j <
Size; j++)
924 EClass._map.SetSeen(p.x, p.z);
929 public void RefreshFOV(
int x,
int z,
int radius = 6,
bool recalculate =
false)
938 item.RecalculateFOV();
942 foreach (
Card item2
in list)
953 item.RecalculateFOV();
957 public void SetFloor(
int x,
int z,
int idMat = 0,
int idFloor = 0)
962 public void SetFloor(
int x,
int z,
int idMat,
int idFloor,
int dir)
965 cell._floorMat = (byte)idMat;
966 cell._floor = (byte)idFloor;
972 public void SetBridge(
int x,
int z,
int height = 0,
int idMat = 0,
int idBridge = 0,
int dir = 0)
975 cell.bridgeHeight = (byte)height;
976 cell._bridgeMat = (byte)idMat;
977 cell._bridge = (byte)idBridge;
978 cell.bridgePillar = 0;
980 if (cell.
room !=
null)
987 public void SetRoofBlock(
int x,
int z,
int idMat,
int idBlock,
int dir,
int height)
990 cell._roofBlockMat = (byte)idMat;
991 cell._roofBlock = (byte)idBlock;
992 cell._roofBlockDir = (byte)(dir + height * 4);
996 public void SetBlock(
int x,
int z,
int idMat = 0,
int idBlock = 0)
1001 public void SetBlock(
int x,
int z,
int idMat,
int idBlock,
int dir)
1005 cell._blockMat = (byte)idMat;
1006 cell._block = (byte)idBlock;
1007 cell.blockDir = dir;
1012 cell.isToggleWallPillar =
false;
1013 if (cell.
room !=
null)
1044 if (
x > 0 &&
z <
Size - 1)
1066 if (
x > 0 &&
z <
Size - 1)
1074 if (!
cells[
x,
z].HasFloodBlock)
1090 FloodSpiller floodSpiller =
flood;
1091 IFloodCell[,] array =
cells;
1092 FloodSpiller.Result result = floodSpiller.SpillFlood(array,
x,
z);
1093 if (!result.IsValid)
1098 foreach (IFloodCell
item in result.visited)
1114 foreach (IFloodCell item2
in result.visited)
1140 foreach (IFloodCell item3
in result.visited)
1145 room.AddPoint(
new Point(b, b2));
1149 room.AddPoint(
new Point(b, b2 - 1));
1154 room.AddPoint(
new Point(b + 1, b2));
1159 room.AddPoint(
new Point(b + 1, b2 - 1));
1177 if (cell.
effect ==
null && amount > 0)
1203 List<Card> list =
new List<Card>();
1204 bool fire = ele == 910;
1205 bool cold = ele == 911;
1220 Card rootCard =
item.GetRootCard();
1230 if (
item.isThing &&
item.things.Count == 0)
1236 if (ele == 911 &&
item.HasElement(1236))
1244 Card rootCard2 =
item.GetRootCard();
1247 Msg.
Say((
item.isChara ?
"blanketInv_" :
"blanketGround_") + element.source.alias, thing,
item);
1259 foreach (
Thing item2
in item.things.List((
Thing a) => a.things.Count == 0))
1271 foreach (
Card item3
in list)
1278 if (item3.IsEquipmentOrRangedOrAmmo && (
EClass.
rnd(4) != 0 || ((item3.IsRangedWeapon || item3.Thing.isEquipped) && rootCard3.
IsPCFaction &&
EClass.
rnd(4) != 0)))
1285 if (item3.isFireproof || (!item3.category.IsChildOf(
"book") &&
EClass.
rnd(2) == 0))
1291 if (!item3.category.IsChildOf(
"drink") &&
EClass.
rnd(5) == 0)
1301 bool flag = CanCook(item3);
1310 if (!(item4.
row is
SourceThing.
Row { isOrigin: false } row) || row.components.IsEmpty() || (row.components.Length >= 3 && !row.components[2].StartsWith(
'+')) || !row.Category.IsChildOf(
"meal"))
1314 if (!row.factory.IsEmpty())
1316 switch (row.factory[0])
1325 if (row.components[0].Split(
'|').Contains(item3.id) || row.components[0].Split(
'|').Contains(item3.sourceCard._origin))
1330 if (list3.Count > 0)
1332 text = list3.RandomItem().
id;
1340 if (flag && !text.IsEmpty())
1344 List<Thing> list4 =
new List<Thing>();
1351 Msg.
Say(((rootCard3 == item3) ?
"cook_groundItem" :
"cook_invItem") + (fire ?
"" :
"_cold"), thing2, rootCard3, thing3.
Name);
1353 if (rootCard3 == item3)
1359 rootCard3.
Chara.
Pick(thing3, msg:
false);
1369 int num2 =
EClass.
rnd(item3.Num) / 2 + 1;
1370 if (item3.Num > num2)
1375 Msg.
Say((rootCard3 == item3) ?
"damage_groundItem" :
"damage_invItem", thing4, rootCard3);
1399 bool CanCook(
Card c)
1401 if ((fire || cold) && c.
IsFood)
1403 return c.
category.IsChildOf(
"foodstuff");
1409 public void Burn(
int x,
int z,
bool instant =
false)
1439 if (cell.
room !=
null)
1456 foreach (
Card item in sharedPoint.ListCards())
1467 item.DamageHP(30, 910);
1482 cell.effect = effect;
1518 cell.effect.amount += amount;
1535 public void SetObj(
int x,
int z,
int id = 0,
int value = 1,
int dir = 0)
1540 public void SetObj(
int x,
int z,
int idMat,
int idObj,
int value,
int dir,
bool ignoreRandomMat =
false)
1543 if (cell.
sourceObj.id == 118 || idObj == 118)
1545 EClass._zone.dirtyElectricity =
true;
1547 cell.obj = (byte)idObj;
1548 cell.objVal = (byte)value;
1549 cell.objMat = (byte)idMat;
1551 cell.isHarvested =
false;
1552 cell.isObjDyed =
false;
1554 if (!ignoreRandomMat && !sourceObj.
matCategory.IsEmpty())
1557 if (sourceObj.
tag.Contains(
"spot"))
1579 int num = ((!draw) ? 1 : 2);
1607 bool flag = p.sourceObj.id == 82;
1618 p.cell.objDir = row.
skin;
1646 if (recipeSource ==
null)
1651 if (iDIngredient ==
null)
1676 byte b = (flag ? point.cell._roofBlock : point.
cell.
_block);
1683 bool flag2 = c ==
null || c.IsAgent || c.IsPCFactionOrMinion;
1690 point.cell._roofBlock = 0;
1700 if (flag2 && point.
sourceObj.tileType.IsBlockMount && mineObj)
1731 point.cell.isModified =
true;
1848 if (c ==
null && task !=
null)
1852 bool num = c ==
null || c.IsAgent || c.IsPCFactionOrMinion;
1857 if (task is
TaskHarvest { IsReapSeed: not
false })
1862 if (soilCost > maxSoil)
1864 num2 -=
EClass.
rnd(2 + (soilCost - maxSoil) / 10);
1877 cell.isHarvested =
true;
1887 if (cell.
HasBlock && (sourceObj.
id == 18 || sourceObj.
id == 19))
1889 MineBlock(point, recoverBlock:
false, c, mineObj:
false);
1900 switch (sourceObj.
alias)
1910 string[] array = sourceObj.
components[num3].Split(
'/');
1912 if (array.Length > 1)
1920 cell.gatherCount = 0;
1991 if (!
item.isThing || !
item.trait.CanBeDestroyed || !
item.IsInstalled)
1995 HitResult hitResult =
item.TileType._HitTest(point,
item.Thing, canIgnore:
false);
1996 if (
item.Thing.stackOrder != detail.things.IndexOf(
item.Thing) || (hitResult !=
HitResult.Valid && hitResult !=
HitResult.Warning))
2012 for (
int i = 0; i < 4; i++)
2015 if (dependedRamp !=
null)
2029 public void AddDecal(
int x,
int z,
int id,
int amount = 1,
bool refresh =
true)
2031 if (
x < 0 || z < 0 || x >=
Size ||
z >=
Size)
2038 if (cell.
decal / 8 !=
id && cell.
decal % 8 == 0)
2042 int num = Mathf.Clamp(((cell.
decal / 8 ==
id) ? (cell.
decal % 8) : 0) + amount, 0, 7);
2043 cell.decal = (byte)(
id * 8 + num);
2051 public void SetDecal(
int x,
int z,
int id = 0,
int amount = 1,
bool refresh =
true)
2053 cells[
x,
z].
decal = (byte)((
id != 0 && amount != 0) ? ((uint)(
id * 8 + amount)) : 0u);
2110 for (
int i = 0; i <
Size; i++)
2112 for (
int j = 0; j <
Size; j++)
2122 for (
int i =
x - 2; i <
x + 3; i++)
2124 if (i < 0 || i >=
Size)
2128 for (
int j =
z - 2; j <
z + 3; j++)
2130 if (j >= 0 && j <
Size && (
x != i ||
z != j))
2149 cell.isSurrounded4d = cell2.HasFullBlock && cell3.HasFullBlock && cell4.HasFullBlock && cell5.
HasFullBlock;
2150 cell.isSurrounded = cell.isSurrounded4d && cell6.HasFullBlock && cell7.HasFullBlock && cell8.HasFullBlock && cell9.
HasFullBlock;
2158 if (blockType ==
null)
2182 if (!blockType.IsRamp)
2203 if (
left.HasRamp && !
left.HasStairs &&
left.blockDir == 3)
2208 if (
back.HasRamp && !
back.HasStairs &&
back.blockDir == 2)
2218 for (
int i = 0; i < tries; i++)
2220 point.x = center.x +
EClass.
rnd(radius * 2 + 1) - radius;
2221 point.z = center.z +
EClass.
rnd(radius * 2 + 1) - radius;
2228 Debug.Log(
"GetRandomPoint failed center:" + center?.ToString() +
" rad:" + radius);
2229 point.IsValid =
false;
2237 for (
int i = 0; i < 10000; i++)
2261 int num = ((
EClass.
rnd(2) == 0) ? 1 : (-1));
2262 int num2 = ((
EClass.
rnd(2) == 0) ? 1 : (-1));
2263 for (
int i = 0; i < 3; i++)
2265 point.x = center.x - num + i * num;
2266 for (
int j = 0; j < 3; j++)
2268 point.z = center.z - num2 + j * num2;
2280 List<Point> list =
new List<Point>();
2293 List<Chara> list =
new List<Chara>();
2297 if (detail ==
null || detail.
charas.Count <= 0)
2301 foreach (
Chara chara
in item.detail.charas)
2311 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));
2313 List<Point> list =
new List<Point>();
2318 if ((Mathf.Abs(diff - angle2) < angle || Mathf.Abs(diff - angle2 + 360f) < angle || Mathf.Abs(360f - diff + angle2) < angle) &&
Los.
IsVisible(center, p) && !p.
IsBlocked)
2333 if (size >
Size / 2 + 1)
2335 size =
Size / 2 - 1;
2343 bounds.Size = b.
Size;
2348 for (
int i = 0; i <
Size; i++)
2350 for (
int j = 0; j <
Size; j++)
2352 action(
cells[i, j]);
2360 for (
int i = 0; i <
Size; i++)
2362 for (
int j = 0; j <
Size; j++)
2364 action(point.
Set(i, j));
2371 for (
int i = 0; i <
Size; i++)
2373 for (
int j = 0; j <
Size; j++)
2383 int num = (int)Mathf.Ceil(r);
2384 for (
int i = _x - num; i < _x + num + 1; i++)
2386 if (i < 0 || i >=
Size)
2390 for (
int j = _z - num; j < _z + num + 1; j++)
2392 if (j >= 0 && j <
Size && (
float)((i - _x) * (i - _x) + (j - _z) * (j - _z)) < r * r)
2404 int num2 = center.
z;
2406 for (
int i = num - 1; i < num + 2; i++)
2408 if (i < 0 || i >=
Size)
2412 for (
int j = num2 - 1; j < num2 + 2; j++)
2414 if (j >= 0 && j <
Size)
2427 for (num = 0; num <
Size; num++)
2430 for (num2 = 0; num2 <
Size; num2++)
2508 List<Chara> list =
new List<Chara>();
2521 List<Thing> list =
new List<Thing>();
2548 if (thing.
parent !=
null)
2552 thing.isMasked =
false;
2553 thing.isRoofItem =
false;
2584 if (chara.
uid == uid)
2608 if (thing.
uid == uid)
2620 if (thing.
trait is T)
2622 return thing.trait as T;
2647 if (area1 ==
null && area2 ==
null)
2651 Thing thing = Find(area1);
2652 if (thing ==
null && area2 !=
null)
2654 thing = Find(area2);
2677 if (area1 ==
null && area2 ==
null)
2686 if (enumerable.Count() > 0)
2688 thing = enumerable.RandomItem() as
Thing;
2691 if (thing ==
null && area2 !=
null)
2694 if (enumerable2.Count() > 0)
2696 thing = enumerable2.RandomItem() as
Thing;
2704 Thing result =
null;
2706 where a.pos.IsPublicSpace()
2708 if (enumerable.Count() > 0)
2710 result = enumerable.RandomItem() as
Thing;
2718 where a.type.IsPublicArea
2719 select a).RandomItem();
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 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
void Kick(Point p, bool ignoreSelf=false)
Thing Pick(Thing t, bool msg=true, bool tryStack=true)
bool ignoreBackerDestoryFlag
Thing GetOrCreateDebugContainer()
static void MakeDish(Thing food, int lv, Chara crafter=null)
static void RebuildCritter(Cell cell)
static int curve(int 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)
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)
void SetBridge(int x, int z, int height=0, int idMat=0, int idBridge=0, int dir=0)
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 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 TryShatter(Point pos, int ele, int power)
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
List< Point > ListPointsInLine(Point center, Point to, int radius)
void ModFire(int x, int z, int amount)
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 SetBlock(int x, int z, int idMat=0, int idBlock=0)
PlantData AddPlant(Point pos, Thing seed)
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)
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
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(SourceObj.Row obj, PlantData plant=null)
virtual List< Point > ListPoints(Point center=null, bool onlyPassable=true)
virtual void OnAddedToZone()
virtual bool CanCopyInBlueprint
virtual void OnRemovedFromZone()
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)