OSDN Git Service

航行距離のデータ形式をdoubleに変更。少しは誤差が少なくなると思う。
authorMandhelingFreak <mandheling30-freak@yahoo.co.jp>
Mon, 10 Mar 2014 08:22:46 +0000 (17:22 +0900)
committerMandhelingFreak <mandheling30-freak@yahoo.co.jp>
Mon, 10 Mar 2014 08:23:49 +0000 (17:23 +0900)
最新航路を直前の航路と接続するボタンを設置。今の仕様だと頻繁に航路が途切れるので利便性向上を図る。
その他、少し気になるところを修正。

GVONavish/GVONavish/GVONavish.cpp
GVONavish/GVONavish/GVONavish.rc
GVONavish/GVONavish/GVORenderer.cpp
GVONavish/GVONavish/GVOShipRoute.cpp
GVONavish/GVONavish/GVOShipRoute.h
GVONavish/GVONavish/GVOShipRouteList.cpp
GVONavish/GVONavish/GVOShipRouteManageView.cpp
GVONavish/GVONavish/Resource.h

index ca2e033..78cdc6d 100644 (file)
@@ -574,7 +574,6 @@ static void s_onPaint( HWND hwnd )
 #ifdef GVO_PERF_CHECK
        const int64_t perfBegin = g_queryPerformanceCounter();
 #endif
 #ifdef GVO_PERF_CHECK
        const int64_t perfBegin = g_queryPerformanceCounter();
 #endif
-
        s_renderer.render( s_latestShipVector, s_latestShipVelocity, s_shipTexture.get(), s_shipRouteList.get() );
        ::ValidateRect( hwnd, NULL );
 
        s_renderer.render( s_latestShipVector, s_latestShipVelocity, s_shipTexture.get(), s_shipRouteList.get() );
        ::ValidateRect( hwnd, NULL );
 
@@ -642,7 +641,7 @@ static void s_updateFrame( HWND hwnd )
                s_latestShipVelocity = status.m_shipVelocity;
                s_config.m_initialSurveyCoord = s_latestSurveyCoord;
                s_renderer.setShipPositionInWorld( s_latestSurveyCoord );
                s_latestShipVelocity = status.m_shipVelocity;
                s_config.m_initialSurveyCoord = s_latestSurveyCoord;
                s_renderer.setShipPositionInWorld( s_latestSurveyCoord );
-               if ( (s_latestTimeStamp + k_surveyCoordLostThreshold) <= status.m_timeStamp ) {
+               if ( (s_latestTimeStamp + k_surveyCoordLostThreshold) < status.m_timeStamp ) {
                        s_closeShipRoute();
                }
                s_latestTimeStamp = status.m_timeStamp;
                        s_closeShipRoute();
                }
                s_latestTimeStamp = status.m_timeStamp;
index 9ab1b44..aa7321f 100644 (file)
@@ -80,8 +80,8 @@ CAPTION "
 FONT 11, "MS UI Gothic", 400, 0, 128
 {
     ICON            IDR_MAINFRAME, IDC_STATIC, 14, 14, 16, 17, SS_ICON, WS_EX_LEFT
 FONT 11, "MS UI Gothic", 400, 0, 128
 {
     ICON            IDR_MAINFRAME, IDC_STATIC, 14, 14, 16, 17, SS_ICON, WS_EX_LEFT
-    CONTROL         "GVONavish, Version 1.0", IDC_VERSION_LABEL, WC_STATIC, SS_LEFTNOWORDWRAP | SS_NOPREFIX, 42, 14, 149, 8, WS_EX_LEFT
-    CONTROL         "Copyright (C) 2014", IDC_COPYRIGHT_LABEL, WC_STATIC, SS_LEFTNOWORDWRAP, 42, 26, 149, 8, WS_EX_LEFT
+    CONTROL         "GVONavish, Version 1.0", IDC_VERSION_LABEL, WC_STATIC, NOT WS_GROUP | SS_LEFTNOWORDWRAP | SS_NOPREFIX, 42, 14, 149, 8, WS_EX_LEFT
+    CONTROL         "Copyright (C) 2014", IDC_COPYRIGHT_LABEL, WC_STATIC, NOT WS_GROUP | SS_LEFTNOWORDWRAP, 42, 26, 149, 8, WS_EX_LEFT
     DEFPUSHBUTTON   "OK", IDOK, 141, 52, 50, 14, WS_GROUP, WS_EX_LEFT
     LTEXT           "http://gvonavish.sourceforge.jp/", 0, 42, 39, 149, 8, SS_LEFT, WS_EX_LEFT
 }
     DEFPUSHBUTTON   "OK", IDOK, 141, 52, 50, 14, WS_GROUP, WS_EX_LEFT
     LTEXT           "http://gvonavish.sourceforge.jp/", 0, 42, 39, 149, 8, SS_LEFT, WS_EX_LEFT
 }
