, tower.target, . , .
if (!passes) {
float tdte = tower.target.distanceToEnd;
passes = edte < tdte;
}
, /, tower.target. . , distanceToEnd , distanceToEnd . .
- (void)getTargetsForTowers {
for ( CCSKTower *tower in towersOnMap )
if ( tower.hasTarget )
tower.distanceToEnd = tower.target.distanceToEnd;
NSArray *enemiesCopy = [enemiesOnMap copy];
for (CCUnit *enemy in enemiesCopy) {
float edte = enemy.distanceToEnd;
CGPoint enemyPos = enemy.position;
[self calculateTravelDistanceForEnemy:enemy];
if (enemy.actualHealth > 0) {
NSArray *tiles = [self getTilesForEnemy:enemy];
for (CCTileInfo *tile in tiles) {
NSArray *tileTowers = tile.towers;
for (CCSKTower *tower in tileTowers) {
if ( !tower.hasTarget || edte < tower.distanceToEnd ) {
BOOL inRange = [self circle:tower.position withRadius:tower.attackRange collisionWithCircle:enemyPos collisionCircleRadius:1];
if (inRange) {
tower.hasTarget = YES;
tower.target = enemy;
tower.distanceToEnd = edte;
}
}
}
}
}
}
}
, getTilesForEnemy. Running Time getTilesForEnemy, , , 10%. getVectorForPoint . insertObject, -, addObject , , .
(. wvry.png) , getTilesForEnemy 15,3% , getTargetsForTowers. , getVectorForPoint 17,3% 7,3%, . getTilesForEnemy 10%, getTilesForEnemy 15,3% getTargetsForTowers, 1,53%.
, getTilesForEnemy 20%, getTilesForEnemy 15,3% , , getTilesForEnemy.
, - , . , - . ARC NSArray. . , . : " getTargetsForTowers ARC NSArray?". C . -
copy the enemy information into an array of C structs
copy the tower information into an array of C structs
(note that the target for a tower is just an 'int', which is the index of an enemy in the enemy array)
for ( each enemy in the enemy array )
{
create an array of C structs for the tiles
for ( each tile )
for ( each tower in the tile )
update the tower target if needed
}
copy the updated tower information back into the NSArray of tower objects