亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? winmain.cpp

?? 用DirectX編寫RPG游戲-Programming.Role.Playing.Games.with.DirectX
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
          m_App->m_CharController.SetAction(Character, CHAR_SPELL);
          break;
        }
      }

      CharPtr = CharPtr->Next;
    }

  }

  return TRUE;
}

BOOL cChars::ValidateMove(sCharacter *Character,              \
                    float *XMove, float *YMove, float *ZMove)
{
  // Check against terrain mesh for collision
  if(m_App != NULL) {
    if(m_App->CheckIntersect(                                 \
         Character->XPos,                                     \
         Character->YPos+2.0f,                                \
         Character->ZPos,                                     \
         *XMove + Character->XPos,                            \
         *YMove + Character->YPos + 2.0f,                     \
         *ZMove + Character->ZPos) == TRUE)
      return FALSE;
  }

  return TRUE;
}

///////////////////////////////////////////////////////////
// Overloaded script class functions
///////////////////////////////////////////////////////////
cGameScript::cGameScript()
{
  m_Graphics = NULL;
  m_Font = NULL;
  m_Keyboard = NULL;
  m_App = NULL;
  m_CharController = NULL;
  m_Route = NULL;
}

cGameScript::~cGameScript()
{
  m_Window.Free();
  delete [] m_Route;
}

BOOL cGameScript::SetData(cApp *Application,                  \
                          cGraphics *Graphics, cFont *Font,   \
                          cInputDevice *Keyboard,             \
                          cChars *Controller)
{
  long i;

  if((m_App = Application) == NULL)
    return FALSE;

  if((m_Graphics = Graphics) == NULL)
    return FALSE;

  if((m_Font = Font) == NULL)
    return FALSE;

  if((m_Keyboard = Keyboard) == NULL)
    return FALSE;

  if((m_CharController = Controller) == NULL)
    return FALSE;

  // Clear flags
  for(i=0;i<256;i++)
    m_Flags[i] = FALSE;

  // Create the window object
  m_Window.Create(m_Graphics, m_Font);

  return TRUE;
}

BOOL cGameScript::Prepare()
{
  return TRUE;
}

BOOL cGameScript::Release()
{
  delete [] m_Route;
  m_Route = NULL;
  m_NumRoutePoints = 0;

  return TRUE;
}

sScript *cGameScript::Process(sScript *Script)
{
  switch(Script->Type) {
    case  0: return Script_End(Script);
    case  1: return Script_IfFlagThen(Script);
    case  2: return Script_Else(Script);
    case  3: return Script_EndIf(Script);
    case  4: return Script_SetFlag(Script);
    case  5: return Script_Message(Script);
    case  6: return Script_AddChar(Script);
    case  7: return Script_RemoveChar(Script);
    case  8: return Script_CharMessage(Script);
    case  9: return Script_CharType(Script);
    case 10: return Script_CharAI(Script);
    case 11: return Script_CharDistance(Script);
    case 12: return Script_CharBounds(Script);
    case 13: return Script_TargetChar(Script);
    case 14: return Script_NoTarget(Script);
    case 15: return Script_CreateRoute(Script);
    case 16: return Script_AddPoint(Script);
    case 17: return Script_AssignRoute(Script);
    case 18: return Script_MoveChar(Script);
    case 19: return Script_CharScript(Script);
 }

  return NULL; // Error executing
}

///////////////////////////////////////////////////////////
// Standard script processing functions
///////////////////////////////////////////////////////////
sScript *cGameScript::Script_End(sScript *ScriptPtr)
{
  return NULL;  // Force end of processing
}

