summaryrefslogtreecommitdiff
path: root/src/win95/shpanim.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/win95/shpanim.h')
-rw-r--r--src/win95/shpanim.h201
1 files changed, 201 insertions, 0 deletions
diff --git a/src/win95/shpanim.h b/src/win95/shpanim.h
new file mode 100644
index 0000000..869cc41
--- /dev/null
+++ b/src/win95/shpanim.h
@@ -0,0 +1,201 @@
+#ifndef _shp_anim_h
+#define _shp_anim_h 1
+
+
+#ifdef __cplusplus
+
+ extern "C" {
+
+#endif
+
+
+/*
+
+ Structures for animating shapes (not morphing)
+
+ I am using standard types to organise the
+ sequences as an enum would force a complete
+ recompile each time it changed
+
+*/
+
+typedef struct shapeanimationframe
+{
+
+ // Public variables
+
+
+
+ // Private variables
+
+ int * vertices;
+ int * item_normals;
+
+
+} SHAPEANIMATIONFRAME;
+
+
+typedef struct shapeanimationsequence
+{
+
+ // Public variables
+
+ int radius;
+
+ int max_x;
+ int max_y;
+ int max_z;
+
+ int min_x;
+ int min_y;
+ int min_z;
+
+
+ // Private variables
+
+ unsigned long num_frames;
+ SHAPEANIMATIONFRAME * anim_frames;
+
+// unsigned long num_interpolated_frames_per_frame;
+ // 0 for none
+
+ int * vertex_normals;
+
+} SHAPEANIMATIONSEQUENCE;
+
+
+typedef struct shapeanimationheader
+{
+
+ // Public variables
+
+
+ // Private variables
+
+ unsigned long num_sequences;
+
+ SHAPEANIMATIONSEQUENCE * anim_sequences;
+
+ int num_shapes_using_this; //number of shapes sharing the same shapeanimationheader
+
+} SHAPEANIMATIONHEADER;
+
+
+
+typedef struct shapeanimationcontroldata
+{
+
+ // Public variables
+
+ // 16.16 fixed point
+ unsigned long seconds_per_frame;
+ // default is ONE_FIXED / 8
+
+ unsigned long sequence_no;
+ // default is 0
+
+ // if you're not interested in setting a start and an end frame
+ // then set the flag 'default_start_and_end_frames' below
+ unsigned long start_frame;
+ unsigned long end_frame;
+ // no default values
+
+ unsigned long default_start_and_end_frames : 1;
+ // default is on
+
+ unsigned long reversed : 1;
+ // default is off
+
+ unsigned long stop_at_end : 1;
+ // default is off
+
+
+
+ // Private variables
+
+ unsigned long empty : 1;
+ unsigned long stop_now : 1;
+ unsigned long pause_at_end : 1;
+
+ // if start_frame == end_frame
+ // then do not stop unless it has done at least one frame
+ unsigned long done_a_frame : 1;
+
+ SHAPEANIMATIONSEQUENCE * sequence;
+
+ signed long current_frame;
+ signed long time_to_next_frame;
+
+} SHAPEANIMATIONCONTROLDATA;
+
+
+typedef struct shapeanimationcontroller
+{
+
+ // Public variables
+
+ SHAPEANIMATIONCONTROLDATA current;
+
+ SHAPEANIMATIONCONTROLDATA next;
+
+ unsigned long finished : 1;
+
+
+ // Private variables
+
+ unsigned long playing : 1;
+
+ SHAPEANIMATIONHEADER * anim_header;
+
+} SHAPEANIMATIONCONTROLLER;
+
+
+
+
+//////////////////////////////////////////////////////////////////////////////////
+///////////////////////////// Funtions /////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////////
+
+struct displayblock;
+struct shapeheader;
+
+// This sets the current animation (and the next to empty)
+unsigned int SetShapeAnimationSequence (struct displayblock *, SHAPEANIMATIONCONTROLDATA *);
+unsigned int SetOrphanedShapeAnimationSequence (SHAPEANIMATIONCONTROLLER * sac, SHAPEANIMATIONCONTROLDATA * sacd);
+
+// This sets the next animation (if the current is empty it will set the current)
+unsigned int SetNextShapeAnimationSequence (struct displayblock *, SHAPEANIMATIONCONTROLDATA *);
+
+// stop_now == 1 will cause the function to ignore the end_frame value
+// set end_frame to -1 for no change to the ending frame of the sequence
+void SetCurrentShapeAnimationToStop (struct displayblock *, unsigned long stop_now, signed long end_frame);
+
+SHAPEANIMATIONCONTROLDATA const * GetCurrentShapeAnimationSequenceData (struct displayblock *);
+SHAPEANIMATIONCONTROLDATA const * GetNextShapeAnimationSequenceData (struct displayblock *);
+
+// pause_now == 1 will cause the function to ignore the end_frame value
+// set end_frame to -1 for no change to the ending frame of the sequence
+void PauseCurrentShapeAnimation (struct displayblock *, unsigned long pause_now, signed long end_frame);
+void RestartCurrentShapeAnimation (struct displayblock *);
+
+// Please use these functions, whenever you create a block of each type
+void InitShapeAnimationController (SHAPEANIMATIONCONTROLLER *, struct shapeheader *);
+void InitShapeAnimationControlData (SHAPEANIMATIONCONTROLDATA *);
+
+
+
+
+// These are for the system
+
+void DoAllShapeAnimations ();
+
+void CopyAnimationFrameToShape (SHAPEANIMATIONCONTROLDATA *sacd, struct displayblock * dptr);
+
+#ifdef __cplusplus
+
+ };
+
+#endif
+
+
+#endif \ No newline at end of file