note description: "Controller of the game library." author: "Louis Marchand" date: "Sat, 28 Mar 2015 03:42:16 +0000" revision: "2.1" class interface GAME_LIBRARY_CONTROLLER create default_create -- Initialization for Current. -- Clean up library on segfault make_no_parachute -- Initialization for Current. -- Don't clean up library on segfault feature -- Access append_all_dollar_gesture_template (a_filename: READABLE_STRING_GENERAL) -- Save every dollar gesture templates loaded in the library -- inside the file located at a_filename. If it exists, the data will -- be added to the end. If it does not, it will be created. -- Note: The templates hashes are not saved in the file. You have to save -- them yourself for future utilisation -- (from GAME_DOLLAR_GESTURE_MANAGER) require -- from GAME_DOLLAR_GESTURE_MANAGER is_file_valid: attached (create {RAW_FILE}.make_with_name (a_filename)) as la_file implies ((la_file.exists implies la_file.is_access_writable) and (not la_file.exists implies la_file.is_creatable)) append_dollar_gesture_template (a_hash: INTEGER_64; a_filename: READABLE_STRING_GENERAL) -- Save the dollar gesture templates identified by a_hash -- inside the file located at a_filename. If it exists, the data will -- be added to the end. If it does not, it will be created. -- Note: The a_hash is not saved in the file. You have to save it -- yourself for future utilisation -- (from GAME_DOLLAR_GESTURE_MANAGER) require -- from GAME_DOLLAR_GESTURE_MANAGER is_file_valid: attached (create {RAW_FILE}.make_with_name (a_filename)) as la_file implies ((la_file.exists implies la_file.is_access_writable) and (not la_file.exists implies la_file.is_creatable)) clear_events -- Remove common library event. -- Note: does not clear other events like window events, joystick events, etc. To clear every events -- in the system, used GAME_LIBRARY_CONTROLLER.clear_all_events. -- (from GAME_COMMON_EVENTS) ensure -- from GAME_EVENTS running_unchanged: is_events_running = old is_events_running file_dropped_actions: ACTION_SEQUENCE [NATURAL_32, READABLE_STRING_GENERAL] -- Called when the file (or any other string) filename is drag and drop on a GAME_WINDOW. -- The event is not enabled by default. Use events_controller.enable_file_dropped_event to enable it. -- (from GAME_COMMON_EVENTS) require -- from GAME_COMMON_EVENTS joystick_found_event_enabled: events_controller.is_joy_device_founded_event_enable generating_type: TYPE [detachable GAME_LIBRARY_CONTROLLER] -- Type of current object -- (type of which it is a direct instance) -- (from ANY) ensure -- from ANY generating_type_not_void: Result /= Void generator: STRING_8 -- Name of current object's generating class -- (base class of the type of which it is a direct instance) -- (from ANY) ensure -- from ANY generator_not_void: Result /= Void generator_not_empty: not Result.is_empty has_error: BOOLEAN -- Is the library has generate an error -- (from GAME_ERROR_MANAGER) is_events_running: BOOLEAN assign set_is_running -- Is Current active -- (from GAME_EVENTS) iteration_actions: ACTION_SEQUENCE [NATURAL_32] -- Called at each game loop -- (from GAME_COMMON_EVENTS) joystick_found_actions: ACTION_SEQUENCE [NATURAL_32, GAME_JOYSTICK] -- Called when a new joystick has been founded -- Automatically added to GAME_LIBRARY_CONTROLLER.joysticks -- (from GAME_COMMON_EVENTS) require -- from GAME_COMMON_EVENTS joystick_found_event_enabled: events_controller.is_joy_device_founded_event_enable joystick_remove_actions: ACTION_SEQUENCE [NATURAL_32, GAME_JOYSTICK] -- Called when a new joystick has been removed -- The joystick will be removed from GAME_LIBRARY_CONTROLLER.joysticks after the -- calls of this feature. -- (from GAME_COMMON_EVENTS) require -- from GAME_COMMON_EVENTS joystick_remove_event_enabled: events_controller.is_joy_device_removed_event_enable last_error: READABLE_STRING_GENERAL -- The last error generate by the library -- (from GAME_SDL_ANY) last_loaded_dollar_gesture_template: INTEGER_32 -- How many dollar gesture template has been load on the last -- call of the load_dollar_gesture_template feature -- (from GAME_DOLLAR_GESTURE_MANAGER) last_saved_dollar_gesture_template: INTEGER_32 -- How many dollar gesture template has been save on the last -- call of the save_dollar_gesture_template, -- save_all_dollar_gesture_template, append_dollar_gesture_template -- or append_all_dollar_gesture_template feature -- (from GAME_DOLLAR_GESTURE_MANAGER) load_dollar_gesture_template (a_filename: READABLE_STRING_GENERAL) -- Load in Current every dollar gesture templates -- inside the file located at a_filename -- Note: The unique hash returned by the record_dollar_gesture -- feature has to be saved on the client side. -- (from GAME_DOLLAR_GESTURE_MANAGER) require -- from GAME_DOLLAR_GESTURE_MANAGER file_is_readable: attached (create {RAW_FILE}.make_with_name (a_filename)) as la_file implies (la_file.exists and then la_file.is_access_readable) quit_signal_actions: ACTION_SEQUENCE [NATURAL_32] -- When the application receive a quit signal. -- (from GAME_COMMON_EVENTS) require -- from GAME_COMMON_EVENTS quit_event_enabled: events_controller.is_quit_signal_event_enable run_events -- Put Current active. -- (from GAME_COMMON_EVENTS) require -- from GAME_EVENTS run_not_already_running: not is_events_running ensure -- from GAME_EVENTS is_running: is_events_running save_all_dollar_gesture_template (a_filename: READABLE_STRING_GENERAL) -- Save every dollar gesture templates loaded in the library -- inside the file located at a_filename. If it exists, the file will be -- overwrited. -- Note: The templates hashes are not saved in the file. You have to save -- them yourself for future utilisation -- (from GAME_DOLLAR_GESTURE_MANAGER) require -- from GAME_DOLLAR_GESTURE_MANAGER is_file_creatable: (create {RAW_FILE}.make_with_name (a_filename)).is_creatable save_dollar_gesture_template (a_hash: INTEGER_64; a_filename: READABLE_STRING_GENERAL) -- Save the dollar gesture templates identified by a_hash -- inside the file located at a_filename. If it exists, the file will be -- overwrited. -- Note: The a_hash is not saved in the file. You have to save it -- yourself for future utilisation -- (from GAME_DOLLAR_GESTURE_MANAGER) require -- from GAME_DOLLAR_GESTURE_MANAGER is_file_creatable: (create {RAW_FILE}.make_with_name (a_filename)).is_creatable set_is_running (a_value: BOOLEAN) -- Assign to is_running the value of a_value -- (from GAME_EVENTS) ensure -- from GAME_EVENTS is_assign: is_events_running ~ a_value stop_events -- Put Current innactive. -- (from GAME_COMMON_EVENTS) require -- from GAME_EVENTS stop_is_running: is_events_running ensure -- from GAME_EVENTS is_stopped: not is_events_running feature -- Comparison frozen deep_equal (a: detachable ANY; b: like arg #1): BOOLEAN -- Are a and b either both void -- or attached to isomorphic object structures? -- (from ANY) ensure -- from ANY instance_free: class shallow_implies_deep: standard_equal (a, b) implies Result both_or_none_void: (a = Void) implies (Result = (b = Void)) same_type: (Result and (a /= Void)) implies (b /= Void and then a.same_type (b)) symmetric: Result implies deep_equal (b, a) frozen equal (a: detachable ANY; b: like arg #1): BOOLEAN -- Are a and b either both void or attached -- to objects considered equal? -- (from ANY) ensure -- from ANY instance_free: class definition: Result = (a = Void and b = Void) or else ((a /= Void and b /= Void) and then a.is_equal (b)) frozen is_deep_equal alias "≡≡≡" (other: GAME_LIBRARY_CONTROLLER): BOOLEAN -- Are Current and other attached to isomorphic object structures? -- (from ANY) require -- from ANY other_not_void: other /= Void ensure -- from ANY shallow_implies_deep: standard_is_equal (other) implies Result same_type: Result implies same_type (other) symmetric: Result implies other.is_deep_equal (Current) is_equal (other: GAME_LIBRARY_CONTROLLER): BOOLEAN -- Is other attached to an object considered -- equal to current object? -- (from ANY) require -- from ANY other_not_void: other /= Void ensure -- from ANY symmetric: Result implies other ~ Current consistent: standard_is_equal (other) implies Result frozen standard_equal (a: detachable ANY; b: like arg #1): BOOLEAN -- Are a and b either both void or attached to -- field-by-field identical objects of the same type? -- Always uses default object comparison criterion. -- (from ANY) ensure -- from ANY instance_free: class definition: Result = (a = Void and b = Void) or else ((a /= Void and b /= Void) and then a.standard_is_equal (b)) frozen standard_is_equal alias "≜" (other: GAME_LIBRARY_CONTROLLER): BOOLEAN -- Is other attached to an object of the same type -- as current object, and field-by-field identical to it? -- (from ANY) require -- from ANY other_not_void: other /= Void ensure -- from ANY same_type: Result implies same_type (other) symmetric: Result implies other.standard_is_equal (Current) feature -- Status report conforms_to (other: ANY): BOOLEAN -- Does type of current object conform to type -- of other (as per Eiffel: The Language, chapter 13)? -- (from ANY) require -- from ANY other_not_void: other /= Void same_type (other: ANY): BOOLEAN -- Is type of current object identical to type of other? -- (from ANY) require -- from ANY other_not_void: other /= Void ensure -- from ANY definition: Result = (conforms_to (other) and other.conforms_to (Current)) feature -- Duplication copy (other: GAME_LIBRARY_CONTROLLER) -- Update current object using fields of object attached -- to other, so as to yield equal objects. -- (from ANY) require -- from ANY other_not_void: other /= Void type_identity: same_type (other) ensure -- from ANY is_equal: Current ~ other frozen deep_copy (other: GAME_LIBRARY_CONTROLLER) -- Effect equivalent to that of: -- copy (other . deep_twin) -- (from ANY) require -- from ANY other_not_void: other /= Void ensure -- from ANY deep_equal: deep_equal (Current, other) frozen deep_twin: GAME_LIBRARY_CONTROLLER -- New object structure recursively duplicated from Current. -- (from ANY) ensure -- from ANY deep_twin_not_void: Result /= Void deep_equal: deep_equal (Current, Result) frozen standard_copy (other: GAME_LIBRARY_CONTROLLER) -- Copy every field of other onto corresponding field -- of current object. -- (from ANY) require -- from ANY other_not_void: other /= Void type_identity: same_type (other) ensure -- from ANY is_standard_equal: standard_is_equal (other) frozen standard_twin: GAME_LIBRARY_CONTROLLER -- New object field-by-field identical to other. -- Always uses default copying semantics. -- (from ANY) ensure -- from ANY standard_twin_not_void: Result /= Void equal: standard_equal (Result, Current) frozen twin: GAME_LIBRARY_CONTROLLER -- New object equal to Current -- twin calls copy; to change copying/twinning semantics, redefine copy. -- (from ANY) ensure -- from ANY twin_not_void: Result /= Void is_equal: Result ~ Current feature -- Basic operations frozen default: detachable GAME_LIBRARY_CONTROLLER -- Default value of object's type -- (from ANY) frozen default_pointer: POINTER -- Default value of type POINTER -- (Avoid the need to write p.default for -- some p of type POINTER.) -- (from ANY) ensure -- from ANY instance_free: class default_rescue -- Process exception for routines with no Rescue clause. -- (Default: do nothing.) -- (from ANY) frozen do_nothing -- Execute a null action. -- (from ANY) ensure -- from ANY instance_free: class feature -- Implementation disable_print_on_error -- Desactive the print_on_error functionnality. -- (from GAME_ERROR_MANAGER) enable_print_on_error -- Active the print_on_error functionnality. -- (from GAME_ERROR_MANAGER) print_on_error: BOOLEAN -- When an error occured, the library will print -- informations about the error on the error console -- output (default is True). -- (from GAME_ERROR_MANAGER) set_print_on_error (a_value: BOOLEAN) -- Assign to print_on_error the value of a_value -- (from GAME_ERROR_MANAGER) ensure -- from GAME_ERROR_MANAGER is_assign: print_on_error ~ a_value feature -- Haptic methods haptic_maximum_gain: INTEGER_32 assign set_haptic_maximum_gain -- The maximum gain used by haptics in the system. -- The GAME_HAPTIC.set_gain always take 0-100 -- gain value, but the real value is scaled require haptic_enabled: is_haptic_enable ensure result_valid: Result >= 0 and Result <= 100 haptics: CHAIN_INDEXABLE_ITERATOR [GAME_HAPTIC_DEVICE] -- Every haptic devices on the system require haptic_is_haptic_enabled: is_haptic_enable refresh_haptics -- Update the haptics list (if haptics as been add or remove) -- Warning: This will close all opened haptics require controller_update_haptics_haptic_enabled: is_haptic_enable set_haptic_maximum_gain (a_gain: INTEGER_32) -- Assign haptic_maximum_gain with the value of a_gain require haptic_enabled: is_haptic_enable gain_is_valid: a_gain >= 0 and a_gain <= 100 ensure is_assign: not has_error implies haptic_maximum_gain = a_gain feature -- Joystick methods joysticks: CHAIN_INDEXABLE_ITERATOR [GAME_JOYSTICK] -- Every GAME_JOYSTICK detected by Current require joysticks_is_joystick_enabled: is_joystick_enable update_joysticks_state -- Update the state of all opened joystick. This procedure is -- Called at each game loop instead you disable every joystick event -- with GAME_EVENTS_CONTROLLER.disable_joy_*_event or with -- GAME_EVENTS_CONTROLLER.disable_every_joy_events feature -- Mouse cursor: GAME_CURSOR -- The GAME_CURSOR presently used in Current default_cursor: GAME_CURSOR -- The GAME_CURSOR used in the creation of Current disable_relative_mouse -- Unset the is_relative_mouse_enabled mode ensure is_assign: not has_error implies not is_relative_mouse_enabled enable_relative_mouse -- Set the is_relative_mouse_enabled mode ensure is_assign: not has_error implies is_relative_mouse_enabled hide_mouse_cursor -- Don't show the mouse cursor when the mouse is on a window created by the library. ensure hide_mouse_cursor_valid: not is_cursor_visible is_cursor_visible: BOOLEAN assign set_is_cursor_visible -- Return true if the library is set to show the mous cursor when the mouse is on a window created by the library. is_relative_mouse_enabled: BOOLEAN assign set_is_relative_mouse_enabled -- While Enabled, the cursor is hidden, and only relative motion events (delta_x and delta_y) -- will be delivered to the current window the mouse position will not change. -- Note: This function will flush any pending mouse motion. redraw_cursor -- Redraw the cursor set_cursor (a_cursor: GAME_CURSOR) -- Assign cursor with the value of a_cursor require cursor_valid: a_cursor.exists ensure is_assign: not has_error implies cursor ~ a_cursor set_default_cursor -- Put back the default GAME_CURSOR set_is_cursor_visible (a_value: BOOLEAN) -- Assign to is_cursor_visible the value of a_value ensure is_assign: is_cursor_visible ~ a_value set_is_relative_mouse_enabled (a_value: BOOLEAN) -- Assign is_relative_mouse_enabled with the value of a_value ensure is_assign: not has_error implies is_relative_mouse_enabled ~ a_value show_mouse_cursor -- Show the mouse cursor when the mouse is on a window created by the library. ensure show_mouse_cursor_valid: is_cursor_visible feature -- OpenGL disable_gl -- Unload the OpenGL library require is_gl_enabled: is_gl_enabled enable_gl -- Load the OpenGL library require not_already_enabled: not is_gl_enabled video_must_be_loaded: is_video_enable enable_gl_from_file (a_file_name: READABLE_STRING_GENERAL) -- Load the OpenGL library contained in file at a_file_name require not_already_enabled: not is_gl_enabled video_must_be_loaded: is_video_enable file_valid: attached (create {RAW_FILE}.make_with_name (a_file_name)) as la_file and then (la_file.exists and la_file.is_access_readable) is_gl_enabled: BOOLEAN -- The OpenGL library has been loaded feature -- Other methods base_path: PATH -- The PATH of the executable. This PATH is not safe for writing file. clear_all_events -- Clear every events set in the system delay (a_millisecond: NATURAL_32) -- Pause the execution for given time in millisecond. events_controller: GAME_EVENTS_CONTROLLER -- Manage every internal events get_preference_path (a_organisation, a_application_name: READABLE_STRING_GENERAL) -- Retreive the preference_path. Create the directory if it does not already exist. is_preference_path_retreived: BOOLEAN -- Is preference_path has been correctly retreived by get_preference_path iteration_per_second: NATURAL_32 assign set_iteration_per_second -- An approximation of the number of event loop iteration per second. -- Not used by launch_no_delay launch -- Start the main loop. Used to get a Event-driven programming only. -- Don't forget to execute the method stop in an event handeler. launch_no_delay -- Start the main loop without any loop delay. Use it if you have -- a synchronisation system (like vsync) included inside the event handler -- Used to get a Event-driven programming only. -- Don't forget to execute the method stop in an event handler. launch_with_iteration_per_second (a_iteration_per_second: NATURAL_32) -- Start the main loop. Used to get a Event-driven programming only. -- Don't forget to execute the method stop in an event handeler. -- Set iteration_per_second to a_iteration_per_second before launching. library_variable (a_variable: READABLE_STRING_GENERAL): READABLE_STRING_GENERAL assign set_library_variable -- Retreive the internal variable a_variable or an empty text if it does not exist. mouse_haptic: GAME_HAPTIC_MOUSE -- The haptic device inside the mouse require mouse_has_haptic: mouse_has_haptic mouse_has_haptic: BOOLEAN -- Has the mouse have an internal haptic device preference_path: PATH -- The PATH to save preference files. Is retreived (or created) by get_preference_path -- The directory pointed by this PATH should be writable -- Do not use the base_path to write files require path_retreived: is_preference_path_retreived quit_library -- Close the library. Must be used before the end of the application set_iteration_per_second (a_iteration_per_second: NATURAL_32) -- Set iteration_per_second to a_iteration_per_second -- Note that this is an aproximation. set_library_variable (a_variable, a_value: READABLE_STRING_GENERAL) -- Assign the internal variable a_variable with the value a_value. stop -- Stop the main loop time_since_create: NATURAL_32 -- Number of millisecond since the initialisation of the library. update_events -- Execute the event polling and throw the event handeler execution for each event. feature -- Output Io: STD_FILES -- Handle to standard file setup -- (from ANY) ensure -- from ANY instance_free: class io_not_void: Result /= Void out: STRING_8 -- New string containing terse printable representation -- of current object -- (from ANY) ensure -- from ANY out_not_void: Result /= Void print (o: detachable ANY) -- Write terse external representation of o -- on standard output. -- (from ANY) ensure -- from ANY instance_free: class frozen tagged_out: STRING_8 -- New string containing terse printable representation -- of current object -- (from ANY) ensure -- from ANY tagged_out_not_void: Result /= Void feature -- Platform Operating_environment: OPERATING_ENVIRONMENT -- Objects available from the operating system -- (from ANY) ensure -- from ANY instance_free: class operating_environment_not_void: Result /= Void feature -- Subs Systems disable_events -- Disable the events fonctionality require sdl_controller_disable_events_not_enabled: is_events_enable ensure sdl_controller_disable_events_disabled: not is_events_enable disable_haptic -- Disable the haptic (force feedback) fonctionality require sdl_controller_disable_haptic_not_enabled: is_haptic_enable ensure sdl_controller_disable_haptic_disabled: not is_haptic_enable disable_joystick -- Disable the joystick fonctionality require sdl_controller_disable_joystick_not_enabled: is_joystick_enable ensure sdl_controller_disable_joystick_disabled: not is_joystick_enable disable_video -- Disable the video functionalities require sdl_controller_disable_video_not_enabled: is_video_enable ensure sdl_controller_disable_video_disabled: not is_video_enable enable_events -- Unable the events functionality. require sdl_controller_enable_events_already_enabled: not is_events_enable ensure sdl_controller_enable_events_enabled: is_events_enable enable_haptic -- Unable the haptic (force feedback) functionality. -- Often use for Controller rumble. require sdl_controller_enable_haptic_already_enabled: not is_haptic_enable ensure sdl_controller_enable_haptic_enabled: is_haptic_enable enable_joystick -- Unable the joystick functionality require sdl_controller_enable_joystick_already_enabled: not is_joystick_enable ensure sdl_controller_enable_joystick_enabled: is_joystick_enable enable_video -- Unable the video functionalities require sdl_controller_enable_video_already_enabled: not is_video_enable ensure sdl_controller_enable_video_enabled: is_video_enable is_events_enable: BOOLEAN assign set_is_events_enable -- Return true if the events functionnality is enabled. is_haptic_enable: BOOLEAN assign set_is_haptic_enable -- Return true if the haptic (force feedback) functionnality is enabled. is_joystick_enable: BOOLEAN assign set_is_joystick_enable -- Return true if the joystick functionnality is enabled. is_video_enable: BOOLEAN assign set_is_video_enable -- Return true if the text surface functionnality is enabled. set_is_events_enable (a_value: BOOLEAN) -- Assign to is_events_enable the value of a_value ensure is_assign: is_events_enable ~ a_value set_is_haptic_enable (a_value: BOOLEAN) -- Assign to is_haptic_enable the value of a_value ensure is_assign: is_haptic_enable ~ a_value set_is_joystick_enable (a_value: BOOLEAN) -- Assign to is_joystick_enable the value of a_value ensure is_assign: is_joystick_enable ~ a_value set_is_video_enable (a_value: BOOLEAN) -- Assign to is_video_enable the value of a_value ensure is_assign: is_video_enable ~ a_value feature -- Touch devices refresh_touch_devices -- Update the touch_devices list. Note that -- all touch events will have to be reset touch_device_count: INTEGER_32 -- The number of touch device detected on the system. -- Note: Not necessary the same as touch_devices.count -- because a touch device can have been added or remove -- since the creation of the touch_devices list. -- In that case, used refresh_touch_devices to update -- the touch_devices (all touch events will have to be -- reset) touch_devices: CHAIN_INDEXABLE_ITERATOR [GAME_TOUCH_DEVICE] -- Every finger touch device detected in he system. -- This list does not update itself, you have to call -- refresh_touch_devices to update it (all touch -- events will have to be reset) feature -- Touch devices implementation Dollar_gesture_template_index: INTEGER_64 = -1 -- The internal index of the managed touch device feature -- Video methods displays: LIST [GAME_DISPLAY] -- All displays of the system. 0 display on error. require displays_is_video_enabled: is_video_enable displays_count: INTEGER_32 -- Return the number of display. 0 if error. require displays_count_is_video_enabled: is_video_enable renderer_drivers: LIST [GAME_RENDERER_DRIVER] -- All renderer driver of the system. 0 driver on error. require displays_is_video_enabled: is_video_enable renderer_drivers_count: INTEGER_32 -- Return the number of renderer driver. 0 if error. require video_enabled: is_video_enable windows: CHAIN_INDEXABLE_ITERATOR [GAME_WINDOW] -- Every GAME_WINDOW in the system. invariant is_singleton: Instance_count.item = 1 -- from ANY reflexive_equality: standard_is_equal (Current) reflexive_conformance: conforms_to (Current) end -- class GAME_LIBRARY_CONTROLLER
Generated by ISE EiffelStudio