neoGFX
C++ GPU-oriented GUI library and app/game creation framework.
neogfx::sprite_plane Class Reference

#include <sprite_plane.hpp>

Inheritance diagram for neogfx::sprite_plane:
neogfx::widget neogfx::i_shape_container neogfx::object< i_widget > neogfx::i_widget neogfx::i_properties neolib::basic_lifetime< FlagListRepresentation > neogfx::i_object neogfx::i_layout_item neogfx::i_keyboard_handler neogfx::i_skinnable_item neolib::i_lifetime neogfx::i_geometry neogfx::i_object neogfx::i_units_context

Public Types

typedef i_physical_object::step_time_interval step_time_interval
 
typedef i_physical_object::time_interval time_interval
 
typedef i_physical_object::optional_time_interval optional_time_interval
 
typedef i_physical_object::optional_step_time_interval optional_step_time_interval
 
typedef std::shared_ptr< i_game_objectobject_pointer
 
typedef std::vector< object_pointerobject_list
 
typedef std::vector< i_shape * > shape_list
 
typedef aabb_quadtree broad_phase_collision_tree_2d
 
typedef aabb_octree broad_phase_collision_tree_3d
 
typedef std::pair< i_collidable_object *, i_collidable_object * > collision_pair
 
typedef std::unordered_set< collision_pair, boost::hash< collision_pair >, std::equal_to< collision_pair >, boost::fast_pool_allocator< collision_pair > > collision_list
 
- Public Types inherited from neogfx::i_widget
typedef std::vector< std::shared_ptr< i_widget > > widget_list
 

Public Member Functions

 sprite_plane ()
 
 sprite_plane (i_widget &aParent)
 
 sprite_plane (i_layout &aLayout)
 
 ~sprite_plane ()
 
virtual neogfx::logical_coordinate_system logical_coordinate_system () const
 
virtual void paint (graphics_context &aGraphicsContext) const
 
virtual void mouse_button_pressed (mouse_button aButton, const point &aPosition, key_modifiers_e aKeyModifiers)
 
virtual const i_widgetas_widget () const
 
virtual i_widgetas_widget ()
 
bool dynamic_update_enabled () const
 
void enable_dynamic_update (bool aEnableDynamicUpdate)
 
void enable_z_sorting (bool aEnableZSorting)
 
void add_sprite (i_sprite &aObject)
 
void add_sprite (std::shared_ptr< i_sprite > aObject)
 
void add_physical_object (i_physical_object &aObject)
 
void add_physical_object (std::shared_ptr< i_physical_object > aObject)
 
void add_shape (i_shape &aObject)
 
void add_shape (std::shared_ptr< i_shape > aObject)
 
i_spritecreate_sprite ()
 
i_spritecreate_sprite (const i_texture &aTexture)
 
i_spritecreate_sprite (const i_image &aImage)
 
i_spritecreate_sprite (const i_texture &aTexture, const rect &aTextureRect)
 
i_spritecreate_sprite (const i_image &aImage, const rect &aTextureRect)
 
scalar gravitational_constant () const
 
void set_gravitational_constant (scalar aG)
 
const optional_vec3uniform_gravity () const
 
void set_uniform_gravity (const optional_vec3 &aUniformGravity=vec3{ 0.0, -9.80665, 0.0})
 
i_physical_objectcreate_earth ()
 adds gravity by simulating the earth, groundlevel at y = 0; More...
 
i_physical_objectcreate_physical_object ()
 
const optional_step_time_intervalphysics_time () const
 
void set_physics_time (const optional_step_time_interval &aTime)
 
step_time_interval physics_step_interval () const
 
void set_physics_step_interval (step_time_interval aStepInterval)
 
void reserve (std::size_t aCapacity)
 
const object_listobjects () const
 
void add_object (std::shared_ptr< i_game_object > aObject)
 
bool is_collision_tree_2d () const
 
bool is_collision_tree_3d () const
 
const broad_phase_collision_tree_2dcollision_tree_2d () const
 
broad_phase_collision_tree_2dcollision_tree_2d ()
 
const broad_phase_collision_tree_3dcollision_tree_3d () const
 
broad_phase_collision_tree_3dcollision_tree_3d ()
 
double update_time () const
 
