summaryrefslogtreecommitdiff
path: root/particles/psheet.h
diff options
context:
space:
mode:
Diffstat (limited to 'particles/psheet.h')
-rw-r--r--particles/psheet.h84
1 files changed, 84 insertions, 0 deletions
diff --git a/particles/psheet.h b/particles/psheet.h
new file mode 100644
index 0000000..9614f75
--- /dev/null
+++ b/particles/psheet.h
@@ -0,0 +1,84 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: sheet definitions for particles and other sprite functions
+//
+//===========================================================================//
+
+#ifndef PSHEET_H
+#define PSHEET_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "tier1/utlobjectreference.h"
+
+class CUtlBuffer;
+
+// classes for keeping a dictionary of sheet files in memory. A sheet is a bunch of frames packewd
+// within one texture. Each sheet has 1 or more frame sequences stored for it.
+
+
+// for fast lookups to retrieve sequence data, we store the sequence information discretized into
+// a fixed # of frames. If this discretenesss is a visual problem, you can lerp the blend values to get it
+// perfect.
+#define SEQUENCE_SAMPLE_COUNT 1024
+
+#define MAX_SEQUENCES 64
+#define MAX_IMAGES_PER_FRAME_ON_DISK 4
+#define MAX_IMAGES_PER_FRAME_IN_MEMORY 2
+
+struct SequenceSampleTextureCoords_t
+{
+ float m_fLeft_U0;
+ float m_fTop_V0;
+ float m_fRight_U0;
+ float m_fBottom_V0;
+
+ float m_fLeft_U1;
+ float m_fTop_V1;
+ float m_fRight_U1;
+ float m_fBottom_V1;
+};
+
+struct SheetSequenceSample_t
+{
+ // coordinates of two rectangles (old and next frame coords)
+
+ SequenceSampleTextureCoords_t m_TextureCoordData[MAX_IMAGES_PER_FRAME_IN_MEMORY];
+
+ float m_fBlendFactor;
+
+ void CopyFirstFrameToOthers(void)
+ {
+ // for old format files only supporting one image per frame
+ for(int i=1; i < MAX_IMAGES_PER_FRAME_IN_MEMORY; i++)
+ {
+ m_TextureCoordData[i] = m_TextureCoordData[0];
+ }
+ }
+
+};
+
+class CSheet
+{
+public:
+ // read form a .sht file. This is the usual thing to do
+ CSheet( CUtlBuffer &buf );
+ CSheet( void );
+ ~CSheet( void );
+
+ // references for smart ptrs
+ CUtlReferenceList<CSheet> m_References;
+
+ SheetSequenceSample_t *m_pSamples[MAX_SEQUENCES];
+ bool m_bClamp[MAX_SEQUENCES];
+ bool m_bSequenceIsCopyOfAnotherSequence[MAX_SEQUENCES];
+ int m_nNumFrames[MAX_SEQUENCES];
+ float m_flFrameSpan[MAX_SEQUENCES];
+
+};
+
+
+#endif // PSHEET_H
+