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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? game_script.cpp

?? 3D游戲引擎 Programming Role-Playing Games with DirectX, 2nd Edition by Jim Adams
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include "global.h"

///////////////////////////////////////////////////////////
// cGameScript class code
///////////////////////////////////////////////////////////
cGameScript::cGameScript()
{
  // Clear script data pointers
  m_App   = NULL;
  m_Route = NULL;

  // Clear flags and variables
  for(long i=0;i<256;i++) {
    m_Flags[i] = FALSE;
    m_Vars[i] = 0;
  }
}

cGameScript::~cGameScript()
{
  delete [] m_Route;  // Only need to free the internal route
  m_Window.Free();    // Free the text window object
}

BOOL cGameScript::SetData(cApp *App)
{ 
  // Remember the application class pointer
  if((m_App = App) == NULL)
    return FALSE;
  
  // Create a text window object
  m_Window.Create(&m_App->m_Graphics, &m_App->m_Font);

  return TRUE; 
}

BOOL cGameScript::Reset()
{
  // Clear flags and variables
  for(long i=0;i<256;i++) {
    m_Flags[i] = FALSE;
    m_Vars[i] = 0;
  }

  return TRUE;
}

BOOL cGameScript::Save(char *Filename)
{
  FILE *fp;

  if((fp=fopen(Filename, "wb"))==NULL)
    return FALSE;
  fwrite(&m_Flags, 1, sizeof(m_Flags), fp);
  fwrite(&m_Vars, 1, sizeof(m_Vars), fp);
  fclose(fp);

  return TRUE;
}

BOOL cGameScript::Load(char *Filename)
{
  FILE *fp;

  if((fp=fopen(Filename, "rb"))==NULL)
    return FALSE;
  fread(&m_Flags, 1, sizeof(m_Flags), fp);
  fread(&m_Vars, 1, sizeof(m_Vars), fp);
  fclose(fp);

  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_Else(Script);
    case  2: return Script_EndIf(Script);
    case  3: return Script_IfFlagThen(Script);
    case  4: return Script_IfVarThen(Script);
    case  5: return Script_SetFlag(Script);
    case  6: return Script_SetVar(Script);
    case  7: return Script_Label(Script);
    case  8: return Script_Goto(Script);
    case  9: return Script_Message(Script);

    case 10: return Script_Add(Script);
    case 11: return Script_Remove(Script);
    case 12: return Script_Move(Script);
    case 13: return Script_Direction(Script);
    case 14: return Script_Type(Script);
    case 15: return Script_AI(Script);
    case 16: return Script_Target(Script);
    case 17: return Script_NoTarget(Script);
    case 18: return Script_Bounds(Script);
    case 19: return Script_Distance(Script);
    case 20: return Script_Script(Script);
    case 21: return Script_CharMessage(Script);
    case 22: return Script_Enable(Script);
    case 23: return Script_CreateRoute(Script);
    case 24: return Script_AddPoint(Script);
    case 25: return Script_AssignRoute(Script);
    case 26: return Script_AlterHPMP(Script);
    case 27: return Script_Ailment(Script);
    case 28: return Script_AlterSpell(Script);
    case 29: return Script_Teleport(Script);
    case 30: return Script_ShortMessage(Script);
    case 31: return Script_Action(Script);
    case 32: return Script_IfExpLevel(Script);

    case 33: return Script_Barter(Script);

    case 34: return Script_IfItem(Script);
    case 35: return Script_AddItem(Script);
    case 36: return Script_RemoveItem(Script);

    case 37: return Script_AddBarrier(Script);
    case 38: return Script_EnableBarrier(Script);
    case 39: return Script_RemoveBarrier(Script);

    case 40: return Script_AddTrigger(Script);
    case 41: return Script_EnableTrigger(Script);
    case 42: return Script_RemoveTrigger(Script);

    case 43: return Script_Sound(Script);
    case 44: return Script_Music(Script);
    case 45: return Script_StopMusic(Script);

    case 46: return Script_WinGame(Script);

    case 47: return Script_CommentOrSeparator(Script);
    case 48: return Script_CommentOrSeparator(Script);

    case 49: return Script_Wait(Script);
    case 50: return Script_IfRandThen(Script);
    case 51: return Script_Render(Script);
  }

  return NULL; // Error executing
}

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

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

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

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

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

  // Let if/then processor handle the rest
  return Script_IfThen(ScriptPtr->Next, Skipping);
}

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

  // See if var matches second entry
  if(m_Vars[ScriptPtr->Entries[0].lValue] ==                  \
             ScriptPtr->Entries[1].lValue)
    Skipping = FALSE;
  else 
    Skipping = TRUE;

  // Let if/then processor handle the rest
  return Script_IfThen(ScriptPtr->Next, Skipping);
}

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

  return ScriptPtr->Next;
}