- Public Member Functions inherited from neogfx::widget
 widget ()
 
 widget (const widget &)=delete
 
 widget (i_widget &aParent)
 
 widget (i_layout &aLayout)
 
 ~widget ()
 
void property_changed (i_property &aProperty) override
 
bool is_singular () const override
 
void set_singular (bool aSingular) override
 
bool is_root () const override
 
bool has_root () const override
 
const i_windowroot () const override
 
i_windowroot () override
 
bool has_parent (bool aSameSurface=true) const override
 
const i_widgetparent () const override
 
i_widgetparent () override
 
void set_parent (i_widget &aParent) override
 
void parent_changed () override
 
const i_widgetultimate_ancestor (bool aSameSurface=true) const override
 
i_widgetultimate_ancestor (bool aSameSurface=true) override
 
bool is_ancestor_of (const i_widget &aWidget, bool aSameSurface=true) const override
 
bool is_descendent_of (const i_widget &aWidget, bool aSameSurface=true) const override
 
bool is_sibling_of (const i_widget &aWidget) const override
 
bool adding_child () const override
 
i_widgetadd (i_widget &aChild) override
 
i_widgetadd (std::shared_ptr< i_widget > aChild) override
 
std::shared_ptr< i_widgetremove (i_widget &aChild, bool aSingular=false) override
 
void remove_all () override
 
bool has_children () const override
 
const widget_listchildren () const override
 
widget_list::const_iterator last () const override
 
widget_list::iterator last () override
 
widget_list::const_iterator find (const i_widget &aChild, bool aThrowIfNotFound=true) const override
 
widget_list::iterator find (const i_widget &aChild, bool aThrowIfNotFound=true) override
 
const i_widgetbefore () const override
 
i_widgetbefore () override
 
const i_widgetafter () const override
 
i_widgetafter () override
 
void link_before (i_widget *aPreviousWidget) override
 
void link_after (i_widget *aNextWidget) override
 
void unlink () override
 
bool has_surface () const override
 
const i_surfacesurface () const override
 
i_surfacesurface () override
 
bool is_surface () const override
 
bool has_layout () const override
 
void set_layout (i_layout &aLayout, bool aMoveExistingItems=true) override
 
void set_layout (std::shared_ptr< i_layout > aLayout, bool aMoveExistingItems=true) override
 
const i_layoutlayout () const override
 
i_layoutlayout () override
 
bool can_defer_layout () const override
 
bool has_managing_layout () const override
 
const i_widgetmanaging_layout () const override
 
i_widgetmanaging_layout () override
 
bool is_managing_layout () const override
 
void layout_items (bool aDefer=false) override
 
void layout_items_started () override
 
bool layout_items_in_progress () const override
 
void layout_items_completed () override
 
bool high_dpi () const override
 
dimension dpi_scale_factor () const override
 
bool device_metrics_available () const override
 
const i_device_metricsdevice_metrics () const override
 
neogfx::units units () const override
 
neogfx::units set_units (neogfx::units aUnits) const override
 
point position () const override
 
void set_position (const point &aPosition) override
 
size extents () const override
 
void set_extents (const size &aSize) override
 
bool has_size_policy () const override
 
neogfx::size_policy size_policy () const override
 
void set_size_policy (const optional_size_policy &aSizePolicy, bool aUpdateLayout=true) override
 
bool has_weight () const override
 
size weight () const override
 
void set_weight (const optional_size &aWeight, bool aUpdateLayout=true) override
 
bool has_minimum_size () const override
 
size minimum_size (const optional_size &aAvailableSpace=optional_size{}) const override
 
void set_minimum_size (const optional_size &aMinimumSize, bool aUpdateLayout=true) override
 
bool has_maximum_size () const override
 
size maximum_size (const optional_size &aAvailableSpace=optional_size{}) const override
 
void set_maximum_size (const optional_size &aMaximumSize, bool aUpdateLayout=true) override
 
bool has_margins () const override
 
neogfx::margins margins () const override
 
void set_margins (const optional_margins &aMargins, bool aUpdateLayout=true) override
 
bool is_widget () const override
 
const i_widgetas_widget () const override
 
i_widgetas_widget () override
 
rect non_client_rect () const override
 
rect client_rect (bool aIncludeMargins=true) const override
 
bool has_logical_coordinate_system () const override
 
neogfx::logical_coordinate_system logical_coordinate_system () const override
 
