Validate patrol area location

This commit is contained in:
Ted John 2022-03-12 10:26:57 +00:00
parent 2874b1b49d
commit f8224150d5
2 changed files with 39 additions and 32 deletions

View File

@ -42,20 +42,12 @@ void StaffSetPatrolAreaAction::Serialise(DataSerialiser& stream)
GameActions::Result StaffSetPatrolAreaAction::Query() const
{
if (_spriteId.ToUnderlying() >= MAX_ENTITIES || _spriteId.IsNull())
{
log_error("Invalid spriteId. spriteId = %u", _spriteId);
return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE);
return QueryExecute(false);
}
auto staff = TryGetEntity<Staff>(_spriteId);
if (staff == nullptr)
GameActions::Result StaffSetPatrolAreaAction::Execute() const
{
log_error("Invalid spriteId. spriteId = %u", _spriteId);
return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE);
}
return GameActions::Result();
return QueryExecute(true);
}
static void InvalidatePatrolTiles(const MapRange& range)
@ -63,15 +55,29 @@ static void InvalidatePatrolTiles(const MapRange& range)
map_invalidate_region(range.Point1, range.Point2);
}
GameActions::Result StaffSetPatrolAreaAction::Execute() const
GameActions::Result StaffSetPatrolAreaAction::QueryExecute(bool executing) const
{
auto staff = TryGetEntity<Staff>(_spriteId);
if (staff == nullptr)
{
log_error("Invalid spriteId. spriteId = %u", _spriteId);
log_error("Invalid entity ID: %u", _spriteId.ToUnderlying());
return GameActions::Result(GameActions::Status::InvalidParameters, STR_NONE, STR_NONE);
}
auto validRange = ClampRangeWithinMap(_range);
for (int32_t y = validRange.GetTop(); y <= validRange.GetBottom(); y += COORDS_XY_STEP)
{
for (int32_t x = validRange.GetLeft(); x <= validRange.GetRight(); x += COORDS_XY_STEP)
{
if (!LocationValid({ x, y }))
{
return GameActions::Result(GameActions::Status::NotOwned, STR_SET_PATROL_AREA, STR_LAND_NOT_OWNED_BY_PARK);
}
}
}
if (executing)
{
switch (_mode)
{
case StaffSetPatrolAreaMode::Set:
@ -91,8 +97,7 @@ GameActions::Result StaffSetPatrolAreaAction::Execute() const
gfx_invalidate_screen();
break;
}
UpdateConsolidatedPatrolAreas();
}
return GameActions::Result();
}

View File

@ -25,6 +25,8 @@ private:
MapRange _range;
StaffSetPatrolAreaMode _mode;
GameActions::Result QueryExecute(bool executing) const;
public:
StaffSetPatrolAreaAction() = default;
StaffSetPatrolAreaAction(EntityId spriteId, const MapRange& range, const StaffSetPatrolAreaMode mode);