/* ========================================================================== * ÀÛ ¼º ÀÚ : À̼ø±Ô * ÀÛ ¼º ÀÏ : 2008.03.13 * ³» ¿ë : ±ËÀû ±âÇÏ * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once #define MIN_ADDPOINT_CNT 8 /// ¸®º» ±âÇÏ class cRibbonGeometry : public NiMesh { public: cRibbonGeometry(); virtual ~cRibbonGeometry(); /// Áö¿ò void Clear(); /// ÃʱâÈ­ bool Init( unsigned long accumTime, NiTexture* texture, unsigned int maxVerts, unsigned long pushInterval ); /// ó¸® void Process( unsigned long deltaTime ); /// ·»´õ¸µ virtual void RenderImmediate( NiRenderer* renderer ); /// inline void SetPushEnabled( bool enabled ) { mPushEnabled = enabled; } void PushTrailPoint( unsigned long pushTime, const NiPoint3& v0, const NiPoint3& v1 ); bool IsDelete(); inline unsigned int GetActiveVerts() { return mActiveVerts; } protected: void SetActiveCount( unsigned int count ); void UpdateBound(); const NiDataStream* GetVertexDataStream(); protected: struct sPointInfo { NiPoint3 mPoint[2]; float mAlpha; NiPoint3 mDir21; float mDirLen; void UpdateAlpha( float da ) { if( mAlpha < da ) mAlpha = 0.0f; else mAlpha -= da; } }; NiTPointerList mBasePointList; /// Á¤Á¡ Á¤º¸ º¸°ü NiTPointerList mTrailPointList; bool mPushEnabled; bool mUpdatePoint; unsigned int mMaxVerts; unsigned int mActiveVerts; unsigned long mPushChekTime; unsigned long mPushInterval; /// ÃÖ¼Ò 5°³ ÀÌ»óÀÇ Æ÷ÀÎÆ®¸¦ ÀԷ¹޵µ·Ï º¸Á¤ unsigned int mCheckAddPoint; NiPoint3 mDirection[2]; NiPoint3 mLastPos[2]; }; inline bool cRibbonGeometry::IsDelete() { if( mCheckAddPoint > MIN_ADDPOINT_CNT && mTrailPointList.IsEmpty() ) return true; return false; }