void set_logical_coordinate_system (const optional_logical_coordinate_system &aLogicalCoordinateSystem) override
 
point origin () const override
 
void move (const point &aPosition) override
 
void moved () override
 
void resize (const size &aSize) override
 
void resized () override
 
const i_widgetget_widget_at (const point &aPosition) const override
 
i_widgetget_widget_at (const point &aPosition) override
 
widget_part hit_test (const point &aPosition) const override
 
bool is_layout () const override
 
const i_layoutas_layout () const override
 
i_layoutas_layout () override
 
bool has_parent_layout () const override
 
const i_layoutparent_layout () const override
 
i_layoutparent_layout () override
 
void set_parent_layout (i_layout *aParentLayout) override
 
bool has_layout_owner () const override
 
const i_widgetlayout_owner () const override
 
i_widgetlayout_owner () override
 
void set_layout_owner (i_widget *aOwner) override
 
bool is_proxy () const override
 
const i_layout_item_proxylayout_item_proxy () const override
 
i_layout_item_proxylayout_item_proxy () override
 
void layout_as (const point &aPosition, const size &aSize) override
 
void update (bool aIncludeNonClient=false) override
 
void update (const rect &aUpdateRect) override
 
bool requires_update () const override
 
rect update_rect () const override
 
rect default_clip_rect (bool aIncludeNonClient=false) const override
 
bool ready_to_render () const override
 
void render (graphics_context &aGraphicsContext) const override
 
bool transparent_background () const override
 
void paint_non_client (graphics_context &aGraphicsContext) const override
 
void paint (graphics_context &aGraphicsContext) const override
 
void paint_non_client_after (graphics_context &aGraphicsContext) const override
 
double opacity () const override
 
void set_opacity (double aOpacity) override
 
double transparency () const override
 
void set_transparency (double aTransparency) override
 
bool has_foreground_colour () const override
 
colour foreground_colour () const override
 
void set_foreground_colour (const optional_colour &aForegroundColour=optional_colour{}) override
 
bool has_background_colour () const override
 
colour background_colour () const override
 
void set_background_colour (const optional_colour &aBackgroundColour=optional_colour{}) override
 
colour container_background_colour () const override
 
bool has_font () const override
 
const neogfx::fontfont () const override
 
void set_font (const optional_font &aFont) override
 
bool visible () const override
 
bool effectively_visible () const override
 
bool hidden () const override
 
bool effectively_hidden () const override
 
bool show (bool aVisible) override
 
bool enabled () const override
 
bool effectively_enabled () const override
 
bool disabled () const override
 
bool effectively_disabled () const override
 
bool enable (bool aEnable) override
 
bool entered () const override
 
bool can_capture () const override
 
bool capturing () const override
 
void set_capture (capture_reason aReason=capture_reason::Other) override
 
void release_capture (capture_reason aReason=capture_reason::Other) override
 
void non_client_set_capture () override
 
void non_client_release_capture () override
 
void captured () override
 
void released () override
 
neogfx::focus_policy focus_policy () const override
 
void set_focus_policy (neogfx::focus_policy aFocusPolicy) override
 
bool has_focus () const override
 
void set_focus (focus_reason aFocusReason=focus_reason::Other) override
 
void release_focus () override
 
void focus_gained (focus_reason aFocusReason) override
 
void focus_lost (focus_reason aFocusReason) override
 
bool ignore_mouse_events () const override
 
void set_ignore_mouse_events (bool aIgnoreMouseEvents) override
 
bool ignore_non_client_mouse_events () const override
 
void set_ignore_non_client_mouse_events (bool aIgnoreNonClientMouseEvents) override
 
bool mouse_event_is_non_client () const override
 
void mouse_wheel_scrolled (mouse_wheel aWheel, delta aDelta) override
 
void mouse_button_pressed (mouse_button aButton, const point &aPosition, key_modifiers_e aKeyModifiers) override
 
void mouse_button_double_clicked (mouse_button aButton, const point &aPosition, key_modifiers_e aKeyModifiers) override
 
void mouse_button_released (mouse_button aButton, const point &aPosition) override
 
void mouse_moved (const point &aPosition) override
 
void mouse_entered (const point &aPosition) override
 
void mouse_left () override
 
neogfx::mouse_cursor mouse_cursor () const override
 
