void OnDisable() { for (int i = 0; i < fogsOfWar.Count; i++) { FogOfWar fogOfWar = fogsOfWar[i]; fogOfWar.RemoveAgent(this); fogOfWar.UpdateFogOfWar = true; relativePositionsDict.Remove(fogOfWar); } }
void OnEnable() { for (int i = 0; i < fogsOfWar.Count; i++) { FogOfWar fogOfWar = fogsOfWar[i]; fogOfWar.AddAgent(this); fogOfWar.UpdateFogOfWar = true; relativePositionsDict[fogOfWar] = Vector3.zero; } }
void Update() { CleanUp(); position = CachedTransform.position + offset; rect = new Rect(position.x - MaxRadius, position.y - MaxRadius, MaxRadius * 2, MaxRadius * 2); IsInView = Camera.main.WorldRectInView(rect); if (IsStatic) { if (HasChanged) { for (int i = 0; i < fogsOfWar.Count; i++) { FogOfWar fogOfWar = fogsOfWar[i]; fogOfWar.UpdateFogOfWar = true; } } } else { for (int i = 0; i < fogsOfWar.Count; i++) { FogOfWar fogOfWar = fogsOfWar[i]; Vector3 lastRelativePosition = relativePositionsDict[fogOfWar]; Vector3 currentRelativePosition = fogOfWar.CachedTransform.position - position; relativePositionsDict[fogOfWar] = currentRelativePosition; if (HasChanged || (lastRelativePosition != currentRelativePosition && rect.Overlaps(fogOfWar.Area))) { fogOfWar.UpdateFogOfWar = true; } } } }
public void RemoveFogOfWar(FogOfWar fogOfWar) { fogOfWar.UpdateFogOfWar = true; fogsOfWar.Remove(fogOfWar); relativePositionsDict.Remove(fogOfWar); }
public void AddFogOfWar(FogOfWar fogOfWar) { fogOfWar.UpdateFogOfWar = true; fogsOfWar.Add(fogOfWar); relativePositionsDict[fogOfWar] = Vector3.zero; }