home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 23 / IOPROG_23.ISO / SOFT / RAYCAST.ZIP / DEFOBJ.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1995-10-19  |  2.2 KB  |  82 lines

  1. #include "ray.h"
  2. #include "globals.h"
  3. #include "rayspr.h"
  4. #include "sprfunc.h"
  5. #include "defobj.h"
  6. #include "rayfile.h"
  7. #include "collisio.h"
  8. #include "message.h"
  9. #include "objcol.h"
  10. #include "sfvars.h"
  11. #include "sprtypes.h"
  12. #include "sprswtch.h"
  13.  
  14. typedef struct DEF_OBJ_EXTRA * pdef_obj_extra;
  15. typedef struct DEF_OBJ_EXTRA {
  16.   long turn_speed;
  17.   long dz;
  18.   long change_time;
  19.   } def_obj_extra;
  20.  
  21. void Def_Obj_Update(pobject cur_obj, long update_num);
  22. void Def_Obj_Update_Z(pobject cur_obj, psector new_sec);
  23. void Def_Obj_Load_Extra(pobject cur_obj, long offset);
  24. ULONG Default_Message(pobject send_obj, pobject receive_obj, ULONG message, pdata extra_data);
  25.  
  26. void Init_Def_Obj(func_index index)
  27. {
  28. update_funcs[index]=Def_Obj_Update;
  29. update_z_funcs[index]=Def_Obj_Update_Z;
  30. load_extra_funcs[index]=Def_Obj_Load_Extra;
  31. message_funcs[index]=Default_Message;
  32. }
  33.  
  34. void Def_Obj_Update(pobject cur_obj, long update_num)
  35. {
  36. pdef_obj_extra cur_extra=(pdef_obj_extra)cur_obj->extra_data;
  37. if (!(cur_extra->change_time & update_num)) {
  38.   cur_extra->dz*=-1;
  39.   }
  40. cur_obj->z+=cur_extra->dz;
  41. cur_obj->angle=Get_Angle_Sum(cur_obj->angle, cur_extra->turn_speed);
  42. }
  43.  
  44. void Def_Obj_Update_Z(pobject cur_obj, psector new_sec)
  45. {
  46. }
  47.  
  48. void Def_Obj_Load_Extra(pobject cur_obj, long offset)
  49. {
  50.  
  51. pdef_obj_extra new_extra;
  52. new_extra=(pdef_obj_extra)NewPtr(sizeof(def_obj_extra));
  53.  
  54. if (offset!=BAD_LOAD_OFFSET) {
  55.    F_Seek(offset);
  56.    F_Get_Long(new_extra->turn_speed);
  57.    F_Get_Long(new_extra->dz);
  58.    F_Get_Long(new_extra->change_time);
  59. } else {
  60.    new_extra->turn_speed=0;
  61.    new_extra->dz=0;
  62.    new_extra->change_time=0;
  63. }
  64.  
  65. cur_obj->extra_data=(pdata)new_extra;
  66. }
  67.  
  68. ULONG Default_Message(pobject send_obj, pobject receive_obj, ULONG message, pdata extra_data) {
  69.    switch (message) {
  70.    case WALL_COLLISION:
  71.       return Do_Slide_Wall(receive_obj, (pwall_collision_info)extra_data);
  72.    case HIT_OBJ:
  73.       Slide_Obj(receive_obj, (pobj_collision)extra_data);
  74.       return NORMAL_MESSAGE;
  75.    case DIE_MESSAGE:
  76.       Switch_Object_Types(receive_obj, Obj_Type_List+EXPLOSION_TYPE);
  77.       return NORMAL_MESSAGE;
  78.    default: 
  79.      return NORMAL_MESSAGE;
  80.    } /* endswitch */
  81. }
  82.