sScript *cGameScript::Script_SetVar(sScript *ScriptPtr)
{
  // Set long value
  m_Vars[ScriptPtr->Entries[0].lValue] =                     \
          ScriptPtr->Entries[1].lValue;

  return ScriptPtr->Next;
}

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

sScript *cGameScript::Script_Goto(sScript *ScriptPtr)
{
  sScript *Script;

  // Search entire script for label
  Script = GetParentScript();
  while(Script != NULL) {

    // Return next entry if a match
    if(Script->Entries[0].lValue==ScriptPtr->Entries[0].lValue)
      return Script->Next;
    
    // Go to next entry
    Script = Script->Next;
  }

  return NULL;  // End of script, return completion
}

sScript *cGameScript::Script_Message(sScript *ScriptPtr)
{
  // Create the text and position the window
  m_Window.SetText(ScriptPtr->Entries[0].Text);
  m_Window.Move(4,4,624);

  // Lock the keyboard and mouse
  m_App->m_Keyboard.SetLock(KEY_SPACE, TRUE);
  m_App->m_Keyboard.SetKeyState(KEY_SPACE, FALSE);
  m_App->m_Mouse.SetLock(MOUSE_LBUTTON, TRUE);
  m_App->m_Mouse.SetKeyState(MOUSE_LBUTTON, FALSE);

  // Render the scene while waiting for keypress/buttonpress
  while(1) {
    // Break when space pressed
    m_App->m_Keyboard.Acquire(TRUE);
    m_App->m_Keyboard.Read();
    if(m_App->m_Keyboard.GetKeyState(KEY_SPACE) == TRUE)
      break;

    // Break when left mouse button pressed
    m_App->m_Mouse.Acquire(TRUE);
    m_App->m_Mouse.Read();
    if(m_App->m_Mouse.GetButtonState(MOUSE_LBUTTON) == TRUE)
      break;

    // Render the scene w/window
    m_App->m_Graphics.ClearZBuffer();
    if(m_App->m_Graphics.BeginScene() == TRUE) {
      m_App->RenderFrame();
      m_Window.Render();
      m_App->m_Graphics.EndScene();
    }

    m_App->m_Graphics.Display();
  }

  // Relock keyboard and mouse
  m_App->m_Keyboard.SetLock(KEY_SPACE, TRUE);
  m_App->m_Keyboard.SetKeyState(KEY_SPACE, FALSE);
  m_App->m_Mouse.SetLock(MOUSE_LBUTTON, TRUE);
  m_App->m_Mouse.SetKeyState(MOUSE_LBUTTON, FALSE);
    
  return ScriptPtr->Next;
}

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

  // Force an update of all character w/0 elapsed time
  m_App->m_CharController.Update(0);

  return ScriptPtr->Next;
}

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

  // Force an update of all character w/0 elapsed time
  m_App->m_CharController.Update(0);

  return ScriptPtr->Next;
}

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

  // Force an update of all character w/0 elapsed time
  m_App->m_CharController.Update(0);

  return ScriptPtr->Next;
}

sScript *cGameScript::Script_Direction(sScript *ScriptPtr)
{
  sCharacter *CharPtr;

  if((CharPtr = m_App->m_CharController.GetCharacter(         \
                       ScriptPtr->Entries[0].lValue)) != NULL)
    CharPtr->Direction = ScriptPtr->Entries[1].fValue;

  // Force an update of all character w/0 elapsed time
  m_App->m_CharController.Update(0);

  return ScriptPtr->Next;
}

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

  return ScriptPtr->Next;
}

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

  return ScriptPtr->Next;
}

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

  return ScriptPtr->Next;
}

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

  return ScriptPtr->Next;
}

