//checks whether item is blocking seeker from seeing hider public bool IsBlocking(Seeker seeker, Hider hider) { bool rv = false; foreach(PrimitiveShape p in getCageShapes()) { foreach (Vector3 v in hider.getPartsPositions()) { rv = rv || p.isBlockingLineOfSight(seeker.getEyesPosition(), v); } } return rv; }
//returns whether or not seeker can see hider public static float CanSee(Hider hider, Vector3 pos) { List<Vector3> locs = hider.getPartsPositions(); float res = 0.5f; float frac = 0.5f / locs.Count; //for each body part in hider foreach (Vector3 loc in locs) //for each item in world for (int j = 0; j < World.getWorld().numOfItems; j++) { //if seeker can't see hider if (!World.getWorld().items[j].IsBlocking(pos, loc)) { res += frac; } } return res; }