bool key_pressed (scan_code_e aScanCode, key_code_e aKeyCode, key_modifiers_e aKeyModifiers) override
 
bool key_released (scan_code_e aScanCode, key_code_e aKeyCode, key_modifiers_e aKeyModifiers) override
 
bool text_input (const std::string &aText) override
 
bool sys_text_input (const std::string &aText) override
 
graphics_context create_graphics_context () const override
 
const i_widgetwidget_for_mouse_event (const point &aPosition, bool aForHitTest=false) const override
 
i_widgetwidget_for_mouse_event (const point &aPosition, bool aForHitTest=false) override
 
- Public Member Functions inherited from neogfx::object< i_widget >
neolib::i_lifetimeas_lifetime () override
 
void property_changed (i_property &) override
 
const i_propertiesproperties () const override
 
i_propertiesproperties () override
 
virtual void register_property (i_property &aProperty)
 
virtual const property_mapmap () const
 
- Public Member Functions inherited from neogfx::i_widget
virtual ~i_widget ()
 
template<typename WidgetType , typename... Args>
WidgetType & emplace (Args &&... args)
 
bool same_surface (const i_widget &aWidget) const
 
point to_window_coordinates (const point &aClientCoordinates) const
 
rect to_window_coordinates (const rect &aClientCoordinates) const
 
point to_client_coordinates (const point &aWindowCoordinates) const
 
rect to_client_coordinates (const rect &aWindowCoordinates) const
 
bool show ()
 
bool hide ()
 
bool enable ()
 
bool disable ()
 
- Public Member Functions inherited from neogfx::i_layout_item
virtual ~i_layout_item ()
 
- Public Member Functions inherited from neogfx::i_geometry
void set_size_policy (neogfx::size_policy::size_policy_e aSizePolicy, bool aUpdateLayout=true)
 
void set_size_policy (neogfx::size_policy::size_policy_e aSizePolicy, const size &aAspectRatio, bool aUpdateLayout=true)
 
void set_size_policy (neogfx::size_policy::size_policy_e aHorizontalSizePolicy, neogfx::size_policy::size_policy_e aVerticalSizePolicy, bool aUpdateLayout=true)
 
void set_size_policy (neogfx::size_policy::size_policy_e aHorizontalSizePolicy, neogfx::size_policy::size_policy_e aVerticalSizePolicy, const size &aAspectRatio, bool aUpdateLayout=true)
 
void set_fixed_size (const size &aSize, bool aUpdateLayout=true)
 
void set_minimum_width (dimension aWidth, bool aUpdateLayout=true)
 
void set_minimum_height (dimension aHeight, bool aUpdateLayout=true)
 
void set_maximum_width (dimension aWidth, bool aUpdateLayout=true)
 
void set_maximum_height (dimension aHeight, bool aUpdateLayout=true)
 
- Public Member Functions inherited from neogfx::i_units_context
dimension dpi_scale (dimension aValue) const
 
size dpi_scale (const size &aSize) const
 
point dpi_scale (const point &aPoint) const
 
margins dpi_scale (const margins &aMargins) const
 
template<typename T >
T && dpi_select (T &&aLowDpiValue, T &&aHighDpiValue) const
 
- Public Member Functions inherited from neogfx::i_properties
uint32_t count () const
 
std::string name (uint32_t aIndex) const
 
const i_propertyproperty (uint32_t aIndex) const
 
i_propertyproperty (uint32_t aIndex)
 

Public Attributes

event< step_time_intervalapplying_physics
 
event< step_time_intervalphysics_applied
 
event< step_time_intervaltaking_snapshot
 
event< graphics_context & > painting_sprites
 
event< graphics_context & > sprites_painted
 
event< i_game_object &, i_game_object & > object_collision
 
event< i_game_object & > object_clicked
 
- Public Attributes inherited from neogfx::i_widget
event visibility_changed
 
event position_changed
 
event size_changed
 
event layout_completed
 
event< graphics_context & > painting
 
event< graphics_context & > painted
 
event< graphics_context & > children_painted
 
event< const neogfx::mouse_event & > mouse_event
 
event< const neogfx::non_client_mouse_event & > non_client_mouse_event
 
event< const neogfx::keyboard_event & > keyboard_event
 
event< neogfx::focus_eventfocus_event
 

Additional Inherited Members

