diff options
| author | Rebellion Developments <rebellion@nomail> | 2000-03-16 11:25:00 +0100 |
|---|---|---|
| committer | Patryk Obara <dreamer.tan@gmail.com> | 2019-08-19 05:45:17 +0200 |
| commit | 218ca90543758a20ac326e444ca0643174ca7384 (patch) | |
| tree | 16bfe3e5307f9f515489000f28728224291a0e3b /3dc/win95/shpanim.h | |
Import Aliens vs Predator - Gold (Build 116)
Source code release, imported from:
https://www.gamefront.com/games/aliens-vs-predator-3/file/avp-gold-complete-source-code
All text files were converted to Unix format.
Diffstat (limited to '3dc/win95/shpanim.h')
| -rw-r--r-- | 3dc/win95/shpanim.h | 201 |
1 files changed, 201 insertions, 0 deletions
diff --git a/3dc/win95/shpanim.h b/3dc/win95/shpanim.h new file mode 100644 index 0000000..869cc41 --- /dev/null +++ b/3dc/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 |