@@ -95,9 +95,10 @@ EXSTYLE WS_EX_WINDOWEDGE
 CAPTION "\8dq\98H\8aÇ\97\9d\83E\83B\83\93\83h\83E"
 FONT 11, "MS UI Gothic"
 {
 CAPTION "\8dq\98H\8aÇ\97\9d\83E\83B\83\93\83h\83E"
 FONT 11, "MS UI Gothic"
 {
-    PUSHBUTTON      "\8dq\98H\91I\91ð\82ð\89ð\8f\9c\82·\82é", IDM_DESELECT_ROUTE, 7, 7, 68, 14, 0, WS_EX_LEFT
-    PUSHBUTTON      "\90Ý\92è", IDM_ROUTE_MANAGE_OPTION, 179, 7, 28, 14, NOT WS_VISIBLE | WS_GROUP, WS_EX_LEFT
-    CONTROL         "", IDC_SHIPROUTELIST, WC_LISTVIEW, WS_GROUP | WS_TABSTOP | WS_BORDER | LVS_ALIGNLEFT | LVS_SHOWSELALWAYS | LVS_OWNERDATA | LVS_SINGLESEL | LVS_REPORT, 0, 26, 214, 89, WS_EX_LEFT
+    PUSHBUTTON      "\91I\91ð\89ð\8f\9c", IDM_DESELECT_ROUTE, 3, 3, 35, 14, 0, WS_EX_LEFT
+    PUSHBUTTON      "\90Ý\92è", IDM_ROUTE_MANAGE_OPTION, 183, 3, 28, 14, NOT WS_VISIBLE | WS_GROUP, WS_EX_LEFT
+    CONTROL         "", IDC_SHIPROUTELIST, WC_LISTVIEW, WS_GROUP | WS_TABSTOP | WS_BORDER | LVS_ALIGNLEFT | LVS_SHOWSELALWAYS | LVS_OWNERDATA | LVS_SINGLESEL | LVS_REPORT, 0, 22, 214, 93, WS_EX_LEFT
+    PUSHBUTTON      "\8dÅ\90V\8dq\98H\82ð\92¼\91O\8dq\98H\82Æ\90Ú\91±", IDM_JOINT_LATEST_ROUTE, 40, 3, 90, 14, 0, WS_EX_LEFT
 }
 
 
 }
 
 
index a878752..4a7d318 100644 (file)
@@ -79,14 +79,18 @@ void GVORenderer::setupGL()
        ::glDisable( GL_LIGHTING );
        ::glEnable( GL_CULL_FACE );
        ::glCullFace( GL_BACK );
        ::glDisable( GL_LIGHTING );
        ::glEnable( GL_CULL_FACE );
        ::glCullFace( GL_BACK );
+       ::wglMakeCurrent( NULL, NULL );
 }
 
 
 void GVORenderer::setWorldMap( const GVOWorldMap * worldMap )
 {
 }
 
 
 void GVORenderer::setWorldMap( const GVOWorldMap * worldMap )
 {
+       ::wglMakeCurrent( m_hdcPrimary, m_hglrc );
        m_worldMap = worldMap;
        m_worldMapTexture = new GVOTexture();
        m_worldMapTexture->setImage( worldMap->image() );
        m_worldMap = worldMap;
        m_worldMapTexture = new GVOTexture();
        m_worldMapTexture->setImage( worldMap->image() );
+       ::glFlush();
+       ::wglMakeCurrent( NULL, NULL );
 }
 
 
 }
 
 
@@ -98,6 +102,8 @@ void GVORenderer::setViewSize( const SIZE& viewSize )
        ::glLoadIdentity();
        ::glViewport( 0, 0, m_viewSize.cx, m_viewSize.cy );
        ::gluOrtho2D( 0, m_viewSize.cx, m_viewSize.cy, 0 );
        ::glLoadIdentity();
        ::glViewport( 0, 0, m_viewSize.cx, m_viewSize.cy );
        ::gluOrtho2D( 0, m_viewSize.cx, m_viewSize.cy, 0 );