sScript *cGameScript::Script_IfFlagThen(sScript *ScriptPtr)
{
  BOOL Skipping;

  // See if a flag matches second entry
  if(m_Flags[ScriptPtr->Entries[0].lValue % 256] ==           \
             ScriptPtr->Entries[1].bValue)
    Skipping = FALSE;
  else 
    Skipping = TRUE;

  // At this point, Skipping states if the script actions
  // need to be skipped due to a conditional if..then statement.
  // Actions are further processed if skipped = FALSE, looking
  // for an else to flip the skip mode, or an endif to end
  // the conditional block.

  // Go to next action to process
  ScriptPtr = ScriptPtr->Next;

  while(ScriptPtr != NULL) {
    // if else, flip skip mode
    if(ScriptPtr->Type == 2)
      Skipping = (Skipping == TRUE) ? FALSE : TRUE;

    // break on end if
    if(ScriptPtr->Type == 3)
      return ScriptPtr->Next;

    // Process script function in conditional block
    // making sure to skip actions when condition not met.
    if(Skipping == TRUE)
      ScriptPtr = ScriptPtr->Next;
    else {
      if((ScriptPtr = Process(ScriptPtr)) == NULL)
        return NULL;
    }
  }

  return NULL; // End of script reached
}

sScript *cGameScript::Script_Else(sScript *ScriptPtr)
{
  return ScriptPtr->Next;
}

sScript *cGameScript::Script_EndIf(sScript *ScriptPtr)
{
  return ScriptPtr->Next;
}

sScript *cGameScript::Script_SetFlag(sScript *ScriptPtr)
{
  // Set boolean value
  m_Flags[ScriptPtr->Entries[0].lValue % 256] =               \
          ScriptPtr->Entries[1].bValue;

  return ScriptPtr->Next;
}

///////////////////////////////////////////////////////////
// Specialized script processing functions
///////////////////////////////////////////////////////////
sScript *cGameScript::Script_Message(sScript *ScriptPtr)
{
  // Set the text to display
  m_Window.SetText(ScriptPtr->Entries[0].Text);
  m_Window.Move(10, 10, 620, 0);

  // Display the window
  if(m_Graphics->BeginScene() == TRUE) {
    m_Window.Render();
    m_Graphics->EndScene();
    m_Graphics->Display();
  }

  // Wait for a key press
  m_Keyboard->Acquire(TRUE);
  m_Keyboard->SetLock(KEY_SPACE, TRUE);
  m_Keyboard->SetKeyState(KEY_SPACE, FALSE);
  while(1) {
    m_Keyboard->Read();
    if(m_Keyboard->GetKeyState(KEY_SPACE) == TRUE)
      break;
  }
  m_Keyboard->SetLock(KEY_SPACE, TRUE);
  m_Keyboard->SetKeyState(KEY_SPACE, FALSE);
    
  return ScriptPtr->Next;
}

sScript *cGameScript::Script_AddChar(sScript *ScriptPtr)
{
  m_CharController->Add(ScriptPtr->Entries[0].lValue,         \
                        ScriptPtr->Entries[1].lValue,         \
                        ScriptPtr->Entries[2].Selection,      \
                        ScriptPtr->Entries[3].Selection,      \
                        ScriptPtr->Entries[4].fValue,         \
                        ScriptPtr->Entries[5].fValue,         \
                        ScriptPtr->Entries[6].fValue,         \
                        ScriptPtr->Entries[7].fValue);

  return ScriptPtr->Next;
}

sScript *cGameScript::Script_RemoveChar(sScript *ScriptPtr)
{
  m_CharController->Remove(ScriptPtr->Entries[0].lValue);

  return ScriptPtr->Next;
}

