2using System.Collections.Generic;
45 private static List<Card>
listCard =
new List<Card>();
47 private static List<Chara>
listChara =
new List<Chara>();
79 public int eloX => EClass.scene.elomap.minX +
x;
81 public int eloY => EClass.scene.elomap.minY +
z;
99 x = ((!value) ? (-999) : 0);
121 return z <= map.Size - 1;
211 return cell.detail.designation is
TaskBuild;
242 if (cellDetail ==
null)
246 return cellDetail.charas.Count > 0;
255 if (cellDetail ==
null)
259 return cellDetail.things.Count > 0;
269 return detail.charas.Count > 1;
292 if (cellDetail ==
null || cellDetail.
charas.Count <= 0)
305 if (cellDetail ==
null || cellDetail.
things.Count <= 0)
318 if (cellDetail ==
null || cellDetail.
things.Count <= 0)
382 return IsInSpot<TraitGeyser>();
397 public bool Within(
int _x,
int _z,
int _w,
int _h)
399 if (
x >= _x &&
z >= _z &&
x < _x + _w)
425 return cell.room == a;
498 T val = Activator.CreateInstance<T>();
526 return "(" +
x +
" / " +
z +
")";
531 return new Point(lhs.
x + rhs.
x, lhs.
z + rhs.
z);
534 public void Set(Vector3 v)
540 x = (num2 - num) / 2 * -1;
570 vCache.z = 1000f + vCache.x * _screen.tileWeight.x + vCache.y * _screen.tileWeight.z + (float)(
int)b *
_screen.
tileMap.
_heightMod.z;
579 vCache.z = 1000f + vCache.x * _screen.tileWeight.x + vCache.y * _screen.tileWeight.z + (float)(
int)b *
_screen.
tileMap.
_heightMod.z;
602 vCache.x += EClass.screen.tileWorldSize.x * 0.5f;
603 vCache.y += EClass.screen.tileWorldSize.y * 0.75f;
609 return Quaternion.Euler(0f, 0f,
GetAngle(to));
615 return Mathf.Atan2(vector.y, vector.x) * 57.29578f;
621 return Mathf.Atan2(to.
z -
z, num) * 57.29578f;
624 public Point GetNearestPoint(
bool allowBlock =
false,
bool allowChara =
true,
bool allowInstalled =
true,
bool ignoreCenter =
false,
int minRadius = 0)
638 for (
int i = 0; i < 30; i++)
640 for (
int j = 0; j < r; j++)
648 for (
int k = 0; k < r; k++)
657 for (
int l = 0; l < r; l++)
665 for (
int m = 0; m < r; m++)
680 if (minRadius > r / 2)
696 public bool ForeachNearestPoint(Func<Point, bool> endFunc,
bool allowBlock =
false,
bool allowChara =
true,
bool allowInstalled =
true,
bool ignoreCenter =
false,
int maxRange = 30)
702 if (
IsValid(num2, num3) && endFunc(p))
706 if (
IsValid(num2, num3 + 1) && endFunc(p))
710 for (
int i = 0; i < maxRange; i++)
712 for (
int j = 0; j < num; j++)
715 if (
IsValid(num2, num3) && endFunc(p))
720 for (
int k = 0; k < num; k++)
723 if (
IsValid(num2, num3) && endFunc(p))
729 for (
int l = 0; l < num; l++)
732 if (
IsValid(num2, num3) && endFunc(p))
737 for (
int m = 0; m < num; m++)
740 if (
IsValid(num2, num3) && endFunc(p))
747 Debug.Log(
"ForeachNearestPoint Fail:" +
this);
766 int num = ((
EClass.
rnd(2) == 0) ? 1 : (-1));
774 public Point GetRandomPoint(
int radius,
bool requireLos =
true,
bool allowChara =
true,
bool allowBlocked =
false,
int tries = 100)
777 for (
int i = 0; i < tries; i++)
788 public Point GetRandomPointInRadius(
int minRadius,
int maxRadius,
bool requireLos =
true,
bool allowChara =
true,
bool allowBlocked =
false,
int tries = 2000)
791 for (
int i = 0; i < tries; i++)
797 if (num >= minRadius && num <= maxRadius && (!requireLos ||
Los.
IsVisible(
this, point)))
809 int num = dest.x - point.
x;
810 int num2 = dest.z - point.
z;
811 if (Mathf.Abs(num) > 1 || Mathf.Abs(num2) > 1)
813 int num3 = Mathf.Max(Mathf.Abs(num), Mathf.Abs(num2));
814 point.x += num / num3;
815 point.z += num2 / num3;
828 if (talkIf(
item) && !
item.renderer.IsTalking())
837 List<Chara> list =
new List<Chara>();
840 List<Chara> list2 =
item.detail?.charas;
841 if (list2 ==
null || list2.Count == 0)
845 foreach (
Chara item2
in list2)
882 if (funcWitness ==
null)
888 if (funcWitness(
item))
892 target?.DoHostileAction(criminal);
895 item.DoHostileAction(criminal);
909 caller.
Talk(
"callGuards");
914 Chara chara = list.First();
915 caller.
Say(
"calledGuard", caller);
924 public void SetBlock(
int idMat = 0,
int idBlock = 0)
929 public void SetFloor(
int idMat = 0,
int idFloor = 0)
934 public void SetObj(
int id = 0,
int value = 1,
int dir = 0)
939 public void ModFire(
int value,
bool extinguish =
false)
1108 if (
item.isChara ||
item.trait.CanBeAttacked)
1137 if (thing.
trait is T)
1139 return thing.trait as T;
1219 listChara.Add(chara);
1231 if (func(chara) && chara.
Dist(cc) < dist && (!onlyVisible ||
Los.
IsVisible(chara, cc)))
1233 listChara.Add(chara);
1239 public T GetInstalled<T>() where T :
Trait
1247 return thing.trait as T;
1259 public SoundSource
PlaySound(
string id,
bool synced =
true,
float v = 1f,
bool spatial =
true)
1261 Vector3 vector =
default(Vector3);
1268 vector = (EClass._zone.IsRegion ? PositionTopdown() : Position());
1284 map.RefreshNeighborTiles(x, z);
1289 map.RefreshSingleTile(x, z);
1294 if (FirstThing ==
null)
1314 CellDetail orCreateDetail = cell.GetOrCreateDetail();
1315 if (orCreateDetail.
anime ==
null)
1321 animeBlock = animeBlock
1326 transAnime.drawBlock =
true;
1333 if (detail ==
null || detail.anime ==
null)
1337 p.x += detail.anime.
v.x;
1338 p.y += detail.anime.v.y;
1339 p.z += detail.anime.v.z;
1340 p.v.x += detail.anime.v.x;
1341 p.v.y += detail.anime.v.y;
1342 p.v.z += detail.anime.v.z;
1348 if (detail ==
null || detail.anime ==
null)
1352 p.x += detail.anime.v.x;
1353 p.y += detail.anime.v.y;
1354 p.z += detail.anime.v.z;
1360 List<IInspect> list =
new List<IInspect>();
1362 if (cellDetail !=
null)
1393 for (
int i = 0; i < h; i++)
1395 for (
int j = 0; j < w; j++)
1397 shared3.Set(x - j, z + i);
1398 action(shared3, j == 0 && i == 0);
1406 for (
int i = x - 1; i <= x + 1; i++)
1408 for (
int j = z - 1; j <= z + 1; j++)
1410 if (diagonal || i == x || j == z)
1432 cell.highlight = (byte)
id;
virtual bool IsRoofEditMode(Card c=null)
virtual bool IsPublicArea
static bool _CanInspect(Point pos)
static BlockInfo GetTempList(Point _pos)
void Talk(string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
void Say(string lang, string ref1=null, string ref2=null)
TaskDesignation designation
SourceBlock.Row sourceBlock
SourceMaterial.Row matBlock
SourceFloor.Row sourceFloor
SourceMaterial.Row matRoofBlock
SourceMaterial.Row matBridge
SourceFloor.Row sourceBridge
SourceMaterial.Row matFloor
SourceBlock.Row sourceRoofBlock
Hostility OriginalHostility
bool HasCondition(string alias)
override bool IsPCFaction
override bool IsPCFactionMinion
void DoHostileAction(Card _tg, bool immediate=false)
static BaseGameScreen screen
static SoundManager Sound
static Effect Get(Effect original)
void Play(float delay, Point from, float fixY=0f, Point to=null, Sprite sprite=null)
static int Distance(int x1, int y1, int x2, int y2)
static bool IsVisible(Point p1, Point p2, Action< Point, bool > _onVisit=null)
bool Contains(int dx, int dz)
void ModFire(int x, int z, int amount)
void SetFloor(int x, int z, int idMat=0, int idFloor=0)
void SetBlock(int x, int z, int idMat=0, int idBlock=0)
List< Point > ListPointsInCircle(Point center, float radius, bool mustBeWalkable=true, bool los=true)
List< TransAnime > pointAnimes
void SetObj(int x, int z, int id=0, int value=1, int dir=0)
static HashSet< int > sunMap
static bool _CanInspect(Point pos)
static ObjInfo GetTempList(Point _pos)
List< Cell > lastMarkedHighlights
SourceMaterial.Row matBlock
SourceMaterial.Row matFloor
static Point GetShared(int x, int z)
int Distance(int tx, int tz)
SourceMaterial.Row matRoofBlock
bool IsBlockByHeight(Point p)
List< Chara > ListWitnesses(Chara criminal, int radius=4, WitnessType type=WitnessType.crime, Chara target=null)
SourceBlock.Row sourceBlock
void ForeachMultiSize(int w, int h, Action< Point, bool > action)
void SetObj(int id=0, int value=1, int dir=0)
List< Card > ListThings< T >(bool onlyInstalled=true)
List< Card > ListVisibleCards()
ref Vector3 Position(int height)
void SetHighlight(int id)
List< Card > ListCards(bool includeMasked=false)
Vector3 ApplyAnime(ref Vector3 p)
RenderParam ApplyAnime(RenderParam p)
ref Vector3 PositionTopdownTreasure()
override string ToString()
Point Set(int _x, int _z)
List< IInspect > ListInspectorTargets()
ref Vector3 PositionTopdown()
ref Vector3 PositionAuto()
void ForeachNeighbor(Action< Point > action, bool diagonal=true)
Quaternion GetRotation(Point to)
Point GetNearestPoint(bool allowBlock=false, bool allowChara=true, bool allowInstalled=true, bool ignoreCenter=false, int minRadius=0)
bool HasNonHomeProperty(Thing exclude=null)
void ModFire(int value, bool extinguish=false)
SourceMaterial.Row matBridge
void SetFloor(int idMat=0, int idFloor=0)
void CallGuard(Chara criminal, Chara caller)
SoundSource PlaySound(string id, bool synced=true, float v=1f, bool spatial=true)
override bool Equals(object obj)
List< Chara > ListCharasInNeighbor(Func< Chara, bool > func)
ref Vector3 PositionCenter()
Point GetPointTowards(Point dest)
List< Chara > ListCharasInRadius(Chara cc, int dist, Func< Chara, bool > func, bool onlyVisible=true)
Chara FindChara(Func< Chara, bool > func)
bool Equals(int _x, int _z)
static BaseGameScreen _screen
List< Chara > ListCharas()
bool TryWitnessCrime(Chara criminal, Chara target=null, int radius=4, Func< Chara, bool > funcWitness=null)
SourceFloor.Row sourceFloor
static List< Chara > listChara
void TalkWitnesses(Chara criminal, string idTalk, int radius=4, WitnessType type=WitnessType.everyone, Func< Chara, bool > talkIf=null, int chance=3)
void SetBlock(int idMat=0, int idBlock=0)
Chara FirstVisibleChara()
bool Within(int _x, int _z, int _w, int _h)
override int GetHashCode()
static Point operator+(Point lhs, Point rhs)
Effect PlayEffect(string id)
void RefreshNeighborTiles()
bool HasRoomOrArea(BaseArea a)
static readonly XY[] Surrounds
bool ForeachNearestPoint(Func< Point, bool > endFunc, bool allowBlock=false, bool allowChara=true, bool allowInstalled=true, bool ignoreCenter=false, int maxRange=30)
Point GetRandomPointInRadius(int minRadius, int maxRadius, bool requireLos=true, bool allowChara=true, bool allowBlocked=false, int tries=2000)
Point Clamp(bool useBounds=false)
static List< Card > listCard
float GetAngle2(Point to)
Thing FindThing(Func< Thing, bool > func)
Point GetRandomNeighbor()
void Animate(AnimeID id, bool animeBlock=false)
SourceFloor.Row sourceBridge
List< Chara > ListVisibleCharas()
SourceBlock.Row sourceRoofBlock
Point GetRandomPoint(int radius, bool requireLos=true, bool allowChara=true, bool allowBlocked=false, int tries=100)
GameScreenElona screenElona
virtual List< Point > ListPoints(Point center=null, bool onlyPassable=true)
virtual bool SetAlarmOnBreakLaw
ElementContainerZone elements
virtual bool IsUnderwater
virtual void SetAlarm(bool enable)