// 핫 스팟을 클릭할 때 불리는 함수 // LPVOID 값이 0 이면 종료 (X자를 클릭) 요청 void DStartUp::OnClick( LPVOID pVoid ) { if ( m_nMode == 0 ) { // 초기 메뉴 // 이 다이얼로그가 pVoid==0 으로 닫히면 // 초기메뉴일 경우 게임 종료임 if ( !pVoid ) Mw()->PostMessage( WM_CLOSE ); switch ( (int)pVoid ) { case 0: DSB::OnClick(0); break; case 0xffffffff: case 1: { VERIFY( CreateOnePlayerGame() ); break; } case 2: (new DStartUp(m_pBoard))->Create( 1 ); DSB::OnClick(0); break; break; case 3: (new DAbout(m_pBoard))->Create(); break; } } else { // 멀티플레이어 메뉴 // 이 다이얼로그가 pVoid==0 으로 닫히면 // 초기 메뉴를 호출 if ( !pVoid ) (new DStartUp(m_pBoard))->Create( 0 ); switch ( (int)pVoid ) { case 0: DSB::OnClick(0); break; case 0xffffffff: case 1: // 서버가 됨 Ib()->ShowChat(); // 채팅창 표시 (new DConnect(m_pBoard))->Create( 0, Mo()->rule.nPlayerNum, false ); DSB::OnClick(0); break; case 2: // 다른 곳으로 접속 Ib()->ShowChat(); // 채팅창 표시 (new DConnecting(m_pBoard))->Create(); DSB::OnClick(0); break; case 3: // Mighty.Net break; } } }
// nMode 0 : 초기 메뉴 1 : 멀티플레이어 메뉴 void DStartUp::Create( int nMode ) { m_nMode = nMode; if ( m_nMode == 0 ) // 초기 메뉴 DSB::Create( 0, 0, 20, 20, -1 ); else DSB::Create( 0, 0, 18, 17, -1 ); // 이 DSB 가 생성되는 상태는, 게임이 없는 초기 상태이므로 // 상태바를 리셋한다 Ib()->ShowChat( false ); Ib()->Reset(); }
// 핫 스팟이 Highlight 되거나 Normal 로 될 때 호출되는 함수 // bHighlight 가 참이면 highlight 되었음 void DStartUp::OnHighlight( HOTSPOT& hs, bool bHighlight ) { if ( !bHighlight ) Ib()->Reset(); else if ( m_nMode == 0 ) { switch ((int)hs.pVoid) { case 0: Ib()->SetText( _T("마이티 게임을 종료합니다") ); break; case 1: Ib()->SetText( _T("혼자서 컴퓨터와 마이티 게임을 합니다") ); break; case 2: Ib()->SetText( _T("네트워크를 통해서 다른 사용자와 마이티 게임을 합니다") ); break; case 3: Ib()->SetText( _T("마이티 정보를 보여줍니다") ); break; } } else { switch ((int)hs.pVoid) { case 0: Ib()->SetText( _T("이전 메뉴로 돌아갑니다") ); break; case 1: Ib()->SetText( _T("딜러가 되어 다른 사용자의 접속을 기다립니다") ); break; case 2: Ib()->SetText( _T("다른 딜러에게 접속합니다") ); break; case 3: Ib()->SetText( _T("Mighty.Net 에 접속합니다") ); break; } } }
int main( int argc, char **argv ) { MyMesh boxMesh,torusMesh; vcg::Matrix33f IT; vcg::Point3f ITv; vcg::tri::Hexahedron(boxMesh); vcg::Matrix44f ScaleM,TransM; ScaleM.SetScale(1.0f, 2.0f, 5.0f); TransM.SetTranslate(2.0f,3.0f,4.0f); vcg::tri::UpdatePosition<MyMesh>::Matrix(boxMesh,ScaleM); vcg::tri::UpdatePosition<MyMesh>::Matrix(boxMesh,TransM); vcg::tri::Inertia<MyMesh> Ib(boxMesh); vcg::Point3f cc = Ib.CenterOfMass(); Ib.InertiaTensorEigen(IT,ITv); printf("Box of size 2,4,10, centered in (2,3,4)\n"); printf("Volume %f \n",Ib.Mass()); printf("CenterOfMass %f %f %f\n",cc[0],cc[1],cc[2]); printf("InertiaTensor Values %6.3f %6.3f %6.3f\n",ITv[0],ITv[1],ITv[2]); printf("InertiaTensor Matrix\n"); printf(" %6.3f %6.3f %6.3f\n",IT[0][0],IT[0][1],IT[0][2]); printf(" %6.3f %6.3f %6.3f\n",IT[1][0],IT[1][1],IT[1][2]); printf(" %6.3f %6.3f %6.3f\n",IT[2][0],IT[2][1],IT[2][2]); // Now we have a box with sides (h,w,d) 2,4,10, centered in (2,3,4) // Volume is 80 // inertia tensor should be: // I_h = 1/12 m *(w^2+d^2) = 1/12 * 80 * (16+100) = 773.33 // I_w = 1/12 m *(h^2+d^2) = 1/12 * 80 * (4+100) = 693.33 // I_d = 1/12 m *(h^2+w^2) = 1/12 * 80 * (4+16) = 133.33 vcg::tri::Torus(torusMesh,2,1,1024,512); vcg::tri::Inertia<MyMesh> It(torusMesh); cc = It.CenterOfMass(); It.InertiaTensorEigen(IT,ITv); printf("\nTorus of radius 2,1\n"); printf("Mass %f \n",It.Mass()); printf("CenterOfMass %f %f %f\n",cc[0],cc[1],cc[2]); printf("InertiaTensor Values %6.3f %6.3f %6.3f\n",ITv[0],ITv[1],ITv[2]); printf("InertiaTensor Matrix\n"); printf(" %6.3f %6.3f %6.3f\n",IT[0][0],IT[0][1],IT[0][2]); printf(" %6.3f %6.3f %6.3f\n",IT[1][0],IT[1][1],IT[1][2]); printf(" %6.3f %6.3f %6.3f\n",IT[2][0],IT[2][1],IT[2][2]); /* Now we have a torus with c = 2, a = 1 c = radius of the ring a = radius of the section Volume is: V= 2 PI^2 * a^2 * c = ~39.478 Inertia tensor should be: | ( 5/8 a^2 + 1/2 c^2 ) M 0 0 | | 0 ( 5/8 a^2 + 1/2 c^2 ) M 0 | = | 0 0 (3/4 a^2 + c^2) M | | ( 5/8+2 ) M 0 0 | | 103.630 0 0 | = | 0 ( 5/8+2 ) M 0 | = | 0 103.630 0 | | 0 0 (3/4+2) M | | 0 0 187.52 | */ return 0; }