public override void DoWork(float dt)
{
if(IsFinished) return;
if(!Added) {
if(isDead) {
// Early Work Escape
Finish();
return;
}
// Check If We Can Memorize
foreach(var p in grids) {
FogOfWar f = state.CGrid.GetFogOfWar(p.X, p.Y, teamIndex);
switch(f) {
case FogOfWar.Active:
if(Added) break;
state.teams[teamIndex].ViewedEnemyBuildings.Add(vb);
Added = true;
break;
}
}
}
else {
int fActive = 0, fNothing = 0;
foreach(var p in grids) {
FogOfWar f = state.CGrid.GetFogOfWar(p.X, p.Y, teamIndex);
switch(f) {
case FogOfWar.Active:
fActive++;
break;
case FogOfWar.Nothing:
fNothing++;
break;
}
}
if(fActive > 0) {
if(isDead) {
// Know Building Is Dead Now
state.teams[teamIndex].ViewedEnemyBuildings.Remove(vb);
Added = false;
Finish();
return;
}
else {
vb.BuildAmount = 1 - ((float)building.BuildAmountLeft / (float)building.Data.BuildAmount);
}
}
else if(fNothing == Data.GridSize.X * Data.GridSize.Y) {
// Not To Be Seen Anymore
state.teams[teamIndex].ViewedEnemyBuildings.Remove(vb);
Added = false;
if(isDead) {
// Early Exit
Finish();
return;
}
}
}
}