// ported from Spring's ReadMap.cpp by Hugh Perkins public double[,] GetSlopeMap() { int mapwidth = aicallback.GetMapWidth(); int mapheight = aicallback.GetMapHeight(); int slopemapwidth = mapwidth / 2; int slopemapheight = mapheight / 2; int squaresize = MovementMaps.SQUARE_SIZE; // jsut to save typing... logfile.WriteLine("Getting heightmap, this could take a while... "); double[,] HeightMap = new double[mapwidth + 1, mapheight + 1]; //double[]heightmap = aicallback.GetHeightMap(); // cant use heightmap, it is centre heightmap, we need cornermap for (int x = 0; x < mapwidth + 1; x++) { for (int y = 0; y < mapheight + 1; y++) { HeightMap[x, y] = aicallback.GetElevation(x * squaresize, y * squaresize); } } // ArrayIndexer heightmapindexer = new ArrayIndexer( mapwidth + 1, mapheight + 1 ); logfile.WriteLine("calculating slopes..."); logfile.WriteLine("mapwidth: " + slopemapwidth + " " + slopemapheight); double[,] SlopeMap = new double[slopemapwidth, slopemapheight]; for (int y = 2; y < mapheight - 2; y += 2) { for (int x = 2; x < mapwidth - 2; x += 2) { AdvancedFloat3 e1 = new AdvancedFloat3(-squaresize * 4, HeightMap[x - 1, y - 1] - HeightMap[x + 3, y - 1], 0); AdvancedFloat3 e2 = new AdvancedFloat3(0, HeightMap[x - 1, y - 1] - HeightMap[x - 1, y + 3], -squaresize * 4); AdvancedFloat3 n = e2.Cross(e1); n.Normalize(); e1 = new AdvancedFloat3(squaresize * 4, HeightMap[x + 3, y + 3] - HeightMap[x - 1, y + 3], 0); e2 = new AdvancedFloat3(0, HeightMap[x + 3, y + 3] - HeightMap[x + 3, y - 1], squaresize * 4); AdvancedFloat3 n2 = e2.Cross(e1); n2.Normalize(); SlopeMap[x / 2, y / 2] = 1 - (n.y + n2.y) * 0.5; } } logfile.WriteLine("... slopes calculated"); return(SlopeMap); }
void Attack(UnitInfo[] closestunits) { //logfile.WriteLine( "AttackPackCoordinator attacking" ); //if( debugon ) // { // aicallback.SendTextMsg( "AttackPackCoordinator attacking", 0 ); // } // get vector from head unit to target // pick point a bit behind target, backwards along vector AdvancedFloat3 vectortargettohead = new AdvancedFloat3(targetpos - closestunits[0].pos); vectortargettohead.Normalize(); //vectortargettohead = vectortargettohead * AttackDistance; MoveTo(targetpos + vectortargettohead * AttackDistance); }
void Attack(UnitInfo[] closestunits) { //logfile.WriteLine( "AttackPackCoordinator attacking" ); //if( debugon ) // { // aicallback.SendTextMsg( "AttackPackCoordinator attacking", 0 ); // } // get vector from head unit to target // pick point a bit behind target, backwards along vector AdvancedFloat3 vectortargettohead = new AdvancedFloat3( targetpos - closestunits[0].pos ); vectortargettohead.Normalize(); //vectortargettohead = vectortargettohead * AttackDistance; MoveTo(targetpos + vectortargettohead * AttackDistance); }