diff options
| author | Steven Fuller <relnev@icculus.org> | 2001-07-01 00:55:22 +0000 |
|---|---|---|
| committer | Patryk Obara <dreamer.tan@gmail.com> | 2019-08-20 02:09:04 +0200 |
| commit | 2186d5f3f95cd74a070a490d899291648d58667a (patch) | |
| tree | 55241a1afa3e1a22e0b6593a8dead0b703800f44 /src/win95/shpanim.h | |
| parent | 218ca90543758a20ac326e444ca0643174ca7384 (diff) | |
Initial revision
Diffstat (limited to 'src/win95/shpanim.h')
| -rw-r--r-- | src/win95/shpanim.h | 201 |
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 |
