OSDN Git Service

航路保存機能試作。
[gvonavish/GVONavish.git] / GVONavish / GVONavish / GVOShipRouteList.h
1 #pragma once
2 #include <list>
3 #include "GVONavish.h"
4 #include "GVOShipRoute.h"
5 #include "GVONormalizedPoint.h"
6
7 class GVOShipRouteList;
8 class IGVOShipRouteListObserver;
9
10 //!@brief \8dq\98H\83\8a\83X\83g\8aÇ\97\9d\83N\83\89\83X
11 class GVOShipRouteList {
12 private:
13         typedef std::list<GVOShipRoutePtr> RouteList;
14
15 private:
16         RouteList m_shipRouteList;
17         IGVOShipRouteListObserver * m_observer = nullptr;
18         size_t m_maxRouteCountWithoutFavorits = 30;     //!<@brief \82¨\8bC\82É\93ü\82è\82ð\8f\9c\8aO\82µ\82½\8dq\98H\95Û\91\90\94
19
20 public:
21         GVOShipRouteList() = default;
22         ~GVOShipRouteList() = default;
23
24         //!@note \82 \82ñ\82Ü\82è\8ds\8bV\82ª\97Ç\82¢\8e\96\82\82á\82È\82¢\82¯\82ê\82Ç\81B
25         bool saveToFile( const std::wstring & filePath );
26
27         //!@note \82 \82ñ\82Ü\82è\8ds\8bV\82ª\97Ç\82¢\8e\96\82\82á\82È\82¢\82¯\82ê\82Ç\81B
28         bool loadFromFile( const std::wstring & filePath );
29
30
31         void setObserver( IGVOShipRouteListObserver * observer )
32         {
33                 m_observer = observer;
34         }
35
36         void closeRoute();
37
38         void addRoutePoint(const GVONormalizedPoint point);
39
40         const RouteList & getList() const
41         {
42                 return m_shipRouteList;
43         }
44
45         GVOShipRoutePtr getRouteAtReverseIndex( int reverseIndex )
46         {
47                 if ( m_shipRouteList.size() <= (size_t)reverseIndex ) {
48                         return nullptr;
49                 }
50                 RouteList::iterator it;
51                 it = m_shipRouteList.begin();
52                 std::advance( it, indexFromReverseIndex( reverseIndex ) );
53                 _ASSERT( *it != nullptr );
54                 return *it;
55         }
56
57         int reverseIndexFromShipRoute( GVOShipRoutePtr shipRoute ) const
58         {
59                 auto it = std::find( m_shipRouteList.crbegin(), m_shipRouteList.crend(), shipRoute );
60                 if ( it == m_shipRouteList.crend() ) {
61                         return -1;
62                 }
63                 const int reverseIndex = std::distance( m_shipRouteList.crbegin(), it );
64                 return reverseIndex;
65         }
66
67         void removeShipRoute( GVOShipRoutePtr shipRoute );
68
69         void clearAllItems();
70
71         void joinPreviousRouteAtReverseIndex( int reverseIndex );
72 private:
73         int indexFromReverseIndex( int reverseIndex ) const
74         {
75                 return m_shipRouteList.size() - reverseIndex - 1;
76         }
77         void addRoute();
78 };
79
80
81 //!@brief \8dq\98H\8aÇ\97\9d\83\8a\83X\83g\82ð\8aÄ\8e\8b\82·\82é\83C\83\93\83^\81[\83t\83F\81[\83X
82 class IGVOShipRouteListObserver {
83 public:
84         IGVOShipRouteListObserver() = default;
85         virtual ~IGVOShipRouteListObserver() = default;
86
87         virtual void onShipRouteListAddRoute( GVOShipRoutePtr shipRoute ) = 0;
88         virtual void onShipRouteListUpdateRoute( GVOShipRoutePtr shipRoute ) = 0;
89         virtual void onShipRouteListRemoveItem( GVOShipRoutePtr shipRoute ) = 0;
90         virtual void onShipRouteListRemoveAllItems() = 0;
91 };