DEFOBJ.CPP
上传用户:sycq158
上传日期:2008-10-22
资源大小:15361k
文件大小:2k
源码类别:

游戏

开发平台:

Visual C++

  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. typedef struct DEF_OBJ_EXTRA * pdef_obj_extra;
  14. typedef struct DEF_OBJ_EXTRA {
  15.   long turn_speed;
  16.   long dz;
  17.   long change_time;
  18.   } def_obj_extra;
  19. void Def_Obj_Update(pobject cur_obj, long update_num);
  20. void Def_Obj_Update_Z(pobject cur_obj, psector new_sec);
  21. void Def_Obj_Load_Extra(pobject cur_obj, long offset);
  22. ULONG Default_Message(pobject send_obj, pobject receive_obj, ULONG message, pdata extra_data);
  23. void Init_Def_Obj(func_index index)
  24. {
  25. update_funcs[index]=Def_Obj_Update;
  26. update_z_funcs[index]=Def_Obj_Update_Z;
  27. load_extra_funcs[index]=Def_Obj_Load_Extra;
  28. message_funcs[index]=Default_Message;
  29. }
  30. void Def_Obj_Update(pobject cur_obj, long update_num)
  31. {
  32. pdef_obj_extra cur_extra=(pdef_obj_extra)cur_obj->extra_data;
  33. if (!(cur_extra->change_time & update_num)) {
  34.   cur_extra->dz*=-1;
  35.   }
  36. cur_obj->z+=cur_extra->dz;
  37. cur_obj->angle=Get_Angle_Sum(cur_obj->angle, cur_extra->turn_speed);
  38. }
  39. void Def_Obj_Update_Z(pobject cur_obj, psector new_sec)
  40. {
  41. }
  42. void Def_Obj_Load_Extra(pobject cur_obj, long offset)
  43. {
  44. pdef_obj_extra new_extra;
  45. new_extra=(pdef_obj_extra)NewPtr(sizeof(def_obj_extra));
  46. if (offset!=BAD_LOAD_OFFSET) {
  47.    F_Seek(offset);
  48.    F_Get_Long(new_extra->turn_speed);
  49.    F_Get_Long(new_extra->dz);
  50.    F_Get_Long(new_extra->change_time);
  51. } else {
  52.    new_extra->turn_speed=0;
  53.    new_extra->dz=0;
  54.    new_extra->change_time=0;
  55. }
  56. cur_obj->extra_data=(pdata)new_extra;
  57. }
  58. ULONG Default_Message(pobject send_obj, pobject receive_obj, ULONG message, pdata extra_data) {
  59.    switch (message) {
  60.    case WALL_COLLISION:
  61.       return Do_Slide_Wall(receive_obj, (pwall_collision_info)extra_data);
  62.    case HIT_OBJ:
  63.       Slide_Obj(receive_obj, (pobj_collision)extra_data);
  64.       return NORMAL_MESSAGE;
  65.    case DIE_MESSAGE:
  66.       Switch_Object_Types(receive_obj, Obj_Type_List+EXPLOSION_TYPE);
  67.       return NORMAL_MESSAGE;
  68.    default: 
  69.      return NORMAL_MESSAGE;
  70.    } /* endswitch */
  71. }