Waddo
2008-07-25 12:29:13
Function Makecompassreflection(Direction:string;Accuracy:integer): Boolean;
{*******************************************************************
Function Makecompassreflection(Direction:string;Accuracy:integer): Boolean;
By: Waddo
Description: Rotates the camera using reflection
********************************************************************}
var
clientAngle,DirDeg,mark: integer;
left:boolean;
begin
case LowerCase(Direction) of
'n': DirDeg := 0;
'w': DirDeg := 90;
's': DirDeg := 180;
'e': DirDeg := 270;
end else
DirDeg := StrToInt(Direction);
ClientAngle:= (SmartGetFieldInt(0,CompassAngle) + SmartGetFieldInt(0,MapOffsetAngle)) mod 2048;
ClientAngle:=ClientAngle * 180 / 1024;
if ClientAngle=dirdeg then exit;
if (ClientAngle-DirDeg)>180 then
begin
left:=false;
keydown(vk_right);
end else
begin
left:=true;
keydown(vk_left);
end;
wait(1);
MarkTime(Mark);
repeat
clientAngle:= (SmartGetFieldInt(0,CompassAngle) + SmartGetFieldInt(0,MapOffsetAngle)) mod 2048;
clientangle:=clientAngle * 180 / 1024;
If left then
if clientangle>DirDeg then break;
if not left then
if clientangle<DirDeg then break;
If clientangle=dirDeg then break;
Wait(1);
until (TimeFromMark(Mark) > 14000) or ( ((clientangle>dirDeg-Accuracy) or (clientangle>dirDeg-Accuracy+360)) and (clientangle<dirDeg+Accuracy));
if left then
Keyup(vk_left)
else
keyup(vk_right);
if clientangle<>dirdeg then
Makecompassreflection(direction,0);
result:=clientangle=dirDeg;
end;