Beispiel #1
0
BOOL ObjectActionCornerScale(C4Object *cObj)
  {
	int32_t iRangeX,iRangeY;
	// Scaling: check range max to min
	if (cObj->GetProcedure()==DFA_SCALE)
		{
		if (!CheckCornerScale(cObj,iRangeX,iRangeY)) return FALSE;
		}
	// Swimming: check range min to max
	else
		{
		iRangeY=2;
		while (!CornerScaleOkay(cObj,iRangeY,iRangeY))
			{ iRangeY++; if (iRangeY>CornerRange) return FALSE; }
		iRangeX=iRangeY;
		}
  // Do corner scale
  if (!cObj->SetActionByName("KneelUp"))
		cObj->SetActionByName("Walk");
  cObj->xdir=cObj->ydir=0;
  //if (cObj->Action.Dir==DIR_Left) cObj->Action.ComDir=COMD_Left; else cObj->Action.ComDir=COMD_Right;
  if (cObj->Action.Dir==DIR_Left) cObj->fix_x-=itofix(iRangeX); 
	else cObj->fix_x+=itofix(iRangeX);
  cObj->fix_y-=itofix(iRangeY);
  cObj->x=fixtoi(cObj->fix_x); cObj->y=fixtoi(cObj->fix_y);
  return TRUE;
  }
Beispiel #2
0
BOOL CheckCornerScale(C4Object *cObj, int32_t &iRangeX, int32_t &iRangeY)
	{
	for (iRangeX=CornerRange; iRangeX>=1; iRangeX--)
		for (iRangeY=CornerRange; iRangeY>=1; iRangeY--)
			if (CornerScaleOkay(cObj,iRangeX,iRangeY))
				return TRUE;
	return FALSE;
	}
Beispiel #3
0
bool ObjectActionCornerScale(C4Object *cObj)
{
	int32_t iRangeX = 1, iRangeY = 1;
	if (!CornerScaleOkay(cObj,iRangeX,iRangeY)) return false;
	// Do corner scale
	if (!cObj->SetActionByName("KneelUp"))
		cObj->SetActionByName("Walk");
	cObj->xdir=cObj->ydir=0;
	if (cObj->Action.Dir==DIR_Left) cObj->fix_x-=itofix(iRangeX);
	else cObj->fix_x+=itofix(iRangeX);
	cObj->fix_y-=itofix(iRangeY);
	return true;
}