Fixed bug : [editor] several units on the same tiles

This commit is contained in:
mr-russ 2004-10-09 09:28:42 +00:00
parent a4f7f75d79
commit 9a2f317747
2 changed files with 15 additions and 6 deletions

View file

@ -34,6 +34,7 @@
<ul>
<p><li>2.2 Released<p>
<ul>
<li>Fixed bug #1043210: [editor] several units on the same tiles (from Russell Smith).
<li>Make InfoPanel more configurable. (from Joris Dauphin).
<li>Added support for transparent UI graphics, allowing for non-rectangular map areas (from Jimmy Salmon).
<li>New Graphics Manager to ensure graphics are loaded only once into memory (from Jimmy Salmon and Russell Smith).

View file

@ -2247,7 +2247,6 @@ int CanBuildOn(int x, int y, int mask)
**
** @return OnTop, parent unit, builder on true, NULL false.
**
** @todo can't handle building units !1x1, needs a rewrite.
*/
Unit* CanBuildUnitType(const Unit* unit, const UnitType* type, int x, int y, int real)
{
@ -2260,7 +2259,7 @@ Unit* CanBuildUnitType(const Unit* unit, const UnitType* type, int x, int y, int
// Terrain Flags don't matter if building on top of a unit.
ontop = CanBuildHere(unit, type, x, y);
if (ontop != unit) {
if (unit != NULL && ontop != unit) {
return ontop;
}
@ -2269,10 +2268,13 @@ Unit* CanBuildUnitType(const Unit* unit, const UnitType* type, int x, int y, int
//
j = 0;
if (unit) {
// FIXME: This only works with 1x1 big units
Assert(unit->Type->TileWidth == 1 && unit->Type->TileHeight == 1);
j = unit->Type->FieldFlags;
TheMap.Fields[unit->X + unit->Y * TheMap.Width].Flags &= ~j;
for (h = unit->Type->TileHeight; h > 0; --h) {
for (w = unit->Type->TileWidth; w > 0; --w) {
TheMap.Fields[(unit->X + w - 1) +
(unit->Y - 1 + h) * TheMap.Width].Flags &= ~j;
}
}
}
player = NULL;
@ -2300,7 +2302,13 @@ Unit* CanBuildUnitType(const Unit* unit, const UnitType* type, int x, int y, int
}
}
if (unit) {
TheMap.Fields[unit->X + unit->Y * TheMap.Width].Flags |= j;
j = unit->Type->FieldFlags;
for (h = unit->Type->TileHeight; h > 0; --h) {
for (w = unit->Type->TileWidth; w > 0; --w) {
TheMap.Fields[(unit->X + w - 1) +
(unit->Y - 1 + h) * TheMap.Width].Flags |= j;
}
}
}
//