Ticket #4278: ticket4278-v2.patch
File ticket4278-v2.patch, 2.8 KB (added by , 8 years ago) |
---|
-
source/simulation2/components/CCmpUnitMotion.cpp
1571 1571 goal.x = obstruction.x; 1572 1572 goal.z = obstruction.z; 1573 1573 1574 entity_pos_t distance = Geometry::DistanceToSquare(pos - CFixedVector2D(obstruction.x, obstruction.z), obstruction.u, obstruction.v, halfSize );1574 entity_pos_t distance = Geometry::DistanceToSquare(pos - CFixedVector2D(obstruction.x, obstruction.z), obstruction.u, obstruction.v, halfSize, true); 1575 1575 1576 1576 // Compare with previous obstruction 1577 1577 ICmpObstructionManager::ObstructionSquare previousObstruction; 1578 1578 cmpObstruction->GetPreviousObstructionSquare(previousObstruction); 1579 entity_pos_t previousDistance = Geometry::DistanceToSquare(pos - CFixedVector2D(previousObstruction.x, previousObstruction.z), obstruction.u, obstruction.v, halfSize );1579 entity_pos_t previousDistance = Geometry::DistanceToSquare(pos - CFixedVector2D(previousObstruction.x, previousObstruction.z), obstruction.u, obstruction.v, halfSize, true); 1580 1580 1581 if (distance < minRange && previousDistance < minRange) 1581 bool inside = distance.IsZero() && !Geometry::DistanceToSquare(pos - CFixedVector2D(obstruction.x, obstruction.z), obstruction.u, obstruction.v, halfSize).IsZero(); 1582 if (distance < minRange && previousDistance < minRange || inside) 1582 1583 { 1583 1584 // Too close to the square - need to move away 1584 1585 … … 1691 1692 if (hasObstruction) 1692 1693 { 1693 1694 CFixedVector2D halfSize(obstruction.hw, obstruction.hh); 1694 entity_pos_t distance = Geometry::DistanceToSquare(pos - CFixedVector2D(obstruction.x, obstruction.z), obstruction.u, obstruction.v, halfSize );1695 entity_pos_t distance = Geometry::DistanceToSquare(pos - CFixedVector2D(obstruction.x, obstruction.z), obstruction.u, obstruction.v, halfSize, true); 1695 1696 1696 1697 // Compare with previous obstruction 1697 1698 ICmpObstructionManager::ObstructionSquare previousObstruction; 1698 1699 cmpObstruction->GetPreviousObstructionSquare(previousObstruction); 1699 entity_pos_t previousDistance = Geometry::DistanceToSquare(pos - CFixedVector2D(previousObstruction.x, previousObstruction.z), obstruction.u, obstruction.v, halfSize );1700 entity_pos_t previousDistance = Geometry::DistanceToSquare(pos - CFixedVector2D(previousObstruction.x, previousObstruction.z), obstruction.u, obstruction.v, halfSize, true); 1700 1701 1701 1702 // See if we're too close to the target square 1702 if (distance < minRange && previousDistance < minRange) 1703 bool inside = distance.IsZero() && !Geometry::DistanceToSquare(pos - CFixedVector2D(obstruction.x, obstruction.z), obstruction.u, obstruction.v, halfSize).IsZero(); 1704 if (distance < minRange && previousDistance < minRange || inside) 1703 1705 return false; 1704 1706 1705 1707 // See if we're close enough to the target square