+       ::glFlush();
+       ::wglMakeCurrent( NULL, NULL );
 }
 
 
 }
 
 
@@ -501,6 +507,7 @@ GVOTexture * GVORenderer::createTextureFromImage( const GVOImage & image )
        ::wglMakeCurrent( m_hdcPrimary, m_hglrc );
        std::auto_ptr<GVOTexture> texture( new GVOTexture() );
        texture->setImage( image );
        ::wglMakeCurrent( m_hdcPrimary, m_hglrc );
        std::auto_ptr<GVOTexture> texture( new GVOTexture() );
        texture->setImage( image );
+       ::glFlush();
        ::wglMakeCurrent( NULL, NULL );
 
        return texture.release();
        ::wglMakeCurrent( NULL, NULL );
 
        return texture.release();
index 05f0a55..3559d97 100644 (file)
@@ -32,7 +32,7 @@ void GVOShipRoute::addRoutePoint( const GVONormalizedPoint & point )
        }
 
        GVOVector vector( s_denormalizedPoint( line.back() ), s_denormalizedPoint( point ) );
        }
 
        GVOVector vector( s_denormalizedPoint( line.back() ), s_denormalizedPoint( point ) );
-       m_length += static_cast<int64_t>(::round( vector.length() ));
+       m_length += vector.length();
 
        const GVONormalizedPoint & prevPoint = line.back();
        if ( prevPoint.isEqualValue( point ) ) {
 
        const GVONormalizedPoint & prevPoint = line.back();
        if ( prevPoint.isEqualValue( point ) ) {
@@ -93,7 +93,7 @@ void GVOShipRoute::jointPreviousLinesWithRoute( const GVOShipRoute & srcRoute )
 
                // \8dq\98H\8aÔ\82Ì\92·\82³\82ð\91«\82·
                const double betweenLength = GVOVector( s_denormalizedPoint( prevPoint ), s_denormalizedPoint( nextPoint ) ).length();
 
                // \8dq\98H\8aÔ\82Ì\92·\82³\82ð\91«\82·
                const double betweenLength = GVOVector( s_denormalizedPoint( prevPoint ), s_denormalizedPoint( nextPoint ) ).length();
-               m_length += static_cast<int64_t>(::round( betweenLength ));
+               m_length += betweenLength;
 
                // \90¢\8aE\82ð\8c×\82¢\82Å\82¢\82È\82¢\82æ\82¤\82È\82ç\90ü\82ð\90Ú\91±\82·\82é
                if ( (std::max( prevPoint.x(), nextPoint.x() ) - std::min(prevPoint.x(), nextPoint.x())) < k_worldLoopThreshold ) {
 
                // \90¢\8aE\82ð\8c×\82¢\82Å\82¢\82È\82¢\82æ\82¤\82È\82ç\90ü\82ð\90Ú\91±\82·\82é
                if ( (std::max( prevPoint.x(), nextPoint.x() ) - std::min(prevPoint.x(), nextPoint.x())) < k_worldLoopThreshold ) {
index 559b395..3470c6c 100644 (file)
@@ -9,7 +9,7 @@ public:
        typedef std::deque<Line> Lines;
 private:
        Lines m_lines;
        typedef std::deque<Line> Lines;
 private:
        Lines m_lines;
-       int64_t m_length = 0;
+       double m_length = 0.0;
        bool m_favorite = false;
        bool m_hilight = false;
        bool m_fixed = false;           //!<@brief \8dq\98H\8cÅ\92è\83t\83\89\83O
        bool m_favorite = false;
        bool m_hilight = false;
        bool m_fixed = false;           //!<@brief \8dq\98H\8cÅ\92è\83t\83\89\83O
@@ -74,7 +74,7 @@ public:
                m_fixed = isFixed;
        }
 
                m_fixed = isFixed;
        }
 
-       int64_t length() const
+       double length() const
        {
                return m_length;
        }
        {
                return m_length;
        }
index 32b0300..b343545 100644 (file)
@@ -96,11 +96,16 @@ void GVOShipRouteList::joinPreviousRouteAtReverseIndex( int reverseIndex )
        GVOShipRoutePtr prevRoute = *itPrev;
 
        m_shipRouteList.erase( itPrev );
        GVOShipRoutePtr prevRoute = *itPrev;
 
        m_shipRouteList.erase( itPrev );
+
+       // remove\82µ\82½\8e\9e\82É\92Ê\92m\83n\83\93\83h\83\89\82Å\91®\90«\82ª\95Ï\8dX\82³\82ê\82Ä\82µ\82Ü\82¤\82Ì\82Å\81A
+       // \82±\82Ì\8e\9e\93_\82Å\8b­\92²\91®\90«\82ð\95Û\91\82µ\82Ä\82¨\82­\81B
+       bool isHilight = prevRoute->isHilight() | baseRoute->isHilight();
        if ( m_observer ) {
                m_observer->onShipRouteListRemoveItem( prevRoute );
        }
 
        baseRoute->jointPreviousLinesWithRoute( *prevRoute );
        if ( m_observer ) {
                m_observer->onShipRouteListRemoveItem( prevRoute );
        }
 
        baseRoute->jointPreviousLinesWithRoute( *prevRoute );
+       baseRoute->setHilight( isHilight );
 
        // \92Ê\92m
        if ( m_observer ) {
 
        // \92Ê\92m
        if ( m_observer ) {
index cc80a4c..15a18f0 100644 (file)
@@ -66,6 +66,10 @@ void GVOShipRouteManageView::onShipRouteListUpdateRoute( GVOShipRoutePtr shipRou
 {
        int reverseIndex = m_routeList->reverseIndexFromShipRoute( shipRoute );
        if ( 0 <= reverseIndex ) {
 {
        int reverseIndex = m_routeList->reverseIndexFromShipRoute( shipRoute );
        if ( 0 <= reverseIndex ) {
+               if ( shipRoute->isHilight() ) {
+                       selectRow( m_selectionIndex, false );
+                       selectRow( reverseIndex, true );
+               }
                ListView_RedrawItems( m_listViewCtrl, reverseIndex, reverseIndex );
        }
 }
                ListView_RedrawItems( m_listViewCtrl, reverseIndex, reverseIndex );
        }
 }
@@ -169,6 +173,11 @@ void GVOShipRouteManageView::onCommand( WORD eventCode, WORD cmdId, HANDLE ctrl
                        ListView_RedrawItems( m_listViewCtrl, m_selectionIndex, m_selectionIndex );
                }
                break;
                        ListView_RedrawItems( m_listViewCtrl, m_selectionIndex, m_selectionIndex );
                }
                break;
+       case IDM_JOINT_LATEST_ROUTE:
+               if ( 1 < m_routeList->getList().size() ) {
+                       m_routeList->joinPreviousRouteAtReverseIndex( 0 );
+               }
+               break;
        default:
                break;
        }
        default:
                break;
        }
@@ -225,7 +234,7 @@ void GVOShipRouteManageView::onNotify( LPNMHDR nmh )
                                                //std::vector<wchar_t> buf( 4096 );
                                                //::swprintf( &buf[0], buf.size(), L"%.1f km", length );
                                                //str = &buf[0];
                                                //std::vector<wchar_t> buf( 4096 );
                                                //::swprintf( &buf[0], buf.size(), L"%.1f km", length );
                                                //str = &buf[0];
-                                               str = std::to_wstring( route->length() );
+                                               str = std::to_wstring( static_cast<int>(::round( route->length() )) );
                                        }
                                        break;
                                default:
                                        }
                                        break;
                                default:
@@ -338,5 +347,8 @@ void GVOShipRouteManageView::updateVisibleListItemCount()
 
 void GVOShipRouteManageView::selectRow( int index, bool isSelection )
 {
 
 void GVOShipRouteManageView::selectRow( int index, bool isSelection )
 {
+       if ( index < 0 ) {
+               return;
+       }
        ListView_SetItemState( m_listViewCtrl, index, isSelection ? LVIS_SELECTED : 0, LVIS_SELECTED );
 }
        ListView_SetItemState( m_listViewCtrl, index, isSelection ? LVIS_SELECTED : 0, LVIS_SELECTED );
 }
index faec028..9d3893b 100644 (file)
@@ -33,3 +33,4 @@
 #define IDM_DESELECT_ROUTE                      40019
 #define IDM_DEBUG_CLOSE_ROUTE                   40020
 #define IDM_TOGGLE_FAVORITE                     40021
 #define IDM_DESELECT_ROUTE                      40019
 #define IDM_DEBUG_CLOSE_ROUTE                   40020
 #define IDM_TOGGLE_FAVORITE                     40021
+#define IDM_JOINT_LATEST_ROUTE                  40022