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

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

?? chars.h

?? 3D游戲引擎 Programming Role-Playing Games with DirectX, 2nd Edition by Jim Adams
?? H
字號:
#ifndef _CHARS_H_
#define _CHARS_H_

#include "Frustum.h"
#include "CharICS.h"
#include "MCL.h"
#include "MIL.h"
#include "MSL.h"

// Spell references
class  cSpellController;
struct sSpellTracker;

// Number of characters in file
#define NUM_CHARACTER_DEFINITIONS   256

// Character types
#define CHAR_PC          0
#define CHAR_NPC         1
#define CHAR_MONSTER     2

// AI types
#define CHAR_STAND       0
#define CHAR_WANDER      1
#define CHAR_ROUTE       2
#define CHAR_FOLLOW      3
#define CHAR_EVADE       4

// Action/Animation types
#define CHAR_IDLE        0
#define CHAR_MOVE        1
#define CHAR_ATTACK      2
#define CHAR_SPELL       3
#define CHAR_ITEM        4
#define CHAR_HURT        5
#define CHAR_DIE         6
#define CHAR_TALK        7

// Status ailments
#define AILMENT_POISON          1
#define AILMENT_SLEEP           2
#define AILMENT_PARALYZE        4
#define AILMENT_WEAK            8
#define AILMENT_STRONG         16
#define AILMENT_ENCHANTED      32
#define AILMENT_BARRIER        64
#define AILMENT_DUMBFOUNDED   128
#define AILMENT_CLUMSY        256
#define AILMENT_SUREFOOTED    512 
#define AILMENT_SLOW         1024
#define AILMENT_FAST         2048
#define AILMENT_BLIND        4096
#define AILMENT_HAWKEYE      8192
#define AILMENT_SILENCED    16384

// Animation info
typedef struct {
  char Name[32];    // Name of animation
  BOOL Loop;        // To loop flag
} sCharAnimationInfo;

// A mesh list
typedef struct sCharacterMeshList {
  char       Filename[MAX_PATH];  // Filename of mesh/anim
  long       Count;               // # characters using mesh
  cMesh      Mesh;                // Mesh object
  cAnimation Animation;           // Animation object

  sCharacterMeshList()  { Count = 0;                     }
  ~sCharacterMeshList() { Mesh.Free(); Animation.Free(); }
} sCharacterMeshList;

// Path/Route structure
typedef struct {
  float XPos, YPos, ZPos;   // Target position
} sRoutePoint;