sScript *cGameScript::Script_CharMessage(sScript *ScriptPtr)
{
  sCharacter *CharPtr;
  D3DXMATRIX matWorld, matView, matProj;
  D3DXVECTOR3 vecTarget;
  D3DVIEWPORT8 vpScreen;
  float MaxY;

  // Get the transformation matrices
  D3DXMatrixIdentity(&matWorld);
  m_Graphics->GetDeviceCOM()->GetTransform(D3DTS_VIEW,        \
                                           &matView);
  m_Graphics->GetDeviceCOM()->GetTransform(D3DTS_PROJECTION,  \
                                           &matProj);

  // Get the viewport
  m_Graphics->GetDeviceCOM()->GetViewport(&vpScreen);

  // Get the character's coordinates
  CharPtr = m_CharController->GetCharacter(                   \
                                ScriptPtr->Entries[1].lValue);
  CharPtr->Object.GetBounds(NULL,NULL,NULL,                   \
                            NULL,&MaxY,NULL,NULL);
  
  // Project the 3-D coordinates in 2-D coordinates
  D3DXVec3Project(&vecTarget,                                 \
                  &D3DXVECTOR3(CharPtr->XPos,                 \
                               CharPtr->YPos+MaxY,            \
                               CharPtr->ZPos),                \
                  &vpScreen, &matProj, &matView, &matWorld);

  // Set the text
  m_Window.SetText(ScriptPtr->Entries[0].Text, 
                   D3DCOLOR_RGBA(255,255,0,255));
  m_Window.Move(10, 10, 620, 0,                               \
                (long)vecTarget.x, (long)vecTarget.y);

  // Display the window while waiting for a keypress
  m_Keyboard->Acquire(TRUE);
  m_Keyboard->SetLock(KEY_SPACE, TRUE);
  m_Keyboard->SetKeyState(KEY_SPACE, FALSE);
  while(1) {
    m_Keyboard->Read();
    if(m_Keyboard->GetKeyState(KEY_SPACE) == TRUE)
      break;

    if(m_Graphics->BeginScene() == TRUE) {
      m_Window.Render();
      m_Graphics->EndScene();
      m_Graphics->Display();
    }
  }
  m_Keyboard->SetLock(KEY_SPACE, TRUE);
  m_Keyboard->SetKeyState(KEY_SPACE, FALSE);

  return ScriptPtr->Next;
}

sScript *cGameScript::Script_CharType(sScript *ScriptPtr)
{
  m_CharController->SetType(ScriptPtr->Entries[0].lValue,     \
                        ScriptPtr->Entries[1].Selection);

  return ScriptPtr->Next;
}

sScript *cGameScript::Script_CharAI(sScript *ScriptPtr)
{
  m_CharController->SetAI(ScriptPtr->Entries[0].lValue,       \
                      ScriptPtr->Entries[1].Selection);

  return ScriptPtr->Next;
}

sScript *cGameScript::Script_CharDistance(sScript *ScriptPtr)
{
  m_CharController->SetDistance(ScriptPtr->Entries[0].lValue, \
                            ScriptPtr->Entries[1].fValue);

  return ScriptPtr->Next;
}

sScript *cGameScript::Script_CharBounds(sScript *ScriptPtr)
{
  m_CharController->SetBounds(ScriptPtr->Entries[0].lValue,   \
                          ScriptPtr->Entries[1].fValue,       \
                          ScriptPtr->Entries[2].fValue,       \
                          ScriptPtr->Entries[3].fValue,       \
                          ScriptPtr->Entries[4].fValue,       \
                          ScriptPtr->Entries[5].fValue,       \
                          ScriptPtr->Entries[6].fValue);

  return ScriptPtr->Next;
}

sScript *cGameScript::Script_TargetChar(sScript *ScriptPtr)
{
  m_CharController->SetTargetCharacter(                       \
                            ScriptPtr->Entries[0].lValue,     \
                            ScriptPtr->Entries[1].lValue);

  return ScriptPtr->Next;
}

sScript *cGameScript::Script_NoTarget(sScript *ScriptPtr)
{
  m_CharController->SetTargetCharacter(                       \
                            ScriptPtr->Entries[0].lValue, -1);

  return ScriptPtr->Next;
}

sScript *cGameScript::Script_CreateRoute(sScript *ScriptPtr)
{
  // Release old route
  delete [] m_Route;
  m_Route = NULL;
  m_NumRoutePoints = 0;

  m_NumRoutePoints = ScriptPtr->Entries[0].lValue;
  m_Route = new sRoutePoint[m_NumRoutePoints]();

  return ScriptPtr->Next;
}

