Add initial prototype.
This commit is contained in:
90
3-mid/opengl/source/lean/support/opengl-dolly.adb
Normal file
90
3-mid/opengl/source/lean/support/opengl-dolly.adb
Normal file
@@ -0,0 +1,90 @@
|
||||
with
|
||||
ada.Text_IO;
|
||||
|
||||
package body openGL.Dolly
|
||||
is
|
||||
|
||||
procedure Speed_is (Self : in out Item; Now : in Real)
|
||||
is
|
||||
begin
|
||||
Self.Speed := Now;
|
||||
end Speed_is;
|
||||
|
||||
|
||||
|
||||
procedure evolve (Self : in out Item)
|
||||
is
|
||||
use linear_Algebra_3d,
|
||||
ada.Text_IO;
|
||||
|
||||
Command : Character;
|
||||
Avail : Boolean;
|
||||
begin
|
||||
get_Immediate (Command, Avail);
|
||||
|
||||
if Avail
|
||||
then
|
||||
case Command
|
||||
is
|
||||
when 'q' => Self.quit_Requested := True;
|
||||
|
||||
-- Linear Motion.
|
||||
--
|
||||
when 'a' => Self.Camera.Site_is (Self.Camera.Site - right_Direction (Self.Camera.Spin) * Self.Speed);
|
||||
when 's' => Self.Camera.Site_is (Self.Camera.Site + right_Direction (Self.Camera.Spin) * Self.Speed);
|
||||
when 'w' => Self.Camera.Site_is (Self.Camera.Site - forward_Direction (Self.Camera.Spin) * Self.Speed);
|
||||
when 'z' => Self.Camera.Site_is (Self.Camera.Site + forward_Direction (Self.Camera.Spin) * Self.Speed);
|
||||
when 'e' => Self.Camera.Site_is (Self.Camera.Site + up_Direction (Self.Camera.Spin) * Self.Speed);
|
||||
when 'd' => Self.Camera.Site_is (Self.Camera.Site - up_Direction (Self.Camera.Spin) * Self.Speed);
|
||||
|
||||
-- Orbital motion.
|
||||
--
|
||||
when 'A' => Self.Camera.Site_is (Self.Camera.Site * y_Rotation_from (to_Radians (-5.0)));
|
||||
Self.Camera.Spin_is (Self.Camera.Spin * y_Rotation_from (to_Radians (-5.0)));
|
||||
when 'S' => Self.Camera.Site_is (Self.Camera.Site * y_Rotation_from (to_Radians ( 5.0)));
|
||||
Self.Camera.Spin_is (Self.Camera.Spin * y_Rotation_from (to_Radians ( 5.0)));
|
||||
|
||||
when 'E' => Self.Camera.Site_is (Self.Camera.Site * x_Rotation_from (to_Radians (-5.0)));
|
||||
Self.Camera.Spin_is (Self.Camera.Spin * x_Rotation_from (to_Radians (-5.0)));
|
||||
when 'D' => Self.Camera.Site_is (Self.Camera.Site * x_Rotation_from (to_Radians ( 5.0)));
|
||||
Self.Camera.Spin_is (Self.Camera.Spin * x_Rotation_from (to_Radians ( 5.0)));
|
||||
|
||||
when 'W' => Self.Camera.Site_is (Self.Camera.Site * z_Rotation_from (to_Radians (-5.0)));
|
||||
Self.Camera.Spin_is (Self.Camera.Spin * z_Rotation_from (to_Radians (-5.0)));
|
||||
when 'Z' => Self.Camera.Site_is (Self.Camera.Site * z_Rotation_from (to_Radians ( 5.0)));
|
||||
Self.Camera.Spin_is (Self.Camera.Spin * z_Rotation_from (to_Radians ( 5.0)));
|
||||
|
||||
when others => null;
|
||||
end case;
|
||||
|
||||
Self.last_Character := Command;
|
||||
end if;
|
||||
end evolve;
|
||||
|
||||
|
||||
|
||||
function quit_Requested (Self : in Item) return Boolean
|
||||
is
|
||||
begin
|
||||
return Self.quit_Requested;
|
||||
end quit_Requested;
|
||||
|
||||
|
||||
|
||||
procedure get_last_Character (Self : in out Item; the_Character : out Character;
|
||||
Available : out Boolean)
|
||||
is
|
||||
use ada.Characters;
|
||||
begin
|
||||
if Self.last_Character = latin_1.NUL
|
||||
then
|
||||
Available := False;
|
||||
else
|
||||
Available := True;
|
||||
the_Character := Self.last_Character;
|
||||
Self.last_Character := latin_1.NUL;
|
||||
end if;
|
||||
end get_last_Character;
|
||||
|
||||
|
||||
end openGL.Dolly;
|
||||
Reference in New Issue
Block a user