My Project
BMaxNode.h
1 #pragma once
2 
3 #include "BlockEngine/BlockCoordinate.h"
4 #include "BlockEngine/BlockDirection.h"
5 
6 namespace ParaEngine
7 {
8  class Bone;
9  class BMaxParser;
10  class BlockModel;
11  struct BMaxFrameNode;
12 
14  struct BMaxNode : public CRefCounted
15  {
16  public:
17  BMaxNode(BMaxParser* pParser, int16 x_, int16 y_, int16 z_, int32 template_id_, int32 block_data_);
18  virtual ~BMaxNode();
19 
20  enum FaceStatus
21  {
22  faceInvisible = 0,
23  faceVisibleNotSign,
24  faceVisibleSigned
25  };
26 
27  public:
28  inline uint64 GetIndex()
29  {
30  return (uint64)x + ((uint64)z << 16) + ((uint64)y << 32);
31  }
32  virtual DWORD GetColor();
33  BlockModel *GetBlockModel();
35  void SetBlockModel(BlockModel* pModel);
36  virtual void SetColor(DWORD val);
38  virtual BMaxFrameNode* ToBoneNode();
40  bool HasBoneWeight();
42  virtual int GetBoneIndex();
43  virtual void SetBoneIndex(int nIndex);
44 
48  BMaxNode* GetNeighbour(BlockDirection::Side nSize);
49  BMaxNode* GetNeighbourByOffset(Vector3 offset);
50  virtual bool isSolid();
51 
56  virtual int TessellateBlock(BlockModel* tessellatedModel);
57 
58  void QueryNeighborBlockData(BMaxNode** pBlockData, int nFrom /*= 0*/, int nTo /*= 26*/);
59 
60  uint32 CalculateCubeAO(BMaxNode** neighborBlocks);
61 
62  int32_t GetAvgVertexLight(int32_t v1, int32_t v2, int32_t v3, int32_t v4);
63 
64  void SetFaceVisible(int nIndex);
65  void SetFaceUsed(int nIndex);
66  bool IsFaceNotUse(int nIndex);
67  public:
68  int16 x;
69  int16 y;
70  int16 z;
71  int32 template_id;
72  int32 block_data;
73  int m_nBoneIndex;
74  protected:
75  BMaxParser* m_pParser;
76  DWORD m_color;
77  /* weak reference to block model*/
78  BlockModel * m_pBlockModel;
79  FaceStatus m_facesStatus[6];
80  };
82 }
virtual int TessellateBlock(BlockModel *tessellatedModel)
Definition: BMaxNode.cpp:269
virtual int GetBoneIndex()
return the index of first bone, return -1 if no bone is binded to this node
Definition: BMaxNode.cpp:67
BMaxNode * GetNeighbour(BlockDirection::Side nSize)
get neighbor block by side id
Definition: BMaxNode.cpp:77
different physics engine has different winding order.
Definition: EventBinding.h:32
Definition: BlockModel.h:172
Standard 3-dimensional vector.
Definition: ParaVector3.h:16
bool HasBoneWeight()
if there are any bone associated with this node at the moment.
Definition: BMaxNode.cpp:62
base class for a block in bmax model
Definition: BMaxNode.h:14
Definition: PERef.h:11
void SetBlockModel(BlockModel *pModel)
set block model weak reference.
Definition: BMaxNode.cpp:52
Block Max file format parser.
Definition: BMaxParser.h:27
virtual BMaxFrameNode * ToBoneNode()
get the bone node interface if it is
Definition: BMaxNode.cpp:57
bone node in bmax
Definition: BMaxFrameNode.h:9