⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spell.h

📁 [游戏开发参考书-用DirectX编写RPG游戏]这是一个系列的丛书如果你都看并且懂的话你就可以你工作啦!
💻 H
字号:
#ifndef _SPELL_H_
#define _SPELL_H_

#include "MSL.h"

// Character references
struct sCharacter;
class  cCharacterController;

#define NUM_SPELL_DEFINITIONS   64

enum SpellEffects {
  ALTER_HEALTH = 0,
  ALTER_MANA,
  CURE_AILMENT,
  CAUSE_AILMENT,
  RAISE_DEAD,
  INSTANT_KILL,
  DISPEL_MAGIC,
  TELEPORT
};

enum SpellTargets {
  TARGET_SINGLE = 0,
  TARGET_SELF,
  TARGET_AREA
};

enum AnimPositions {
  POSITION_NONE = 0,
  POSITION_CASTER,
  POSITION_TOTARGET,
  POSITION_TOCASTER,
  POSITION_TARGET,
  POSITION_SCALE
};

typedef struct sSpellMeshList {
  char       Filename[MAX_PATH];  // Filename of mesh/anim
  long       Count;               // # Spells using mesh
  cMesh      Mesh;                // Mesh object
  cAnimation Animation;           // Animation object

  // Construct and destructor to prepare and release data
  sSpellMeshList()  { Count = 0;                     } 
  ~sSpellMeshList() { Mesh.Free(); Animation.Free(); }
} sSpellMeshList; 

typedef struct sSpellTracker
{
  long  SpellNum;                   // Spell #

  sCharacter *Caster;               // Character casting spell
  long  Type;                       // Character type to affect

  long  CurrentAnimation;           // Animation: 0-2
  float SourceX, SourceY, SourceZ;  // Source coordinates
  float TargetX, TargetY, TargetZ;  // Target coordinates

  float XPos, YPos, ZPos;           // Current coordinates
  float XAdd, YAdd, ZAdd;           // Movement values
  float Distance;                   // Distance to target

  union {
    float Speed;                    // Speed of movement
    long  Time;                     // Timer to continue
  };

  cObject Object;                   // Graphics object
  
  sSpellTracker *Prev, *Next;       // Linked list

  sSpellTracker()  { Caster = NULL; Prev = Next = NULL; }
  ~sSpellTracker() { delete Next;                       }
} sSpellTracker;

class cSpellController
{
  private:
    cGraphics  *m_Graphics;         // Parent graphics object
    cFrustum   *m_Frustum;          // Viewing frustum

    sSpell m_Spells[NUM_SPELL_DEFINITIONS];  // Spell data

    sSpellTracker *m_SpellParent;   // List of active spells

    long            m_NumMeshes;    // # meshes in use
    sSpellMeshList *m_Meshes;       // Meshes list

    char m_TexturePath[MAX_PATH];   // Mesh texture path

    cCharacterController *m_Chars;  // Character controller

    // Setup the mesh movement
    BOOL SetAnimData(sSpellTracker *SpellPtr, long Num);

    // Function to overide for playing sounds
    virtual BOOL SpellSound(long Num) { return TRUE; }

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

    // Functions to init/shutdown controller class
    BOOL Init(cGraphics *Graphics, char *DefinitionFile,      \
              long NumSpellMeshes, char **MeshNames,          \
              char *TexturePath,                              \
              cCharacterController *Controller);
    BOOL Shutdown();

    // Free class
    BOOL Free();

    sSpell *GetSpell(long SpellNum);

    // Add a spell to the list
    BOOL Add(long SpellNum,                                   \
             sCharacter *Caster, long TargetType,             \
             float SourceX, float SourceY, float SourceZ,     \
             float TargetX, float TargetY, float TargetZ);

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

    // Render all spell meshes within viewing frustum
    BOOL Render(cFrustum *Frustum=NULL, float ZDistance = 0.0f);
};

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -