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

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

?? chars.cpp

?? 3D游戲引擎 Programming Role-Playing Games with DirectX, 2nd Edition by Jim Adams
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
}

BOOL cCharacterController::SetAction(sCharacter *Character,   \
                                     long Action,             \
                                     long AddTime)
{
  long MeshNum;

  // Error checking
  if(Character == NULL)
    return FALSE;

  // Make sure attack, spell, and item has supporting charge
  if(Action == CHAR_ATTACK || Action == CHAR_SPELL ||
     Action == CHAR_ITEM) {
    if(Character->Charge < 100.0f)
      return FALSE;
  }

  // Set action
  Character->Action = Action;

  // Play sound effect
  ActionSound(Character);

  // Get mesh number
  MeshNum = Character->Def.MeshNum;

  // Set action time (or set to 1 is addtime = -1)
  if(AddTime == -1)
    Character->ActionTimer = 1;
  else
    Character->ActionTimer = AddTime +                        \
                m_Meshes[MeshNum].Animation.GetLength(        \
                m_Animations[Action].Name) * 30;

  return TRUE;
}

BOOL cCharacterController::SetDistance(                       \
               long IDNum, float Distance)
{
  sCharacter *CharPtr;

  // Get pointer to character
  if((CharPtr = GetCharacter(IDNum)) == NULL)
    return FALSE;

  // Set new value
  CharPtr->Distance = Distance;
  return TRUE;
}

float cCharacterController::GetDistance(long IDNum)
{
  sCharacter *CharPtr;

  if((CharPtr = GetCharacter(IDNum)) == NULL)
    return 0.0f;
  return CharPtr->Distance;
}

BOOL cCharacterController::SetRoute(long IDNum,               \
                                    long NumPoints,           \
                                    sRoutePoint *Route)
{
  sCharacter *CharPtr;

  // Get pointer to character
  if((CharPtr = GetCharacter(IDNum)) == NULL)
    return FALSE;

  // Free old route
  delete [] CharPtr->Route;
  CharPtr->Route = NULL;

  // Set new route
  if((CharPtr->NumPoints = NumPoints) != NULL) {
    CharPtr->Route = new sRoutePoint[NumPoints];
    memcpy(CharPtr->Route,Route,NumPoints*sizeof(sRoutePoint));
    CharPtr->CurrentPoint = 0;
  }

  return TRUE;
}

BOOL cCharacterController::SetScript(long IDNum,              \
                                     char *ScriptFilename)
{
  sCharacter *CharPtr;

  // Get pointer to character
  if((CharPtr = GetCharacter(IDNum)) == NULL)
    return FALSE;

  // Set new script
  strcpy(CharPtr->ScriptFilename, ScriptFilename);
  return TRUE;
}

char *cCharacterController::GetScript(long IDNum)
{
  sCharacter *CharPtr;

  if((CharPtr = GetCharacter(IDNum)) == NULL)
    return NULL;
  return CharPtr->ScriptFilename;
}

BOOL cCharacterController::SetEnable(long IDNum, BOOL Enabled)
{
  sCharacter *CharPtr;

  // Get pointer to character
  if((CharPtr = GetCharacter(IDNum)) == NULL)
    return FALSE;

  // Set new value
  CharPtr->Enabled = Enabled;
  return TRUE;
}

BOOL cCharacterController::GetEnable(long IDNum)
{
  sCharacter *CharPtr;

  if((CharPtr = GetCharacter(IDNum)) == NULL)
    return FALSE;
  return CharPtr->Enabled;
}

BOOL cCharacterController::SetMessage(sCharacter *Character,  \
                                   char *Text, long Timer,    \
                                   D3DCOLOR Color)
{
  strcpy(Character->Message, Text);
  Character->MessageTimer = Timer;
  Character->MessageColor = Color;

  return TRUE;
}

BOOL cCharacterController::Move(                              \
               long IDNum,                                    \
               float XPos, float YPos, float ZPos)
{
  sCharacter *CharPtr;

  // Get pointer to character
  if((CharPtr = GetCharacter(IDNum)) == NULL)
    return FALSE;

  // Set new values
  CharPtr->XPos = XPos;
  CharPtr->YPos = YPos;
  CharPtr->ZPos = ZPos;
  return TRUE;
}

BOOL cCharacterController::GetPosition(                       \
               long IDNum,                                    \
               float *XPos, float *YPos, float *ZPos)
{
  sCharacter *CharPtr;

  if((CharPtr = GetCharacter(IDNum)) == NULL)
    return FALSE;

  if(XPos != NULL)
    *XPos = CharPtr->XPos;
  if(YPos != NULL)
    *YPos = CharPtr->YPos;
  if(ZPos != NULL)
    *ZPos = CharPtr->ZPos;

  return TRUE;
}

BOOL cCharacterController::SetBounds(                         \
               long IDNum,                                    \
               float MinX, float MinY, float MinZ,            \
               float MaxX, float MaxY, float MaxZ)
{
  sCharacter *CharPtr;

  // Get pointer to character
  if((CharPtr = GetCharacter(IDNum)) == NULL)
    return FALSE;

  // Set new values
  CharPtr->MinX = min(MinX, MaxX);
  CharPtr->MinY = min(MinY, MaxY);
  CharPtr->MinZ = min(MinZ, MaxZ);
  CharPtr->MaxX = max(MinX, MaxX);
  CharPtr->MaxY = max(MinY, MaxY);
  CharPtr->MaxZ = max(MinZ, MaxZ);

  return TRUE;
}   

BOOL cCharacterController::GetBounds(                         \
               long IDNum,                                    \
               float *MinX, float *MinY, float *MinZ,         \
               float *MaxX, float *MaxY, float *MaxZ)
{
  sCharacter *CharPtr;

  if((CharPtr = GetCharacter(IDNum)) == NULL)
    return FALSE;

  if(MinX != NULL)
    *MinX = CharPtr->MinX;
  if(MinY != NULL)
    *MinY = CharPtr->MinY;
  if(MinZ != NULL)
    *MinZ = CharPtr->MinZ;
  if(MaxX != NULL)
    *MaxX = CharPtr->MaxX;
  if(MaxY != NULL)
    *MaxY = CharPtr->MaxY;
  if(MaxZ != NULL)
    *MaxZ = CharPtr->MaxZ;

  return TRUE;
}

BOOL cCharacterController::SetType(long IDNum, long Type)
{
  sCharacter *CharPtr;

  // Get pointer to character
  if((CharPtr = GetCharacter(IDNum)) == NULL)
    return FALSE;

  // Set new value
  CharPtr->Type = Type;
  return TRUE;
}

long cCharacterController::GetType(long IDNum)
{
  sCharacter *CharPtr;

  if((CharPtr = GetCharacter(IDNum)) == NULL)
    return 0;
  return CharPtr->Type;
}

BOOL cCharacterController::SetAI(long IDNum, long Type)
{
  sCharacter *CharPtr;

  // Get pointer to character
  if((CharPtr = GetCharacter(IDNum)) == NULL)
    return FALSE;

  // Set new value
  CharPtr->AI = Type;
  return TRUE;
}

long cCharacterController::GetAI(long IDNum)
{
  sCharacter *CharPtr;

  if((CharPtr = GetCharacter(IDNum)) == NULL)
    return 0;
  return CharPtr->AI;
}

BOOL cCharacterController::SetTargetCharacter(long IDNum,     \
                                              long TargetNum)
{
  sCharacter *CharPtr, *CharTarget;

  // Get pointer to character
  if((CharPtr = GetCharacter(IDNum)) == NULL)
    return FALSE;

  // Clear if TargetNum == -1
  if(TargetNum == -1)
    CharPtr->TargetChar = NULL;
  else {
    // Scan through list and target 1st TargetNum found
    CharTarget = m_CharacterParent;
    while(CharTarget != NULL) {
      if(CharTarget->ID == TargetNum) {
        CharPtr->TargetChar = CharTarget;
        break;
      }
      CharTarget = CharTarget->Next;
    }

    // Clear target if not found in list
    if(CharTarget == NULL)
      CharPtr->TargetChar = NULL;
  }
  return TRUE;
}

BOOL cCharacterController::CharUpdate(                        \
               sCharacter *Character, long Elapsed,           \
               float *XMove, float *YMove, float *ZMove)
{
  float MoveX, MoveY, MoveZ, Speed;
  float XDiff, YDiff, ZDiff, Dist, Radius;
  float y1, y2;
  long  i, SpellNum;
  BOOL SpellCast;
  sCharacter *CharPtr;

  // Error checking
  if(Character == NULL)
    return FALSE;

  // Clear movements and action
  MoveX = MoveY = MoveZ = 0.0f;

  // Calculate movement speed
  Speed = (float)Elapsed / 1000.0f * GetSpeed(Character);

  // Move character based on their type
  switch(Character->AI) {
    case CHAR_STAND:
      break;
      
    case CHAR_WANDER:
      // Calculate new distance and direction if needed
      Character->Distance -= Elapsed;

      if(Character->Distance <= 0.0f) {

        // Calculate a new distance to travel
        Character->Distance = (float)(rand() % 2000) + 2000.0f;

        // Calculate a new direction
        Character->Direction = (float)(rand()%360)*0.01744444f;
      }

      // Process walk or stand still
      if(Character->Distance > 1000.0f) {
        MoveX = (float)sin(Character->Direction) * Speed;
        MoveZ = (float)cos(Character->Direction) * Speed;
        Character->Action = CHAR_MOVE;
      } else {
        // Stand still for one second
        Character->Action = CHAR_IDLE;
      }

      break;

    case CHAR_ROUTE:
      // Determine if character has reached point
      XDiff = (float)fabs(Character->XPos -                   \
              Character->Route[Character->CurrentPoint].XPos);
      YDiff = (float)fabs(Character->YPos -                   \
              Character->Route[Character->CurrentPoint].YPos);
      ZDiff = (float)fabs(Character->ZPos -                   \
              Character->Route[Character->CurrentPoint].ZPos);
      Dist = XDiff*XDiff + YDiff*YDiff + ZDiff*ZDiff;

      Radius = GetXZRadius(Character) * 0.25f;
      
      // Go to next point if reached
      if(Dist < (Radius*Radius)) {
        Character->CurrentPoint++;
        if(Character->CurrentPoint >= Character->NumPoints)
          Character->CurrentPoint = 0;

        // Calculate new differences and distance
        XDiff = (float)fabs(Character->XPos -                 \
              Character->Route[Character->CurrentPoint].XPos);
        YDiff = (float)fabs(Character->YPos -                 \
              Character->Route[Character->CurrentPoint].YPos);
        ZDiff = (float)fabs(Character->ZPos -                 \
              Character->Route[Character->CurrentPoint].ZPos);
        Dist = XDiff*XDiff + YDiff*YDiff + ZDiff*ZDiff;
      }

      // Setup movement towards target
      Dist = (float)sqrt(Dist);
      if(Speed > Dist)
        Speed = Dist;

      MoveX=(Character->Route[Character->CurrentPoint].XPos - \
              Character->XPos) / Dist * Speed;
      MoveZ=(Character->Route[Character->CurrentPoint].ZPos - \
              Character->ZPos) / Dist * Speed;

      // Set new direction
      Character->Direction = (float)atan2(MoveX, MoveZ);

      // Set new action
      Character->Action = CHAR_MOVE;

      break;

    case CHAR_FOLLOW:
      if(Character->TargetChar != NULL) {

        // Check distance between characters
        XDiff = (float)fabs(Character->XPos -                 \
                            Character->TargetChar->XPos);
        YDiff = (float)fabs(Character->YPos -                 \
                            Character->TargetChar->YPos);
        ZDiff = (float)fabs(Character->ZPos -                 \
                            Character->TargetChar->ZPos);
        Dist = XDiff*XDiff + YDiff*YDiff + ZDiff*ZDiff;

        // Update if further then distance
        if(Dist > (Character->Distance*Character->Distance)) {

          // Setup movement towards target
          Dist = (float)sqrt(Dist);
          if(Speed > Dist)
            Speed = Dist;
          MoveX = (Character->TargetChar->XPos -              \
                 Character->XPos) / Dist * Speed;
          MoveZ = (Character->TargetChar->ZPos -              \
                 Character->ZPos) / Dist * Speed;

          // Set new direction
          Character->Direction = (float)atan2(MoveX, MoveZ);

          // Set new action
          Character->Action = CHAR_MOVE;
        }
      }

      break;

    case CHAR_EVADE:
      if(Character->TargetChar != NULL) {

        // Check distance between characters
        XDiff = (float)fabs(Character->XPos -                 \
                            Character->TargetChar->XPos);
        YDiff = (float)fabs(Character->YPos -                 \

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
婷婷国产v国产偷v亚洲高清| 99精品久久免费看蜜臀剧情介绍| 国产精品一区二区在线观看网站 | 蜜桃av一区二区三区电影| 国产成人亚洲综合a∨婷婷图片| 欧美专区在线观看一区| 中文字幕精品一区| 免费在线欧美视频| 在线一区二区三区四区| 国产精品美女久久福利网站| 国产一区在线看| 日韩一级高清毛片| 午夜视频一区二区三区| 91麻豆.com| 国产精品亲子乱子伦xxxx裸| 久久精品av麻豆的观看方式| 欧美绝品在线观看成人午夜影视 | 日韩一区二区三区精品视频| 亚洲精品国产a久久久久久 | 国产精品国产三级国产aⅴ原创| 裸体在线国模精品偷拍| 91精品国产综合久久久久久久久久 | 美女视频一区二区三区| 欧美性猛交一区二区三区精品| 亚洲色图在线播放| 不卡视频一二三| 最新国产成人在线观看| 成人一道本在线| 中文字幕av一区二区三区高| 国产精品亚洲成人| 国产目拍亚洲精品99久久精品 | 美日韩一区二区| 91精品国产综合久久精品| 亚洲成人av免费| 欧美精选在线播放| 亚洲成av人影院| 欧美疯狂做受xxxx富婆| 五月天精品一区二区三区| 555夜色666亚洲国产免| 日产欧产美韩系列久久99| 日韩美女视频在线| 国产一区二区三区综合| 国产日产精品1区| av中文字幕在线不卡| 亚洲精品自拍动漫在线| 欧美日韩一区二区欧美激情| 天堂成人国产精品一区| 精品不卡在线视频| 成人小视频在线观看| 亚洲欧美视频在线观看视频| 欧美日韩成人激情| 看电影不卡的网站| 国产欧美一区二区三区鸳鸯浴| 97se亚洲国产综合自在线 | 美腿丝袜亚洲色图| 国产日产欧产精品推荐色 | 99久久久免费精品国产一区二区| 亚洲人成网站影音先锋播放| 欧美精品 日韩| 国产精品一级在线| 亚洲综合一二区| 欧美成人综合网站| 91免费版在线| 精品一区二区三区在线播放| 国产精品第五页| 欧美精三区欧美精三区| 国产福利91精品一区| 亚洲一区欧美一区| 久久久久久久综合日本| 91国在线观看| 国产精品自产自拍| 亚洲一二三四在线观看| 久久婷婷久久一区二区三区| 91国在线观看| 国产一区二区伦理片| 亚洲综合色噜噜狠狠| 久久综合色8888| 欧美色偷偷大香| 国产a视频精品免费观看| 日韩高清一级片| 自拍偷拍欧美精品| 久久亚洲私人国产精品va媚药| 欧美亚洲另类激情小说| 国产成人亚洲综合色影视| 日本色综合中文字幕| 亚洲视频 欧洲视频| 久久久久久一二三区| 欧美一区二区三区四区久久| 色婷婷狠狠综合| 成人黄页毛片网站| 国产又黄又大久久| 日韩av网站在线观看| 亚洲午夜一区二区三区| 国产精品久久国产精麻豆99网站| 日韩欧美中文字幕制服| 在线不卡的av| 欧美在线高清视频| 97久久超碰精品国产| 国产超碰在线一区| 黑人巨大精品欧美黑白配亚洲| 日本中文字幕一区| 三级影片在线观看欧美日韩一区二区| 综合精品久久久| 亚洲视频在线一区二区| 国产精品热久久久久夜色精品三区 | 国产欧美视频一区二区三区| 精品少妇一区二区三区免费观看 | 欧美性一二三区| 欧美综合一区二区| 色综合久久久久久久久| 91亚洲男人天堂| 色av综合在线| 欧美综合天天夜夜久久| 在线免费观看不卡av| 欧美午夜精品免费| 欧美日韩一级黄| 91精品国产综合久久久久久久| 欧美狂野另类xxxxoooo| 91精品午夜视频| 欧美刺激午夜性久久久久久久| 欧美精品在欧美一区二区少妇| 欧美伊人久久久久久久久影院 | 奇米影视在线99精品| 日韩电影在线一区二区| 日本成人中文字幕在线视频| 日本视频一区二区三区| 精品一区二区三区欧美| 国产综合一区二区| 从欧美一区二区三区| 99久久99精品久久久久久| 欧洲视频一区二区| 欧美精品v国产精品v日韩精品| 91精品国产欧美日韩| 欧美mv日韩mv国产网站| 久久久久久一级片| 中文字幕日韩一区| 亚洲一区二区三区四区五区中文| 日韩成人免费电影| 国产福利精品导航| 在线免费亚洲电影| 精品乱码亚洲一区二区不卡| 中文字幕在线观看不卡视频| 亚洲国产成人va在线观看天堂| 久久激情五月激情| 91亚洲午夜精品久久久久久| 在线播放国产精品二区一二区四区 | 欧洲色大大久久| 欧美成人国产一区二区| 中文字幕制服丝袜一区二区三区| 亚洲综合色噜噜狠狠| 久久精品国产免费| 99精品视频一区| 欧美一级日韩免费不卡| 国产精品久久久久桃色tv| 无码av免费一区二区三区试看 | 欧美三级视频在线| 久久精品人人做人人爽人人| 亚洲黄色免费电影| 韩国成人在线视频| 91黄色在线观看| 欧美国产日产图区| 五月天久久比比资源色| kk眼镜猥琐国模调教系列一区二区 | 色先锋aa成人| 欧美xxxx在线观看| 一区二区三区蜜桃网| 国产精选一区二区三区| 欧美人牲a欧美精品| 国产精品视频第一区| 久久av资源网| 精品视频999| 国产精品欧美一区二区三区| 九色综合狠狠综合久久| 欧美网站一区二区| 亚洲欧洲精品一区二区精品久久久 | 亚洲精品成a人| 国产老妇另类xxxxx| 欧美伦理电影网| 综合中文字幕亚洲| 国产一区二区精品久久91| 欧美一级片在线看| 亚洲va韩国va欧美va| 99精品国产91久久久久久| 国产欧美日韩综合精品一区二区| 捆绑变态av一区二区三区| 91福利视频网站| 亚洲精品视频免费看| 97精品电影院| 中国色在线观看另类| 国产精品99久| 国产人成一区二区三区影院| 狠狠狠色丁香婷婷综合久久五月| 欧美日韩国产综合视频在线观看| 亚洲激情自拍视频| 91看片淫黄大片一级| 亚洲国产精品精华液2区45| 国产很黄免费观看久久| 26uuu色噜噜精品一区二区| 狠狠色丁香久久婷婷综| 精品999在线播放|