sScript *cGameScript::Script_AddPoint(sScript *ScriptPtr)
{
  m_Route[ScriptPtr->Entries[0].lValue].XPos =                \
                     ScriptPtr->Entries[1].fValue;
  m_Route[ScriptPtr->Entries[0].lValue].YPos =                \
                     ScriptPtr->Entries[2].fValue;
  m_Route[ScriptPtr->Entries[0].lValue].ZPos =                \
                     ScriptPtr->Entries[3].fValue;

  return ScriptPtr->Next;
}

sScript *cGameScript::Script_AssignRoute(sScript *ScriptPtr)
{
  m_CharController->SetRoute(ScriptPtr->Entries[0].lValue,    \
                    m_NumRoutePoints, (sRoutePoint*)m_Route);

  return ScriptPtr->Next;
}

sScript *cGameScript::Script_MoveChar(sScript *ScriptPtr)
{
  m_CharController->Move(ScriptPtr->Entries[0].lValue,        \
                     ScriptPtr->Entries[1].fValue,            \
                     ScriptPtr->Entries[2].fValue,            \
                     ScriptPtr->Entries[3].fValue);

  return ScriptPtr->Next;
}

sScript *cGameScript::Script_CharScript(sScript *ScriptPtr)
{
  m_CharController->SetScript(ScriptPtr->Entries[0].lValue,   \
                     ScriptPtr->Entries[1].Text);

  return ScriptPtr->Next;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美国产系列| 国产一区二区免费视频| 国产自产2019最新不卡| 色婷婷av一区| 久久久久久久久99精品| 石原莉奈一区二区三区在线观看| 国产91高潮流白浆在线麻豆| 这里是久久伊人| 亚洲裸体在线观看| 国产精品综合av一区二区国产馆| 91精品国模一区二区三区| 亚洲美女屁股眼交| 成人av电影在线播放| 精品国产91亚洲一区二区三区婷婷| 亚洲午夜一区二区| av中文字幕不卡| 国产亚洲一本大道中文在线| 免费成人在线视频观看| 欧美日韩亚洲不卡| 亚洲美女视频在线观看| 91在线看国产| 国产精品灌醉下药二区| 成人av网址在线| 欧美国产一区在线| 国产乱码精品一区二区三区忘忧草| 欧美大片在线观看一区二区| 日韩精品视频网| 欧美一区二区三区不卡| 日韩国产精品久久| 91麻豆精品久久久久蜜臀| 丝袜诱惑制服诱惑色一区在线观看| 色婷婷亚洲婷婷| 亚洲综合在线免费观看| 在线精品国精品国产尤物884a| 1024成人网色www| 91丨国产丨九色丨pron| 一区二区三区四区精品在线视频| 91蝌蚪porny成人天涯| 亚洲男人的天堂网| 欧美亚洲动漫制服丝袜| 一区二区三区日韩欧美| 欧美在线999| 天天色 色综合| 欧美电影免费提供在线观看| 国产一区二区福利视频| 中文在线免费一区三区高中清不卡| 国产精品一二三| 中文字幕免费不卡在线| 91久久国产综合久久| 亚洲第一二三四区| 欧美一区二区性放荡片| 激情综合色综合久久综合| 国产亚洲综合在线| 色8久久人人97超碰香蕉987| 日韩精品高清不卡| 久久精品一区蜜桃臀影院| av在线不卡免费看| 日韩综合一区二区| 久久亚洲精品小早川怜子| 91玉足脚交白嫩脚丫在线播放| 一区二区三区加勒比av| 欧美成人精品1314www| av电影在线不卡| 午夜久久久久久久久| 久久精品视频免费| 在线观看视频91| 国产乱子伦视频一区二区三区| 亚洲视频一区二区在线| 欧美大胆人体bbbb| 北条麻妃国产九九精品视频| 无码av中文一区二区三区桃花岛| 亚洲精品在线观看视频| 色婷婷亚洲精品| 国产一区二区三区香蕉| 亚洲观看高清完整版在线观看| 精品福利视频一区二区三区| 色哟哟一区二区| 国产福利91精品一区二区三区| 亚洲成人福利片| 中文字幕电影一区| 欧美成人激情免费网| 欧美性色黄大片手机版| 国产高清成人在线| 日韩电影在线一区二区| 亚洲裸体xxx| 国产精品久久三| 精品免费国产一区二区三区四区| 日本韩国精品在线| 成人涩涩免费视频| 国内成人精品2018免费看| 亚洲自拍另类综合| 国产精品天美传媒| 久久品道一品道久久精品| 欧美二区在线观看| 欧美主播一区二区三区| 99re亚洲国产精品| 成年人午夜久久久| 成人午夜激情在线| 国产自产2019最新不卡| 麻豆中文一区二区| 爽好久久久欧美精品| 亚洲免费大片在线观看| 日韩理论片一区二区| 国产精品色噜噜| 国产日韩欧美精品在线| 精品剧情在线观看| 欧美r级在线观看| 欧美一级国产精品| 日韩一二三区视频| 91麻豆精品91久久久久久清纯| 在线日韩国产精品| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 欧美三级三级三级| 色婷婷综合久色| 日本丰满少妇一区二区三区| 色88888久久久久久影院按摩| 91视频.com| 91国偷自产一区二区开放时间| 色综合天天综合| 91国偷自产一区二区开放时间 | 亚洲日本成人在线观看| ...av二区三区久久精品| 中文字幕在线观看不卡视频| 亚洲欧美另类图片小说| 亚洲午夜国产一区99re久久| 亚洲成av人在线观看| 蜜桃视频一区二区三区| 国产真实乱对白精彩久久| 成人综合激情网| 欧洲人成人精品| 欧美电影在线免费观看| 欧美成人aa大片| 中文字幕免费在线观看视频一区| 亚洲精品日日夜夜| 免费成人美女在线观看| 国产精品自拍在线| 色88888久久久久久影院野外| 91麻豆精品国产91久久久久久久久| 久久青草欧美一区二区三区| 国产精品看片你懂得| 天天做天天摸天天爽国产一区| 日本中文字幕一区二区视频| 国产精一品亚洲二区在线视频| 91在线视频官网| 日韩精品在线一区二区| 中文乱码免费一区二区| 亚洲大型综合色站| 国产成人av自拍| 欧美人伦禁忌dvd放荡欲情| 久久久久久久久久电影| 亚洲一区二区三区美女| 国产精品资源在线| 欧美日韩一区高清| 中文字幕国产一区二区| 日本欧美在线观看| 色综合久久综合| 久久久蜜桃精品| 亚洲国产日韩a在线播放性色| 久久不见久久见免费视频7 | 成人免费观看视频| 在线不卡a资源高清| 国产精品福利影院| 美女久久久精品| 欧美性高清videossexo| 国产精品妹子av| 麻豆91精品91久久久的内涵| 色婷婷综合久久久久中文一区二区| 精品国产一区二区在线观看| 性做久久久久久免费观看| 成人av动漫网站| 久久久亚洲欧洲日产国码αv| 亚洲国产成人高清精品| 99久久精品费精品国产一区二区| 久久综合久色欧美综合狠狠| 天天影视网天天综合色在线播放| 95精品视频在线| 久久精品视频网| 国产美女精品在线| 欧美成人伊人久久综合网| 午夜不卡av在线| 91福利在线免费观看| 国产精品欧美精品| 粉嫩高潮美女一区二区三区| 国产三级三级三级精品8ⅰ区| 麻豆成人91精品二区三区| 337p亚洲精品色噜噜| 午夜精品成人在线| 欧美日韩一区二区在线观看 | 国产乱码精品一区二区三区五月婷 | 久久久精品欧美丰满| 激情五月激情综合网| 538在线一区二区精品国产| 首页国产欧美日韩丝袜| 精品视频色一区| 日韩精品电影在线| 欧美久久一二区| 蜜臀av性久久久久av蜜臀妖精| 日韩午夜电影av| 看电视剧不卡顿的网站| 日韩一区二区三区三四区视频在线观看 |