Implement PLRZOOM_Set flag to allow setting current zoom and limits in the same call.

issue1247
Sven Eberhardt 2014-05-11 10:30:41 +02:00
parent cd8ab67c14
commit 893d5e87da
3 changed files with 19 additions and 11 deletions

View File

@ -56,6 +56,10 @@
<literal_col>PLRZOOM_LimitMax</literal_col>
<col>Set the maximum limit for zooming. The player cannot zoom in further than this.</col>
</row>
<row>
<literal_col>PLRZOOM_Set</literal_col>
<col>Set the current zoom. This flag is implied if neither PLRZOOM_LimitMin nor PLRZOOM_LimitMax is supplied but can be used if current zoom and limits should be set simultanuously.</col>
</row>
</table>
</desc>
</param>

View File

@ -55,6 +55,10 @@
<literal_col>PLRZOOM_LimitMax</literal_col>
<col>Set the maximum limit for zooming. The player cannot zoom in further than this.</col>
</row>
<row>
<literal_col>PLRZOOM_Set</literal_col>
<col>Set the current zoom. This flag is implied if neither PLRZOOM_LimitMin nor PLRZOOM_LimitMax is supplied but can be used if current zoom and limits should be set simultanuously.</col>
</row>
</table>
</desc>
</param>

View File

@ -685,7 +685,8 @@ static const int PLRZOOM_Direct = 0x01,
PLRZOOM_NoIncrease = 0x04,
PLRZOOM_NoDecrease = 0x08,
PLRZOOM_LimitMin = 0x10,
PLRZOOM_LimitMax = 0x20;
PLRZOOM_LimitMax = 0x20,
PLRZOOM_Set = 0x40;
static bool FnSetPlayerZoomByViewRange(C4PropList * _this, long plr_idx, long range_wdt, long range_hgt, long flags)
{
@ -705,13 +706,12 @@ static bool FnSetPlayerZoomByViewRange(C4PropList * _this, long plr_idx, long ra
C4Player *plr = ::Players.Get(plr_idx);
if (!plr) return false;
// adjust values in player
if (!(flags & (PLRZOOM_LimitMin | PLRZOOM_LimitMax)))
plr->SetZoomByViewRange(range_wdt, range_hgt, !!(flags & PLRZOOM_Direct), !!(flags & PLRZOOM_NoIncrease), !!(flags & PLRZOOM_NoDecrease));
else
if ((flags & PLRZOOM_Set) || !(flags & (PLRZOOM_LimitMin | PLRZOOM_LimitMax)))
{
if (flags & PLRZOOM_LimitMin) plr->SetMinZoomByViewRange(range_wdt, range_hgt, !!(flags & PLRZOOM_NoIncrease), !!(flags & PLRZOOM_NoDecrease));
if (flags & PLRZOOM_LimitMax) plr->SetMaxZoomByViewRange(range_wdt, range_hgt, !!(flags & PLRZOOM_NoIncrease), !!(flags & PLRZOOM_NoDecrease));
plr->SetZoomByViewRange(range_wdt, range_hgt, !!(flags & PLRZOOM_Direct), !!(flags & PLRZOOM_NoIncrease), !!(flags & PLRZOOM_NoDecrease));
}
if (flags & PLRZOOM_LimitMin) plr->SetMinZoomByViewRange(range_wdt, range_hgt, !!(flags & PLRZOOM_NoIncrease), !!(flags & PLRZOOM_NoDecrease));
if (flags & PLRZOOM_LimitMax) plr->SetMaxZoomByViewRange(range_wdt, range_hgt, !!(flags & PLRZOOM_NoIncrease), !!(flags & PLRZOOM_NoDecrease));
}
return true;
}
@ -737,13 +737,12 @@ static bool FnSetPlayerZoom(C4PropList * _this, long plr_idx, long zoom, long pr
C4Player *plr = ::Players.Get(plr_idx);
if (!plr) return false;
// adjust values in player
if (!(flags & (PLRZOOM_LimitMin | PLRZOOM_LimitMax)))
plr->SetZoom(fZoom, !!(flags & PLRZOOM_Direct), !!(flags & PLRZOOM_NoIncrease), !!(flags & PLRZOOM_NoDecrease));
else
if ((flags & PLRZOOM_Set) || !(flags & (PLRZOOM_LimitMin | PLRZOOM_LimitMax)))
{
if (flags & PLRZOOM_LimitMin) plr->SetMinZoom(fZoom, !!(flags & PLRZOOM_NoIncrease), !!(flags & PLRZOOM_NoDecrease));
if (flags & PLRZOOM_LimitMax) plr->SetMaxZoom(fZoom, !!(flags & PLRZOOM_NoIncrease), !!(flags & PLRZOOM_NoDecrease));
plr->SetZoom(fZoom, !!(flags & PLRZOOM_Direct), !!(flags & PLRZOOM_NoIncrease), !!(flags & PLRZOOM_NoDecrease));
}
if (flags & PLRZOOM_LimitMin) plr->SetMinZoom(fZoom, !!(flags & PLRZOOM_NoIncrease), !!(flags & PLRZOOM_NoDecrease));
if (flags & PLRZOOM_LimitMax) plr->SetMaxZoom(fZoom, !!(flags & PLRZOOM_NoIncrease), !!(flags & PLRZOOM_NoDecrease));
}
return true;
}
@ -2750,6 +2749,7 @@ C4ScriptConstDef C4ScriptGameConstMap[]=
{ "PLRZOOM_NoDecrease" ,C4V_Int, PLRZOOM_NoDecrease },
{ "PLRZOOM_LimitMin" ,C4V_Int, PLRZOOM_LimitMin },
{ "PLRZOOM_LimitMax" ,C4V_Int, PLRZOOM_LimitMax },
{ "PLRZOOM_Set" ,C4V_Int, PLRZOOM_Set },
{ "ATTACH_Front" ,C4V_Int, C4ATTACH_Front },
{ "ATTACH_Back" ,C4V_Int, C4ATTACH_Back },