typedef struct sCharacter
{
  long  Definition;         // Character definition #
  long  ID;                 // ID # of character

  long  Type;               // PC, NPC, or MONSTER
  long  AI;                 // STAND, WANDER, etc

  BOOL  Enabled;            // Enabled flag (for updates)

  sCharacterDefinition Def; // Loaded definition
  cCharICS *CharICS;        // PC character's ICS

  char ScriptFilename[MAX_PATH]; // Associated script

  long  HealthPoints;       // Current health points
  long  ManaPoints;         // Current mana points
  long  Ailments;           // Ailments against character
  float Charge;             // Attack charge

  long  Action;             // Current action
  float XPos, YPos, ZPos;   // Current coordinates
  float Direction;          // Angle character is facing
  long  LastAnim;           // Last animation
  long  LastAnimTime;       // Last animation time

  BOOL  Locked;             // Specific action lock
  long  ActionTimer;        // Lock action countdown timer

  sCharacter *Attacker;     // Attacking character (if any)
  sCharacter *Victim;       // Character to attack

  long  SpellNum;           // Spell to cast when ready
  long  SpellTarget;        // Target type of spell
  float TargetX, TargetY, TargetZ; // Spell target coords

  long ItemNum;             // Item to use when ready
  sCharItem *CharItem;      // Item to remove from inventory

  float Distance;           // Follow/Evade distance
  sCharacter *TargetChar;   // Character to follow
  float MinX, MinY, MinZ;   // Min bounding coordinates
  float MaxX, MaxY, MaxZ;   // Max bounding coordiantes

  long  NumPoints;          // # points in route
  long  CurrentPoint;       // Current route point
  sRoutePoint *Route;       // Route points

  char  Message[128];       // Text message
  long  MessageTimer;       // Text message timer
  D3DCOLOR MessageColor;    // Color of text message

  cObject Object;           // Character object class
  cMesh   WeaponMesh;       // Weapon mesh
  cObject WeaponObject;     // Weapon object

  sCharacter *Prev, *Next;  // Linked list of characters

  sCharacter()
  {
    Definition = 0;         // Set to definition #0
    ID = -1;                // Set to no ID
    Type = CHAR_NPC;        // Set to NPC character
    Enabled = FALSE;        // Set to not enabled
    
    Ailments = 0;           // Set no ailments
    Charge = 0.0f;          // Set no charge

    // Clear definition
    ZeroMemory(&Def, sizeof(sCharacterDefinition));
    CharICS = NULL;         // Set no ICS

    ScriptFilename[0] = 0;  // Set no script

    Action = CHAR_IDLE;     // Set default animation
    LastAnim = -1;          // Reset animation

    Locked = FALSE;         // Set no lock
    ActionTimer = 0;        // Set no action timer

    Attacker = NULL;        // Set no attacker
    Victim = NULL;          // Set no victim

    ItemNum = 0;            // Set no item to use
    CharItem = NULL;        // Set no item to decrease

    Distance = 0.0f;        // Set distance
    TargetChar = NULL;      // Set no target character

    // Clear bounding box (for limiting movement)
    MinX = MinY = MinZ = MaxX = MaxY = MaxZ = 0.0f;

    NumPoints = 0;          // Set no route points
    Route = NULL;           // Set no route

    Message[0] = 0;         // Clear message
    MessageTimer = 0;       // Set no message timer

    Prev = Next = NULL;     // Clear linked list pointers
  }

  ~sCharacter()
  {
    if(CharICS != NULL) {  // Release character ICS
      CharICS->Free();
      delete CharICS;
    }

    delete [] Route;       // Release route

    WeaponObject.Free();   // Release weapon object
    WeaponMesh.Free();     // Release weapon mesh
    Object.Free();         // Release character object

    delete Next;           // Delete next character in list
  }
} sCharacter;

class cCharacterController
{
  private:
    cGraphics  *m_Graphics;            // Parent graphics object
    cFont      *m_Font;                // Font object to use
    cFrustum   *m_Frustum;             // Viewing frustum

    char m_DefinitionFile[MAX_PATH];   // Filename of def. file

    sItem      *m_MIL;                 // Master item list
    sSpell     *m_MSL;                 // Master spell list

    cSpellController *m_SpellController; // Spell controller

    long        m_NumCharacters;       // # characters in list
    sCharacter *m_CharacterParent;     // List of characters

    long        m_NumMeshes;           // # meshes in use
    sCharacterMeshList *m_Meshes;      // Meshes list
    char m_MeshPath[MAX_PATH];         // Weapon mesh path
    char m_TexturePath[MAX_PATH];      // Mesh texture path

    long        m_NumAnimations;       // # animations
    sCharAnimationInfo *m_Animations;  // Animation data

    // Function to overide for playing sounds
    virtual BOOL ActionSound(sCharacter *Character)
            { return TRUE; }

    // Move function for player characters (need to override)
    virtual BOOL PCUpdate(                                    \
                   sCharacter *Character, long Elapsed,       \
                   float *XMove, float *YMove, float *ZMove)  \
            { return TRUE; }

    // Character update function for all non-PC characters
    BOOL CharUpdate(sCharacter *Character, long Elapsed,      \
                    float *XMove, float *YMove, float *ZMove);

    // Check for valid movements. Bounds check to other 
    // characters and call ValidateMove (overidden).
    BOOL CheckMove(sCharacter *Character,                     \
                   float *XMove, float *YMove, float *ZMove);

    // Virtual ValidateMove for outside bounds checking
    // against character movements.
    virtual BOOL ValidateMove(sCharacter *Character,          \
                   float *XMove, float *YMove, float *ZMove)  \
                   { return TRUE; }

    // Finish movement by setting direction, animation, etc
    BOOL ProcessUpdate(sCharacter *Character,                 \
                   float XMove, float YMove, float ZMove);

    // Process death of a player character
    virtual BOOL PCDeath(sCharacter *Character)               \
                 { return TRUE; }

    // Process death of a non-player character
    virtual BOOL NPCDeath(sCharacter *Character)              \
                 { return TRUE; }

