OSDN Git Service

436277d3a42b30e319a70539f4534412ecd847c5
[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         RouteList m_shipRouteList;
15         IGVOShipRouteListObserver * m_observer = nullptr;
16         size_t m_maxRouteCountWithoutFavorits = 30;     //!<@brief \82¨\8bC\82É\93ü\82è\82ð\8f\9c\8aO\82µ\82½\8dq\98H\95Û\91\90\94
17
18 public:
19         GVOShipRouteList() = default;
20         ~GVOShipRouteList() = default;
21
22         void setObserver( IGVOShipRouteListObserver * observer )
23         {
24                 m_observer = observer;
25         }
26
27         void closeRoute();
28
29         void addRoutePoint(const GVONormalizedPoint point);
30
31         const RouteList & getList() const
32         {
33                 return m_shipRouteList;
34         }
35
36         GVOShipRoutePtr getRouteAtReverseIndex( int reverseIndex )
37         {
38                 if ( m_shipRouteList.size() <= (size_t)reverseIndex ) {
39                         return nullptr;
40                 }
41                 RouteList::iterator it;
42                 it = m_shipRouteList.begin();
43                 std::advance( it, indexFromReverseIndex( reverseIndex ) );
44                 _ASSERT( *it != nullptr );
45                 return *it;
46         }
47
48         int reverseIndexFromShipRoute( GVOShipRoutePtr shipRoute ) const
49         {
50                 auto it = std::find( m_shipRouteList.crbegin(), m_shipRouteList.crend(), shipRoute );
51                 if ( it == m_shipRouteList.crend() ) {
52                         return -1;
53                 }
54                 const int reverseIndex = std::distance( m_shipRouteList.crbegin(), it );
55                 return reverseIndex;
56         }
57
58         //void removeShipRouteAtReverseIndex( int reverseIndex );
59
60         void removeShipRoute( GVOShipRoutePtr shipRoute );
61
62         void clearAllItems();
63
64         void joinPreviousRouteAtReverseIndex( int reverseIndex );
65 private:
66         int indexFromReverseIndex( int reverseIndex ) const
67         {
68                 return m_shipRouteList.size() - reverseIndex - 1;
69         }
70         void addRoute();
71 };
72
73
74 //!@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
75 class IGVOShipRouteListObserver {
76 public:
77         IGVOShipRouteListObserver() = default;
78         virtual ~IGVOShipRouteListObserver() = default;
79
80         virtual void onShipRouteListAddRoute( GVOShipRoutePtr shipRoute ) = 0;
81         virtual void onShipRouteListUpdateRoute( GVOShipRoutePtr shipRoute ) = 0;
82         virtual void onShipRouteListRemoveItem( GVOShipRoutePtr shipRoute ) = 0;
83         virtual void onShipRouteListRemoveAllItems() = 0;
84 };