3DFunction.cpp
上传用户:garry_shen
上传日期:2015-04-15
资源大小:45647k
文件大小:11k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "XMudClient.h"
  3. #include "MainScreen.h"
  4. #include "3DFunction.h"
  5. #include "D3DRMScreen.h"
  6. #include "MenuCreateNew.h"
  7. #include "MapInfo.h"
  8. #include "NpcInfo.h"
  9. #include "CommunicateMsg.h"
  10. #include "CommandCheck.h"
  11. #include "FacePlate.h"
  12. extern RECT rc3DMainFace;
  13. extern CList <CPlayerInfo*,CPlayerInfo*> playerlist;
  14. extern CList <CMapInfo *, CMapInfo *> maplist;
  15. extern CMapInfo * lpMapInfo;
  16. extern CRITICAL_SECTION csAnimation;
  17. extern CList <animationCallbackArgs *, animationCallbackArgs *> animationlist;
  18. extern CList<CExitInfo * ,CExitInfo*> exitlist;
  19. extern CExitInfo *lpExitInfo;
  20. extern SOCKET hLCltForRSvrSock;
  21. extern CMainScreen m_MainScreen;
  22. extern CMesssageWnd m_MessageWnd;
  23. extern LPDIRECT3DRM3 g_lpD3DRM;
  24. extern rmfullglobals myglobs;
  25. extern LPDIRECT3DRMFRAME3 g_lpplayer;
  26. extern LPDIRECT3DRMFRAME3 g_sFrame;
  27. extern D3DVECTOR g_PlayAndCameraPos;
  28. extern int g_playerState;
  29. extern int g_nGameState;
  30. extern BOOL g_Redraw2dFace[2];
  31. extern PathInfo info;
  32. extern D3DVECTOR g_CameraPosition;
  33. extern char szSendBuf[];
  34. BOOL g_bClientNet = TRUE;
  35. void D3DOnLButtonDown(POINT Pos)
  36. {
  37.   animationCallbackArgs *cb;
  38.   CPlayerInfo * lpPlayerInfo;
  39.   int fnum;
  40.   D3DVECTOR aimPosite;
  41.   LPDIRECT3DRMVISUAL visual;
  42.   LPDIRECT3DRMPICKED2ARRAY picked;
  43.   D3DRMRAY rmRay;
  44.   LPDIRECT3DRMFRAMEARRAY frames;
  45.   LPDIRECT3DRMFRAME frame;
  46.   LPDIRECT3DRMFRAME3 pFrame3;
  47.   LPDIRECT3DRMFRAME3 roomFrame3;
  48.   if(maplist.IsEmpty())return;
  49.   
  50.   lpPlayerInfo = playerlist.GetHead();
  51.   if(lpPlayerInfo->m_iSTATUS != AOS_none && !(lpPlayerInfo->m_iSTATUS & AOS_act_facesb))
  52.     return;
  53.   
  54.   if(m_MainScreen.bSelectOne)
  55.   {
  56.     m_MainScreen.szSelectOneName[0] = 0;
  57.     m_MainScreen.DrawMsgBar(&m_MainScreen.rcSelectOnePos);
  58.     m_MainScreen.bSelectOne = FALSE;
  59.     if(m_MainScreen.bFaceSomeOne[0]||m_MainScreen.bFaceSomeOne[1])
  60.     {
  61.       m_MainScreen.bFaceSomeOne[0] = FALSE;
  62.       m_MainScreen.bFaceSomeOne[1] = FALSE;
  63.       lpPlayerInfo->m_iSTATUS = AOS_none;
  64.       lpPlayerInfo->m_sPERSONA = _T("");
  65.     }
  66.   }
  67.   
  68.   myglobs.scene->GetChildren(&frames);
  69.   fnum=frames->GetSize(); //0 ~ getsize()-1
  70.   if(fnum<6)
  71.   {
  72.     frames->Release();
  73.     return;
  74.   }
  75.   aimPosite = FindAndSelectVisual(Pos.x, Pos.y);
  76.   if( g_sFrame == NULL){
  77.     frames->Release();
  78.     return;
  79.   }
  80.   frames->GetElement( 1, &frame);
  81.   frame->QueryInterface(IID_IDirect3DRMFrame3, (LPVOID*)&pFrame3);
  82.   if( g_sFrame == pFrame3 ){
  83.     pFrame3->Release();
  84.     frame->Release();
  85.     frames->Release();
  86.     return;
  87.   }
  88.   frame->Release();
  89.   pFrame3->Release();
  90.   
  91.   frames->GetElement( 5, &frame);
  92.   frame->QueryInterface(IID_IDirect3DRMFrame3, (LPVOID*)&pFrame3);
  93.   roomFrame3=pFrame3;
  94.   if( g_sFrame == pFrame3){
  95.     roomFrame3->Release();
  96.     pFrame3->Release();
  97.     frame->Release();
  98.     frames->Release();
  99.     return;
  100.   }
  101.   frame->Release();
  102.   pFrame3->Release();
  103.   if(GetAsyncKeyState(VK_CONTROL)&0x8000){
  104.     cb = animationlist.GetHead();
  105.     cb->pathlist.RemoveAll();
  106.     
  107.     D3DVECTOR playerpos,camerapos;
  108.     g_lpplayer->GetPosition(myglobs.scene, &playerpos);
  109.     myglobs.camera->GetPosition(myglobs.scene, &camerapos);
  110.     g_lpplayer->SetPosition( myglobs.scene,aimPosite.x, aimPosite.y, aimPosite.z);
  111.     
  112.     camerapos.x += aimPosite.x - playerpos.x;
  113.     camerapos.z += aimPosite.z - playerpos.z;
  114.     
  115.     myglobs.camera->SetPosition(myglobs.scene, camerapos.x, camerapos.y, camerapos.z);
  116.     myglobs.camera->LookAt(g_lpplayer, myglobs.scene, D3DRMCONSTRAIN_Z);
  117.     myglobs.camera->GetPosition(myglobs.scene,&g_CameraPosition);
  118.     roomFrame3->Release();
  119.     frames->Release();
  120.     return;
  121.   }
  122.   frames->GetElement( 4, &frame);
  123.   frame->QueryInterface(IID_IDirect3DRMFrame3, (LPVOID*)&pFrame3);
  124.   if( g_sFrame == pFrame3){
  125.     rmRay.dvDir.x = aimPosite.x;
  126.     rmRay.dvDir.y = aimPosite.y;
  127.     rmRay.dvDir.z = aimPosite.z;
  128.     
  129.     rmRay.dvPos.x = aimPosite.x;
  130.     rmRay.dvPos.y = aimPosite.y+10.0f;
  131.     rmRay.dvPos.z = aimPosite.z;
  132.     
  133.     rmRay.dvDir.x -= rmRay.dvPos.x;
  134.     rmRay.dvDir.y -= rmRay.dvPos.y;
  135.     rmRay.dvDir.z -= rmRay.dvPos.z;
  136.     
  137.     myglobs.scene->RayPick(NULL, &rmRay, 0, &picked);
  138. if (picked){
  139.       if (picked->GetSize()){
  140.         LPDIRECT3DRMFRAMEARRAY sframes;
  141.         LPDIRECT3DRMFRAME sframe;
  142.         LPDIRECT3DRMFRAME3 spFrame3;
  143.         
  144.         picked->GetPick(0, &visual, &sframes, 0);
  145.         sframes->GetElement(sframes->GetSize() - 1, &sframe);
  146.         sframe->QueryInterface(IID_IDirect3DRMFrame3, (LPVOID*)&spFrame3);
  147.         if( g_sFrame == spFrame3){
  148.           spFrame3->Release();
  149.           sframe->Release();
  150.           sframes->Release();
  151.           visual->Release();
  152.           ChangePath(aimPosite,roomFrame3,0);
  153.         }
  154.         else
  155.         {
  156.           spFrame3->Release();
  157.           sframe->Release();
  158.           sframes->Release();
  159.           visual->Release();
  160.         }
  161.       }
  162.       picked->Release();
  163.     }
  164.     roomFrame3->Release();
  165.     frames->Release();
  166.     pFrame3->Release();
  167.     frame->Release();
  168.     return;
  169.   }
  170.   
  171.   ChangePath(aimPosite,roomFrame3,1);
  172.   
  173.   roomFrame3->Release();
  174.   pFrame3->Release();
  175.   frames->Release();
  176.   frame->Release();
  177. }
  178. void D3DOnLButtonUp(POINT Pos)
  179. {
  180. }
  181. void D3DOnRButtonDown(POINT Pos)
  182. {
  183.   animationCallbackArgs *cb,*selfcb;
  184.   CPlayerInfo *lpPlayerInfo;
  185.   int i,j;
  186.   D3DVECTOR aimPosite,tagPos;
  187.   BOOL bFindPerson = FALSE;
  188.   if(maplist.IsEmpty())return;
  189.   
  190.   lpPlayerInfo = playerlist.GetHead();
  191.   if(!(lpPlayerInfo->m_iSTATUS == AOS_none || (lpPlayerInfo->m_iSTATUS & AOS_act_facesb)))
  192.     return;
  193.   
  194.   aimPosite = FindAndSelectVisual(Pos.x, Pos.y);
  195.   if(m_MainScreen.bSelectOne)
  196.   {
  197.     m_MainScreen.DrawMsgBar(&m_MainScreen.rcSelectOnePos);
  198.     m_MainScreen.bSelectOne = FALSE;
  199.   }
  200.   if(m_MainScreen.bFaceSomeOne[0]||m_MainScreen.bFaceSomeOne[1])
  201.   {
  202.     m_MainScreen.bSelectOne = FALSE;
  203.     m_MainScreen.bFaceSomeOne[0] = FALSE;
  204.     m_MainScreen.bFaceSomeOne[1] = FALSE;
  205.     lpPlayerInfo->m_iSTATUS = AOS_none;
  206.     lpPlayerInfo->m_sPERSONA = _T("");
  207.   }
  208.   BOOL bFindSomebody = FALSE;
  209.   j = animationlist.GetCount();
  210.   for(i=1;i<j;i++){
  211.     cb = animationlist.GetAt(animationlist.FindIndex(i));
  212.     if(cb->PlayerState == DEAD) continue;
  213.     cb->frame3obj->GetPosition(myglobs.scene, &tagPos);
  214.     if(fabs(aimPosite.x-tagPos.x) < 0.9 && fabs(aimPosite.z-tagPos.z) < 0.9){
  215.       strcpy(m_MainScreen.szSelectOneName,"