123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- /*
- THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
- SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
- END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
- ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
- IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
- SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
- FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
- CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
- AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
- COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
- */
- /*
- * $Source: f:/miner/source/main/rcs/fvi.h $
- * $Revision: 2.1 $
- * $Author: john $
- * $Date: 1995/03/20 18:15:58 $
- *
- * Header for fvi.c
- *
- * $Log: fvi.h $
- * Revision 2.1 1995/03/20 18:15:58 john
- * Added code to not store the normals in the segment structure.
- *
- * Revision 2.0 1995/02/27 11:32:02 john
- * New version 2.0, which has no anonymous unions, builds with
- * Watcom 10.0, and doesn't require parsing BITMAPS.TBL.
- *
- * Revision 1.10 1995/02/02 14:07:58 matt
- * Fixed confusion about which segment you are touching when you're
- * touching a wall. This manifested itself in spurious lava burns.
- *
- * Revision 1.9 1994/12/04 22:48:04 matt
- * Physics & FVI now only build seglist for player objects, and they
- * responsilby deal with buffer full conditions
- *
- * Revision 1.8 1994/10/31 12:28:01 matt
- * Added new function object_intersects_wall()
- *
- * Revision 1.7 1994/10/10 13:10:00 matt
- * Increased max_fvi_segs
- *
- * Revision 1.6 1994/09/25 00:38:29 matt
- * Made the 'find the point in the bitmap where something hit' system
- * publicly accessible.
- *
- * Revision 1.5 1994/08/01 13:30:35 matt
- * Made fvi() check holes in transparent walls, and changed fvi() calling
- * parms to take all input data in query structure.
- *
- * Revision 1.4 1994/07/13 21:47:59 matt
- * FVI() and physics now keep lists of segments passed through which the
- * trigger code uses.
- *
- * Revision 1.3 1994/07/08 14:27:26 matt
- * Non-needed powerups don't get picked up now; this required changing FVI to
- * take a list of ingore objects rather than just one ignore object.
- *
- * Revision 1.2 1994/06/09 09:58:39 matt
- * Moved find_vector_intersection() from physics.c to new file fvi.c
- *
- * Revision 1.1 1994/06/09 09:26:14 matt
- * Initial revision
- *
- *
- */
- #ifndef _FVI_H
- #define _FVI_H
- #include "vecmat.h"
- #include "segment.h"
- #include "object.h"
- //return values for find_vector_intersection() - what did we hit?
- #define HIT_NONE 0 //we hit nothing
- #define HIT_WALL 1 //we hit - guess - a wall
- #define HIT_OBJECT 2 //we hit an object - which one? no way to tell...
- #define HIT_BAD_P0 3 //start point not is specified segment
- #define MAX_FVI_SEGS 100
- //this data structure gets filled in by find_vector_intersection()
- typedef struct fvi_info {
- int hit_type; //what sort of intersection
- vms_vector hit_pnt; //where we hit
- int hit_seg; //what segment hit_pnt is in
- int hit_side; //if hit wall, which side
- int hit_side_seg; //what segment the hit side is in
- int hit_object; //if object hit, which object
- vms_vector hit_wallnorm; //if hit wall, ptr to its surface normal
- int n_segs; //how many segs we went through
- int seglist[MAX_FVI_SEGS]; //list of segs vector went through
- } fvi_info;
- //flags for fvi query
- #define FQ_CHECK_OBJS 1 //check against objects?
- #define FQ_TRANSWALL 2 //go through transparent walls
- #define FQ_TRANSPOINT 4 //go through trans wall if hit point is transparent
- #define FQ_GET_SEGLIST 8 //build a list of segments
- //this data contains the parms to fvi()
- typedef struct fvi_query {
- vms_vector *p0,*p1;
- int startseg;
- fix rad;
- short thisobjnum;
- int *ignore_obj_list;
- int flags;
- } fvi_query;
- //Find out if a vector intersects with anything.
- //Fills in hit_data, an fvi_info structure (see above).
- //Parms:
- // p0 & startseg describe the start of the vector
- // p1 the end of the vector
- // rad the radius of the cylinder
- // thisobjnum used to prevent an object with colliding with itself
- // ingore_obj_list NULL, or ptr to a list of objnums to ignore, terminated with -1
- // check_obj_flag determines whether collisions with objects are checked
- //Returns the hit_data->hit_type
- int find_vector_intersection(fvi_query *fq,fvi_info *hit_data);
- //finds the uv coords of the given point on the given seg & side
- //fills in u & v
- find_hitpoint_uv(fix *u,fix *v,vms_vector *pnt,segment *seg,int sidenum,int facenum);
- //Returns true if the object is through any walls
- int object_intersects_wall(object *objp);
- #endif
|