sScript *cGameScript::Script_Bounds(sScript *ScriptPtr)
{
  m_App->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_Distance(sScript *ScriptPtr)
{
  m_App->m_CharController.SetDistance(                        \
                      ScriptPtr->Entries[0].lValue,           \
                      ScriptPtr->Entries[1].fValue);

  return ScriptPtr->Next;
}

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

  return ScriptPtr->Next;
}

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

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

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

  // Get the character's height
  CharPtr = m_App->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);

  // Create the text and position the window
  m_Window.SetText(ScriptPtr->Entries[0].Text,                \
                                D3DCOLOR_RGBA(255,255,0,255));
  m_Window.Move(4,4,624,0,(long)vecTarget.x,(long)vecTarget.y);

  // Lock the keyboard and mouse
  m_App->m_Keyboard.SetLock(KEY_SPACE, TRUE);
  m_App->m_Keyboard.SetKeyState(KEY_SPACE, FALSE);
  m_App->m_Mouse.SetLock(MOUSE_LBUTTON, TRUE);
  m_App->m_Mouse.SetKeyState(MOUSE_LBUTTON, FALSE);

  // Render the scene while waiting for keypress/buttonpress
  while(1) {
    // Break when space pressed
    m_App->m_Keyboard.Acquire(TRUE);
    m_App->m_Keyboard.Read();
    if(m_App->m_Keyboard.GetKeyState(KEY_SPACE) == TRUE)
      break;

    // Break when left mouse button pressed
    m_App->m_Mouse.Acquire(TRUE);
    m_App->m_Mouse.Read();
    if(m_App->m_Mouse.GetButtonState(MOUSE_LBUTTON) == TRUE)
      break;


    // Render the scene w/window
    m_App->m_Graphics.ClearZBuffer();
    if(m_App->m_Graphics.BeginScene() == TRUE) {
      m_App->RenderFrame();

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99re成人精品视频| 国产精品传媒视频| 国产精品成人一区二区艾草| 日本在线播放一区二区三区| 91婷婷韩国欧美一区二区| 91精品国产乱码久久蜜臀| 一区二区日韩电影| 成人激情动漫在线观看| 精品国产一区二区在线观看| 日韩在线a电影| 欧美亚洲图片小说| 最新国产精品久久精品| 国产精品一区二区久久精品爱涩| 欧美精品乱码久久久久久| 亚洲人成亚洲人成在线观看图片 | 欧美一级午夜免费电影| 国产精品亲子伦对白| 日韩黄色在线观看| 在线精品视频免费播放| 中文字幕五月欧美| 成人激情小说网站| 国产色综合一区| 精品中文字幕一区二区小辣椒| 宅男在线国产精品| 亚洲成a天堂v人片| 国产剧情一区二区| 7777精品伊人久久久大香线蕉经典版下载 | 日本久久一区二区三区| 亚洲国产高清aⅴ视频| 国产精品一卡二卡| 国产午夜精品一区二区| 国产乱码精品一区二区三区av| 欧美电视剧免费观看| 麻豆精品视频在线观看免费| 日韩一区二区电影在线| 久久国产精品无码网站| 精品美女一区二区三区| 国产一区二区三区四区在线观看| 久久综合精品国产一区二区三区 | 国产精品乱码妇女bbbb| 国产v日产∨综合v精品视频| 国产精品视频一区二区三区不卡| 成人小视频免费观看| 亚洲三级在线播放| 在线视频一区二区免费| 日本中文字幕一区二区视频| 日韩欧美亚洲国产另类| 国产精品18久久久久久久久 | 亚洲女爱视频在线| 欧美日韩国产天堂| 韩日av一区二区| 国产欧美精品一区二区色综合朱莉| eeuss鲁片一区二区三区在线看| 成人欧美一区二区三区小说 | 色吧成人激情小说| 午夜精品久久久久久久久久| 精品欧美一区二区三区精品久久| 国产一区二区三区在线观看免费| 中文字幕欧美三区| 欧美日韩免费一区二区三区视频| 美女久久久精品| 国产精品第五页| 欧美一区二区在线视频| 国产精品一品视频| 亚洲成人精品一区| 久久久激情视频| 欧美在线免费视屏| 国内精品久久久久影院薰衣草| 自拍偷自拍亚洲精品播放| 3d成人动漫网站| 9色porny自拍视频一区二区| 三级不卡在线观看| 中日韩免费视频中文字幕| 国产午夜精品在线观看| 欧美性受xxxx黑人xyx性爽| 黄网站免费久久| 亚洲一线二线三线视频| 国产日韩综合av| 91麻豆精品国产91久久久使用方法| 国产精品性做久久久久久| 天天影视涩香欲综合网| 国产精品国产三级国产普通话蜜臀 | 国产高清精品网站| 亚洲地区一二三色| 国产精品素人视频| 欧美mv和日韩mv的网站| 欧美日韩国产成人在线91| 99国产精品久久久久| 国产一区二区三区免费观看| 日本亚洲三级在线| 亚洲精品视频在线看| 国产欧美久久久精品影院| 日韩精品中文字幕在线不卡尤物| 在线精品视频一区二区| 99久久精品国产麻豆演员表| 国产成人在线免费观看| 久久国产精品一区二区| 日韩一区精品字幕| 三级不卡在线观看| 亚洲成av人在线观看| 一区二区三区在线免费播放| 亚洲人xxxx| 1024成人网色www| 亚洲欧美一区二区在线观看| 国产女主播视频一区二区| 久久人人爽爽爽人久久久| 精品日韩一区二区三区| 日韩午夜三级在线| 日韩久久久久久| 久久综合中文字幕| 久久久亚洲高清| 日韩欧美在线网站| 一本色道a无线码一区v| 国产sm精品调教视频网站| 日本伊人色综合网| 美女爽到高潮91| 国产综合色视频| 国产精品一区二区久激情瑜伽| 国产黑丝在线一区二区三区| 成人午夜精品在线| 99久久久精品| 91理论电影在线观看| 91久久奴性调教| 在线不卡欧美精品一区二区三区| 欧美日韩国产一二三| 日韩免费在线观看| 国产日韩欧美a| 自拍偷自拍亚洲精品播放| 亚洲一区二区在线播放相泽| 无码av中文一区二区三区桃花岛| 免费成人美女在线观看.| 国精产品一区一区三区mba视频| 国产成人av电影| 欧美亚洲综合在线| 日韩一区二区免费视频| 国产亚洲综合性久久久影院| 国产在线精品国自产拍免费| 青青草成人在线观看| 国产乱子伦一区二区三区国色天香| 成人午夜碰碰视频| 欧美午夜不卡在线观看免费| 日韩欧美亚洲另类制服综合在线| 国产欧美日韩精品在线| 夜夜精品浪潮av一区二区三区| 日韩二区三区在线观看| 粉嫩av亚洲一区二区图片| 在线观看区一区二| 久久新电视剧免费观看| 亚洲无线码一区二区三区| 精品一区二区三区视频| 色综合网站在线| 日韩一区二区免费在线电影| 国产精品久久国产精麻豆99网站 | 青青草视频一区| 成年人午夜久久久| 3d动漫精品啪啪1区2区免费| 中文字幕精品—区二区四季| 视频一区欧美精品| 不卡av在线网| 欧美成人综合网站| 亚洲精品自拍动漫在线| 国产一区福利在线| 欧美日韩精品一二三区| 中文字幕一区免费在线观看 | 性感美女极品91精品| 粉嫩av亚洲一区二区图片| 日韩一卡二卡三卡四卡| 亚洲精品欧美专区| 黄页视频在线91| 制服.丝袜.亚洲.另类.中文| 亚洲欧美激情小说另类| 国产乱妇无码大片在线观看| 欧美日本一区二区| 亚洲乱码国产乱码精品精的特点| 国产福利一区二区三区视频| 欧美一级一区二区| 五月婷婷另类国产| 日本精品免费观看高清观看| 国产精品午夜在线| 国产老妇另类xxxxx| 日韩精品中文字幕在线不卡尤物| 偷拍与自拍一区| 欧美日韩免费电影| 亚洲一区二区四区蜜桃| 91亚洲男人天堂| 中文字幕一区二区三区四区| 国产一区二区美女| 久久综合网色—综合色88| 蜜桃精品在线观看| 在线电影欧美成精品| 亚洲成人黄色影院| 欧美丝袜丝交足nylons图片| 亚洲一区在线视频| 欧美亚洲一区二区在线| 亚洲超碰97人人做人人爱| 99re视频这里只有精品| 最新不卡av在线| 色婷婷精品久久二区二区蜜臀av| 亚洲乱码国产乱码精品精98午夜 | 亚洲视频一区二区免费在线观看 |