- Static Public Attributes inherited from neogfx::i_widget
static i_widgetdebug
 
- Protected Types inherited from neogfx::i_widget
typedef std::unordered_set< rectupdate_rect_list
 
- Protected Types inherited from neolib::basic_lifetime< FlagListRepresentation >
typedef neolib::destroyed_flag destroyed_flag
 
typedef flag_list_representation_type::flag_list flag_list
 
- Protected Member Functions inherited from neolib::basic_lifetime< FlagListRepresentation >
 basic_lifetime (enum class lifetime_state aState=lifetime_state::Alive)
 
virtual ~basic_lifetime ()
 
enum lifetime_state lifetime_state () const final
 
bool is_creating () const final
 
bool is_alive () const final
 
bool is_destroying () const final
 
bool is_destroyed () const final
 
void set_alive () override
 
void set_destroying () override
 
void set_destroyed () override
 
void add_flag (i_lifetime_flag *aFlag) const final
 
void remove_flag (i_lifetime_flag *aFlag) const final
 
- Protected Member Functions inherited from neolib::i_lifetime
virtual ~i_lifetime ()
 

Detailed Description

Definition at line 35 of file sprite_plane.hpp.

Member Typedef Documentation

◆ broad_phase_collision_tree_2d

◆ broad_phase_collision_tree_3d

◆ collision_list

typedef std::unordered_set<collision_pair, boost::hash<collision_pair>, std::equal_to<collision_pair>, boost::fast_pool_allocator<collision_pair> > neogfx::sprite_plane::collision_list

Definition at line 58 of file sprite_plane.hpp.

◆ collision_pair

◆ object_list

Definition at line 53 of file sprite_plane.hpp.

◆ object_pointer

Definition at line 52 of file sprite_plane.hpp.

◆ optional_step_time_interval

◆ optional_time_interval

◆ shape_list

Definition at line 54 of file sprite_plane.hpp.

◆ step_time_interval

◆ time_interval

Constructor & Destructor Documentation

◆ sprite_plane() [1/3]

neogfx::sprite_plane::sprite_plane ( )

◆ sprite_plane() [2/3]

neogfx::sprite_plane::sprite_plane ( i_widget aParent)

◆ sprite_plane() [3/3]

neogfx::sprite_plane::sprite_plane ( i_layout aLayout)

◆ ~sprite_plane()

neogfx::sprite_plane::~sprite_plane ( )

Member Function Documentation

◆ add_object()

void neogfx::sprite_plane::add_object ( std::shared_ptr< i_game_object aObject)

◆ add_physical_object() [1/2]

void neogfx::sprite_plane::add_physical_object ( i_physical_object aObject)

◆ add_physical_object() [2/2]

void neogfx::sprite_plane::add_physical_object ( std::shared_ptr< i_physical_object aObject)

◆ add_shape() [1/2]

void neogfx::sprite_plane::add_shape ( i_shape aObject)

◆ add_shape() [2/2]

void neogfx::sprite_plane::add_shape ( std::shared_ptr< i_shape aObject)

◆ add_sprite() [1/2]

void neogfx::sprite_plane::add_sprite ( i_sprite aObject)

◆ add_sprite() [2/2]

void neogfx::sprite_plane::add_sprite ( std::shared_ptr< i_sprite aObject)

◆ as_widget() [1/2]

virtual const i_widget& neogfx::sprite_plane::as_widget ( ) const
virtual

◆ as_widget() [2/2]

virtual i_widget& neogfx::sprite_plane::as_widget ( )
virtual

◆ collision_tree_2d() [1/2]

const broad_phase_collision_tree_2d& neogfx::sprite_plane::collision_tree_2d ( ) const

◆ collision_tree_2d() [2/2]

broad_phase_collision_tree_2d& neogfx::sprite_plane::collision_tree_2d ( )

◆ collision_tree_3d() [1/2]

const broad_phase_collision_tree_3d& neogfx::sprite_plane::collision_tree_3d ( ) const

◆ collision_tree_3d() [2/2]

broad_phase_collision_tree_3d& neogfx::sprite_plane::collision_tree_3d ( )

◆ create_earth()

i_physical_object& neogfx::sprite_plane::create_earth ( )

adds gravity by simulating the earth, groundlevel at y = 0;

◆ create_physical_object()

