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;
199 return cell.detail.designation is
TaskBuild;
230 if (cellDetail ==
null)
234 return cellDetail.charas.Count > 0;
243 if (cellDetail ==
null)
247 return cellDetail.things.Count > 0;
257 return detail.charas.Count > 1;
280 if (cellDetail ==
null || cellDetail.
charas.Count <= 0)
293 if (cellDetail ==
null || cellDetail.
things.Count <= 0)
306 if (cellDetail ==
null || cellDetail.
things.Count <= 0)
370 return IsInSpot<TraitGeyser>();
385 public bool Within(
int _x,
int _z,
int _w,
int _h)
387 if (
x >= _x &&
z >= _z &&
x < _x + _w)
413 return cell.room == a;
486 T val = Activator.CreateInstance<T>();
514 return "(" +
x +
" / " +
z +
")";
517 public void Set(Vector3 v)
523 x = (num2 - num) / 2 * -1;
553 vCache.z = 1000f + vCache.x * _screen.tileWeight.x + vCache.y * _screen.tileWeight.z + (float)(
int)b *
_screen.
tileMap.
_heightMod.z;
562 vCache.z = 1000f + vCache.x * _screen.tileWeight.x + vCache.y * _screen.tileWeight.z + (float)(
int)b *
_screen.
tileMap.
_heightMod.z;
585 vCache.x += EClass.screen.tileWorldSize.x * 0.5f;
586 vCache.y += EClass.screen.tileWorldSize.y * 0.75f;
592 return Quaternion.Euler(0f, 0f,
GetAngle(to));
598 return Mathf.Atan2(vector.y, vector.x) * 57.29578f;
604 return Mathf.Atan2(to.
z -
z, num) * 57.29578f;
607 public Point GetNearestPoint(
bool allowBlock =
false,
bool allowChara =
true,
bool allowInstalled =
true,
bool ignoreCenter =
false,
int minRadius = 0)
621 for (
int i = 0; i < 30; i++)
623 for (
int j = 0; j < r; j++)
631 for (
int k = 0; k < r; k++)
640 for (
int l = 0; l < r; l++)
648 for (
int m = 0; m < r; m++)
663 if (minRadius > r / 2)
679 public bool ForeachNearestPoint(Func<Point, bool> endFunc,
bool allowBlock =
false,
bool allowChara =
true,
bool allowInstalled =
true,
bool ignoreCenter =
false,
int maxRange = 30)
685 if (
IsValid(num2, num3) && endFunc(p))
689 if (
IsValid(num2, num3 + 1) && endFunc(p))
693 for (
int i = 0; i < maxRange; i++)
695 for (
int j = 0; j < num; j++)
698 if (
IsValid(num2, num3) && endFunc(p))
703 for (
int k = 0; k < num; k++)
706 if (
IsValid(num2, num3) && endFunc(p))
712 for (
int l = 0; l < num; l++)
715 if (
IsValid(num2, num3) && endFunc(p))
720 for (
int m = 0; m < num; m++)
723 if (
IsValid(num2, num3) && endFunc(p))
730 Debug.Log(
"ForeachNearestPoint Fail:" +
this);
749 int num = ((
EClass.
rnd(2) == 0) ? 1 : (-1));
757 public Point GetRandomPoint(
int radius,
bool requireLos =
true,
bool allowChara =
true,
bool allowBlocked =
false,
int tries = 100)
760 for (
int i = 0; i < tries; i++)
771 public Point GetRandomPointInRadius(
int minRadius,
int maxRadius,
bool requireLos =
true,
bool allowChara =
true,
bool allowBlocked =
false,
int tries = 2000)
774 for (
int i = 0; i < tries; i++)
780 if (num >= minRadius && num <= maxRadius && (!requireLos ||
Los.
IsVisible(
this, point)))
792 int num = dest.x - point.
x;
793 int num2 = dest.z - point.
z;
794 if (Mathf.Abs(num) > 1 || Mathf.Abs(num2) > 1)
796 int num3 = Mathf.Max(Mathf.Abs(num), Mathf.Abs(num2));
797 point.x += num / num3;
798 point.z += num2 / num3;
811 if (talkIf(
item) && !
item.renderer.IsTalking())
820 List<Chara> list =
new List<Chara>();
823 List<Chara> list2 =
item.detail?.charas;
824 if (list2 ==
null || list2.Count == 0)
828 foreach (
Chara item2
in list2)
865 if (funcWitness ==
null)
871 if (funcWitness(
item))
875 target?.DoHostileAction(criminal);
878 item.DoHostileAction(criminal);
892 caller.
Talk(
"callGuards");
896 Chara chara = list.RandomItem();
897 caller.
Say(
"calledGuard", caller);
902 public void SetBlock(
int idMat = 0,
int idBlock = 0)
907 public void SetFloor(
int idMat = 0,
int idFloor = 0)
912 public void SetObj(
int id = 0,
int value = 1,
int dir = 0)
917 public void ModFire(
int value,
bool extinguish =
false)
1086 if (
item.isChara ||
item.trait.CanBeAttacked)
1115 if (thing.
trait is T)
1117 return thing.trait as T;
1197 listChara.Add(chara);
1209 if (func(chara) && chara.
Dist(cc) < dist && (!onlyVisible ||
Los.
IsVisible(chara, cc)))
1211 listChara.Add(chara);
1217 public T GetInstalled<T>() where T :
Trait
1225 return thing.trait as T;
1237 public SoundSource
PlaySound(
string id,
bool synced =
true,
float v = 1f,
bool spatial =
true)
1239 Vector3 vector =
default(Vector3);
1246 vector = (EClass._zone.IsRegion ? PositionTopdown() : Position());
1272 if (FirstThing ==
null)
1293 if (orCreateDetail.
anime ==
null)
1299 animeBlock = animeBlock
1304 transAnime.drawBlock =
true;
1311 if (detail ==
null || detail.
anime ==
null)
1318 p.v.x += detail.
anime.
v.x;
1319 p.v.y += detail.
anime.
v.y;
1320 p.v.z += detail.
anime.
v.z;
1326 if (detail ==
null || detail.
anime ==
null)
1338 List<IInspect> list =
new List<IInspect>();
1340 if (cellDetail !=
null)
1371 for (
int i = 0; i < h; i++)
1373 for (
int j = 0; j < w; j++)
1375 shared3.
Set(x - j, z + i);
1376 action(shared3, j == 0 && i == 0);
1384 for (
int i = x - 1; i <= x + 1; i++)
1386 for (
int j = z - 1; j <= z + 1; j++)
1388 if (diagonal || i == x || j == z)
1410 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
CellDetail GetOrCreateDetail()
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 RefreshNeighborTiles(int x, int z)
void RefreshSingleTile(int x, int z)
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 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()
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)
ElementContainerZone elements