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

📄 showtsshape.h

📁 五行MMORPG引擎系统V1.0
💻 H
字号:
//-----------------------------------------------------------------------------
// Torque Game Engine
// Copyright (C) GarageGames.com, Inc.
//-----------------------------------------------------------------------------

#ifndef _SHOWTSSHAPE_H_
#define _SHOWTSSHAPE_H_

#ifndef _PLATFORM_H_
#include "platform/platform.h"
#endif
#ifndef _DGL_H_
#include "dgl/dgl.h"
#endif
#ifndef _MMATH_H_
#include "math/mMath.h"
#endif
#ifndef _SCENEOBJECT_H_
#include "sim/sceneObject.h"
#endif
#ifndef _CONSOLE_H_
#include "console/console.h"
#endif
#ifndef _TSSHAPEINSTANCE_H_
#include "ts/tsShapeInstance.h"
#endif

#ifndef _GUITSCONTROL_H_
#include "gui/core/guiTSControl.h"
#endif

class ShowTSShape : public SceneObject
{
   typedef SceneObject Parent;
   typedef NetObject   GrandParent;

   enum { MaxThreads = 20 };

   TSShapeInstance * shapeInstance;
   char shapeNameBuffer[256];
   Vector<TSThread*> threads;
   Vector<bool> play;
   Vector<F32> scale;

   MatrixF mat;
   Point3F centerPos; // we want to be able to point here for orbit camera

   F32  timeScale;
   bool addGround;
   bool stayGrounded;

   // Rendering
  protected:
   bool prepRenderImage  ( SceneState *state, const U32 stateKey, const U32 startZone, const bool modifyBaseZoneState=false);
   void renderObject     ( SceneState *state, SceneRenderImage *image);


public:
   ShowTSShape(const char * shapeName);
   ~ShowTSShape();
   bool onAdd();
   void onRemove();

   static ShowTSShape * currentShow;

   static Vector<char*> loadQueue;

   static void reset(); // if a new sequence is loaded, re-load all the shapes...
   void resetInstance();

   static void advanceTime(U32 delta);
   void advanceTimeInstance(U32 delta);

   static bool handleMovement(F32 leftSpeed,    F32 rightSpeed,
                              F32 forwardSpeed, F32 backwardSpeed,
                              F32 upSpeed,      F32 downSpeed,
                              F32 delta);

   MatrixF getMatrix() { return mat; }
   void addGroundTransform(const MatrixF & ground);
   void setPosition(Point3F  p);
   void getFeetPosition(Point3F *p) { mat.getColumn(3,p); }
   void getCenterPosition(Point3F *p) { *p = centerPos; }

   void render();

   void orbitUs();

   //
   void newThread();
   void deleteThread(S32 th);

   S32 getThreadCount() { return threads.size(); }
   S32 getSequenceCount() { return shapeInstance->getShape()->sequences.size(); }
   const char * getSequenceName(S32 idx) { return shapeInstance->getShape()->getName(shapeInstance->getShape()->sequences[idx].nameIndex); }
   S32 getSequenceNum(S32 th) { return shapeInstance->getSequence(threads[th]); }

   void setSequence(S32 th, S32 seq) { shapeInstance->setSequence(threads[th],seq,shapeInstance->getPos(threads[th])); }
   void setSequence(S32 th, S32 seq, F32 pos) { shapeInstance->setSequence(threads[th],seq,pos); }
   void transitionToSequence(S32 th, S32 seq, F32 pos, F32 dur, bool play) { shapeInstance->transitionToSequence(threads[th],seq,pos,dur,play); }

   F32  getPos(S32 th)          { return shapeInstance->getPos(threads[th]); }
   void setPos(S32 th, F32 pos) { if (th<threads.size()) shapeInstance->setPos(threads[th],pos); }

   void setPlay(S32 th, bool on) { if (th>=0 && th<threads.size()) play[th] = on; }
   bool getPlay(S32 th) { return play[th]; }

   bool isInTransition(S32 th) { return shapeInstance->isInTransition(threads[th]); }
   bool isBlend(S32 seq) { return shapeInstance->getShape()->sequences[seq].isBlend(); }

   void setThreadScale(S32 th, F32 s) { if (th>=0 && th<threads.size()) scale[th] = s; }
   F32  getThreadScale(S32 th) { return scale[th]; }

   S32 getNumDetails() { return shapeInstance->getShape()->details.size(); }
   S32 getCurrentDetail() { return shapeInstance->getCurrentDetail(); }
   void setCurrentDetail(S32 dl) { shapeInstance->setCurrentDetail(dl); }

   bool getAnimateRoot() { return addGround; }
   void setAnimateRoot(bool nv) { addGround = nv; }

   bool getStickToGround() { return stayGrounded; }
   void setStickToGround(bool nv) { stayGrounded = nv; }

   const char * getShapeName() { return shapeNameBuffer; }
   bool shapeLoaded() { return shapeInstance; }
   TSShapeInstance * getShapeInstance() { return shapeInstance; }
};


struct CameraQuery;
class ShowTSCtrl : public GuiTSCtrl
{
   typedef GuiTSCtrl Parent;
public:
   bool processCameraQuery(CameraQuery *query);
   void renderWorld(const RectI &updateRect);
   void onRender(Point2I offset, const RectI &updateRect);
//   void onMouseMove(const GuiEvent &evt);

   DECLARE_CONOBJECT(ShowTSCtrl);
};


extern void ShowInit();

#endif

⌨️ 快捷键说明

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