    // Functions to drop money and item when character dies
    virtual BOOL DropMoney(float XPos,float YPos,float ZPos,  \
                           long Quantity)
                 { return TRUE; }

    virtual BOOL DropItem(float XPos, float YPos, float ZPos, \
                          long ItemNum)
                 { return TRUE; }

  public:
    cCharacterController();   // Constructor
    ~cCharacterController();  // Destructor

    // Functions to init/shutdown controller class
    BOOL Init(cGraphics *Graphics, cFont *Font,               \
              char *DefinitionFile, sItem *MIL, sSpell *MSL,  \
              long NumCharacterMeshes, char **MeshNames,      \
              char *MeshPath, char *TexturePath,              \
              long NumAnimations, sCharAnimationInfo *Anims,  \
              cSpellController *SpellController);
    BOOL Shutdown();

    // Free class
    BOOL Free();

    // Add a character to the list
    BOOL Add(long IDNum, long Definition, long Type, long AI, \
             float XPos, float YPos, float ZPos,              \
             float Direction = 0.0f);

    // Remove a character from list
    BOOL Remove(long IDNum);
    BOOL Remove(sCharacter *Character);

    // Save or load an individual character
    BOOL Save(long IDNum, char *Filename);
    BOOL Load(long IDNum, char *Filename);

    // Update all characters based on elapsed time
    BOOL Update(long Elapsed);

    // Render all objects within viewing frustum
    BOOL Render(long       Elapsed = -1,                      \
                cFrustum  *Frustum = NULL,                    \
                float      ZDistance = 0.0f);

    // Retrieve an sCharacter structure
    sCharacter *GetParentCharacter();
    sCharacter *GetCharacter(long IDNum);

    // Return X/Z radius of character
    float GetXZRadius(sCharacter *Character);

    // Make sure there's a line of sight between characters
    virtual BOOL LineOfSight(                                 \
                sCharacter *Source, sCharacter *Target,       \
                float SourceX, float SourceY, float SourceZ,  \
                float TargetX, float TargetY, float TargetZ)
                { return TRUE; }

    // Function to retrieve adjusted ability/other info
    float GetSpeed(sCharacter *Character);
    long  GetAttack(sCharacter *Character);
    long  GetDefense(sCharacter *Character);
    long  GetAgility(sCharacter *Character);
    long  GetResistance(sCharacter *Character);
    long  GetMental(sCharacter *Character);
    long  GetToHit(sCharacter *Character);
    float GetCharge(sCharacter *Character);

    // Get pointer to the character ICS
    cCharICS *GetICS(long IDNum);

    // Set lock and action timer
    BOOL SetLock(long IDNum, BOOL State);
    BOOL SetActionTimer(long IDNum, long Timer);

    // Set evade/follow distance
    BOOL  SetDistance(long IDNum, float Distance);
    float GetDistance(long IDNum);

    // Set route points
    BOOL SetRoute(long IDNum,                                 \
                  long NumPoints, sRoutePoint *Route);

    // Set script 
    BOOL SetScript(long IDNum, char *ScriptFilename);
    char *GetScript(long IDNum);

    // Set enable flags
    BOOL SetEnable(long IDNum, BOOL Enable);
    BOOL GetEnable(long IDNum);

    // Functions to move and get character coordinates
    BOOL Move(long IDNum, float XPos, float YPos, float ZPos);
    BOOL GetPosition(long IDNum,                              \
                     float *XPos, float *YPos, float *ZPos);

    // Functions to Set/Get character bounds
    BOOL SetBounds(long IDNum,                                \
                   float MinX, float MinY, float MinZ,        \
                   float MaxX, float MaxY, float MaxZ);
    BOOL GetBounds(long IDNum,                                \
                   float *MinX, float *MinY, float *MinZ,     \
                   float *MaxX, float *MaxY, float *MaxZ);

    // Functions to Set/Get character type
    BOOL SetType(long IDNum, long Type);
    long GetType(long IDNum);

    // Functions to Set/Get character AI
    BOOL SetAI(long IDNum, long Type);
    long GetAI(long IDNum);

    // Set a target character
    BOOL SetTargetCharacter(long IDNum, long TargetNum);

    // Set text messages to float up from character
    BOOL SetMessage(sCharacter *Character, char *Text,        \
                long Timer, D3DCOLOR Color=0xFFFFFFFF);

    // Process attack damage from spells and physical attacks
    BOOL Damage(sCharacter *Victim,                           \
                BOOL PhysicalAttack, long Amount,             \
                long DmgClass, long CureClass);

    // Process death of an NPC/Monster
    BOOL Death(sCharacter *Attacker, sCharacter *Victim);

    // Process experience up
    virtual BOOL Experience(sCharacter *Character,            \
                            long Amount)                      \
         { Character->Def.Experience += Amount; return TRUE; }

    // Resolve a physical attack from attacker to victim
    BOOL Attack(sCharacter *Attacker, sCharacter *Victim);

    // Process spell ailments when spell completed
    BOOL Spell(sCharacter *Caster,                            \
               sSpellTracker *SpellTracker, sSpell *Spells);
    
    // Apply spell effects
    BOOL SpellEffect(sCharacter *Caster, sCharacter *Target,  \
                     sSpell *Spell);

    // Process equipping/unequipping of item
    BOOL Equip(sCharacter *Character, long ItemNum,           \
               long Type, BOOL Equip);

    // Process item being used on character
    BOOL Item(sCharacter *Owner, sCharacter *Target,          \
              long ItemNum, sCharItem *CharItem = NULL);

    // Process dropping an item
    BOOL Drop(sCharacter *Character,                          \
              sCharItem *Item, long Quantity);

    // Process a PC teleport spell
    virtual BOOL PCTeleport(sCharacter *Character,            \
                            sSpell *Spell)                    \
            { return TRUE; }

    // Set action (w/timer)
    BOOL SetAction(sCharacter *Character,                     \
                   long Action, long AddTime = 0);

};

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
手机精品视频在线观看| 国产精品每日更新| 日本va欧美va欧美va精品| 日韩一级片网址| 亚洲国产精品精华液网站| 欧美色综合网站| 天天综合色天天综合色h| 欧美一区二区视频免费观看| 麻豆传媒一区二区三区| 欧美精品一区二区蜜臀亚洲| 国产91色综合久久免费分享| 中文字幕一区二区三区蜜月| 欧美色偷偷大香| 另类小说视频一区二区| 国产欧美精品区一区二区三区 | 91精品蜜臀在线一区尤物| 久久国产精品第一页| 国产精品剧情在线亚洲| 欧美性xxxxxxxx| 狠狠色丁香婷婷综合久久片| 亚洲欧洲成人av每日更新| 欧美美女视频在线观看| 国产精品自拍在线| 亚洲精品综合在线| 精品国产乱码久久久久久牛牛| jlzzjlzz国产精品久久| 奇米一区二区三区av| 成人欧美一区二区三区白人| 欧美日韩一区二区三区高清| 国产一区二三区好的| 一区二区日韩电影| 久久夜色精品一区| 在线看不卡av| 国产精品一线二线三线| 婷婷夜色潮精品综合在线| 中文欧美字幕免费| 亚洲精品乱码久久久久久黑人| 91精品蜜臀在线一区尤物| eeuss鲁片一区二区三区| 美女任你摸久久| 一二三区精品视频| 欧美国产精品一区二区| 这里只有精品99re| 在线观看日韩国产| 国产.欧美.日韩| 久久国产尿小便嘘嘘尿| 亚洲永久精品大片| 国产精品灌醉下药二区| 久久日一线二线三线suv| 欧美揉bbbbb揉bbbbb| 99精品久久只有精品| 国产剧情一区二区三区| 青青草成人在线观看| 亚洲一区二区三区四区在线| 中文字幕视频一区二区三区久| 精品国产亚洲在线| 正在播放亚洲一区| 欧美日韩一区在线| 色欧美片视频在线观看| 大陆成人av片| 国产成人在线视频网站| 国产真实乱子伦精品视频| 日本欧美在线观看| 日韩和欧美一区二区| 亚洲成人先锋电影| 一区二区三区电影在线播| 亚洲婷婷综合久久一本伊一区| 国产人伦精品一区二区| 久久精品一区二区三区不卡牛牛| 精品国产麻豆免费人成网站| 日韩欧美一区在线| 日韩一区二区在线看片| 日韩欧美一区二区视频| 日韩欧美区一区二| 欧美tickle裸体挠脚心vk| 精品国产精品一区二区夜夜嗨| 日韩一二三区视频| 欧美一区中文字幕| 欧美电影免费提供在线观看| 1024国产精品| 亚洲少妇中出一区| 亚洲激情成人在线| 亚洲一区在线看| 亚洲在线观看免费| 性久久久久久久| 秋霞电影网一区二区| 国产在线不卡一卡二卡三卡四卡| 国产在线精品一区二区夜色| 国产91清纯白嫩初高中在线观看| 成人美女在线观看| 色噜噜久久综合| 欧美日韩亚州综合| 日韩一区二区电影在线| 久久久亚洲精品一区二区三区 | 亚洲一级二级在线| 视频一区二区三区入口| 久久草av在线| 成人黄色a**站在线观看| 色av成人天堂桃色av| 欧美久久久久久蜜桃| 26uuu久久天堂性欧美| 国产精品福利一区二区三区| 亚洲国产一区二区在线播放| 日韩av成人高清| 国产suv精品一区二区883| 91视频在线观看免费| 555www色欧美视频| 久久精品欧美一区二区三区麻豆| 亚洲色图在线播放| 日韩和欧美一区二区| 成人一道本在线| 欧美视频一区在线| 国产视频一区二区三区在线观看| 亚洲欧洲制服丝袜| 麻豆成人久久精品二区三区红| 成人免费毛片app| 制服视频三区第一页精品| 中文字幕高清一区| 亚洲成人激情av| 粉嫩高潮美女一区二区三区| 欧美喷水一区二区| 欧美激情综合网| 五月天国产精品| 91在线看国产| 久久噜噜亚洲综合| 亚洲v中文字幕| 成人妖精视频yjsp地址| 日韩三级精品电影久久久| 亚洲丝袜美腿综合| 国产一区二区成人久久免费影院| 在线观看国产日韩| 中文一区二区完整视频在线观看| 免费xxxx性欧美18vr| 色94色欧美sute亚洲13| 久久久精品人体av艺术| 免费国产亚洲视频| 欧美日韩和欧美的一区二区| 中文字幕精品一区二区三区精品| 蜜臀av一区二区在线观看| 在线观看国产精品网站| 国产精品不卡在线观看| 国产一区三区三区| 91精品国产综合久久久蜜臀图片| 亚洲精品日韩一| 99精品欧美一区二区三区综合在线| 久久综合999| 九一九一国产精品| 欧美日韩久久一区二区| 一区二区三区 在线观看视频| 不卡大黄网站免费看| 国产欧美一区二区三区沐欲| 激情久久五月天| 精品国产污网站| 奇米精品一区二区三区在线观看一| 在线看日韩精品电影| 亚洲免费在线视频| 色激情天天射综合网| 自拍偷拍亚洲欧美日韩| a级精品国产片在线观看| 欧美国产激情一区二区三区蜜月| 国产精品亚洲成人| 久久亚洲欧美国产精品乐播 | 亚洲一区二区三区精品在线| a级精品国产片在线观看| 国产精品美女一区二区| 国产成人丝袜美腿| 日本一区二区三级电影在线观看| 国产精品一级片| 欧美极品少妇xxxxⅹ高跟鞋| 国产精品亚洲视频| 国产精品青草久久| 99国产精品视频免费观看| 中文字幕在线不卡国产视频| 91麻豆产精品久久久久久| 一区二区三区四区精品在线视频| 一本色道综合亚洲| 亚洲狠狠爱一区二区三区| 777午夜精品免费视频| 免费日本视频一区| 久久奇米777| 成人黄色一级视频| 亚洲视频资源在线| 欧美日韩午夜在线视频| 日韩福利电影在线观看| 精品欧美一区二区在线观看| 国产福利视频一区二区三区| 国产精品久久久久久久久图文区 | 亚洲精品视频在线看| 欧美三区在线观看| 亚洲成人激情社区| 欧美精品一区二区蜜臀亚洲| 成人黄色在线看| 亚洲永久免费视频| 欧美大胆一级视频| 成人精品视频一区二区三区| 亚洲在线视频一区| 精品国产乱码久久久久久影片| 国产黄色精品网站| 亚洲综合一二区| 精品国产伦一区二区三区免费|