i_physical_object& neogfx::sprite_plane::create_physical_object ( )

◆ create_sprite() [1/5]

i_sprite& neogfx::sprite_plane::create_sprite ( )

◆ create_sprite() [2/5]

i_sprite& neogfx::sprite_plane::create_sprite ( const i_texture aTexture)

◆ create_sprite() [3/5]

i_sprite& neogfx::sprite_plane::create_sprite ( const i_image aImage)

◆ create_sprite() [4/5]

i_sprite& neogfx::sprite_plane::create_sprite ( const i_texture aTexture,
const rect aTextureRect 
)

◆ create_sprite() [5/5]

i_sprite& neogfx::sprite_plane::create_sprite ( const i_image aImage,
const rect aTextureRect 
)

◆ dynamic_update_enabled()

bool neogfx::sprite_plane::dynamic_update_enabled ( ) const

◆ enable_dynamic_update()

void neogfx::sprite_plane::enable_dynamic_update ( bool  aEnableDynamicUpdate)

◆ enable_z_sorting()

void neogfx::sprite_plane::enable_z_sorting ( bool  aEnableZSorting)

◆ gravitational_constant()

scalar neogfx::sprite_plane::gravitational_constant ( ) const

◆ is_collision_tree_2d()

bool neogfx::sprite_plane::is_collision_tree_2d ( ) const

◆ is_collision_tree_3d()

bool neogfx::sprite_plane::is_collision_tree_3d ( ) const

◆ logical_coordinate_system()

virtual neogfx::logical_coordinate_system neogfx::sprite_plane::logical_coordinate_system ( ) const
virtual

Implements neogfx::i_widget.

◆ mouse_button_pressed()

virtual void neogfx::sprite_plane::mouse_button_pressed ( mouse_button  aButton,
const point aPosition,
key_modifiers_e  aKeyModifiers 
)
virtual

Implements neogfx::i_widget.

◆ objects()

const object_list& neogfx::sprite_plane::objects ( ) const

◆ paint()

virtual void neogfx::sprite_plane::paint ( graphics_context aGraphicsContext) const
virtual

Implements neogfx::i_widget.

◆ physics_step_interval()

step_time_interval neogfx::sprite_plane::physics_step_interval ( ) const

◆ physics_time()

const optional_step_time_interval& neogfx::sprite_plane::physics_time ( ) const

◆ reserve()

void neogfx::sprite_plane::reserve ( std::size_t  aCapacity)

◆ set_gravitational_constant()

void neogfx::sprite_plane::set_gravitational_constant ( scalar  aG)

◆ set_physics_step_interval()

void neogfx::sprite_plane::set_physics_step_interval ( step_time_interval  aStepInterval)

◆ set_physics_time()

void neogfx::sprite_plane::set_physics_time ( const optional_step_time_interval aTime)

◆ set_uniform_gravity()

void neogfx::sprite_plane::set_uniform_gravity ( const optional_vec3 aUniformGravity = vec3{ 0.0, -9.80665, 0.0})

◆ uniform_gravity()

const optional_vec3& neogfx::sprite_plane::uniform_gravity ( ) const

◆ update_time()

double neogfx::sprite_plane::update_time ( ) const

Member Data Documentation

◆ applying_physics

event<step_time_interval> neogfx::sprite_plane::applying_physics

Definition at line 40 of file sprite_plane.hpp.

◆ object_clicked

event<i_game_object&> neogfx::sprite_plane::object_clicked

Definition at line 46 of file sprite_plane.hpp.

◆ object_collision

event<i_game_object&, i_game_object&> neogfx::sprite_plane::object_collision

Definition at line 45 of file sprite_plane.hpp.

◆ painting_sprites

event<graphics_context&> neogfx::sprite_plane::painting_sprites

Definition at line 43 of file sprite_plane.hpp.

◆ physics_applied

event<step_time_interval> neogfx::sprite_plane::physics_applied

Definition at line 41 of file sprite_plane.hpp.

◆ sprites_painted

event<graphics_context&> neogfx::sprite_plane::sprites_painted

Definition at line 44 of file sprite_plane.hpp.

◆ taking_snapshot

event<step_time_interval> neogfx::sprite_plane::taking_snapshot

Definition at line 42 of file sprite_plane.hpp.


The documentation for this class was generated from the following file: