Panda3D
|
00001 // Filename: collisionPlane.h 00002 // Created by: drose (25Apr00) 00003 // 00004 //////////////////////////////////////////////////////////////////// 00005 // 00006 // PANDA 3D SOFTWARE 00007 // Copyright (c) Carnegie Mellon University. All rights reserved. 00008 // 00009 // All use of this software is subject to the terms of the revised BSD 00010 // license. You should have received a copy of this license along 00011 // with this source code in a file named "LICENSE." 00012 // 00013 //////////////////////////////////////////////////////////////////// 00014 00015 #ifndef COLLISIONPLANE_H 00016 #define COLLISIONPLANE_H 00017 00018 #include "pandabase.h" 00019 00020 #include "collisionSolid.h" 00021 00022 #include "luse.h" 00023 #include "plane.h" 00024 00025 //////////////////////////////////////////////////////////////////// 00026 // Class : CollisionPlane 00027 // Description : 00028 //////////////////////////////////////////////////////////////////// 00029 class EXPCL_PANDA_COLLIDE CollisionPlane : public CollisionSolid { 00030 protected: 00031 INLINE CollisionPlane(); 00032 00033 PUBLISHED: 00034 INLINE CollisionPlane(const LPlane &plane); 00035 INLINE CollisionPlane(const CollisionPlane ©); 00036 00037 virtual LPoint3 get_collision_origin() const; 00038 00039 public: 00040 virtual CollisionSolid *make_copy(); 00041 00042 virtual void xform(const LMatrix4 &mat); 00043 00044 virtual PStatCollector &get_volume_pcollector(); 00045 virtual PStatCollector &get_test_pcollector(); 00046 00047 virtual void output(ostream &out) const; 00048 00049 INLINE static void flush_level(); 00050 00051 PUBLISHED: 00052 INLINE LVector3 get_normal() const; 00053 INLINE PN_stdfloat dist_to_plane(const LPoint3 &point) const; 00054 00055 INLINE void set_plane(const LPlane &plane); 00056 INLINE const LPlane &get_plane() const; 00057 00058 INLINE void flip(); 00059 00060 protected: 00061 virtual PT(BoundingVolume) compute_internal_bounds() const; 00062 00063 protected: 00064 virtual PT(CollisionEntry) 00065 test_intersection_from_sphere(const CollisionEntry &entry) const; 00066 virtual PT(CollisionEntry) 00067 test_intersection_from_line(const CollisionEntry &entry) const; 00068 virtual PT(CollisionEntry) 00069 test_intersection_from_ray(const CollisionEntry &entry) const; 00070 virtual PT(CollisionEntry) 00071 test_intersection_from_segment(const CollisionEntry &entry) const; 00072 virtual PT(CollisionEntry) 00073 test_intersection_from_parabola(const CollisionEntry &entry) const; 00074 00075 virtual void fill_viz_geom(); 00076 00077 private: 00078 LPlane _plane; 00079 00080 static PStatCollector _volume_pcollector; 00081 static PStatCollector _test_pcollector; 00082 00083 public: 00084 static void register_with_read_factory(); 00085 virtual void write_datagram(BamWriter* manager, Datagram &me); 00086 00087 static TypedWritable *make_CollisionPlane(const FactoryParams ¶ms); 00088 00089 protected: 00090 void fillin(DatagramIterator& scan, BamReader* manager); 00091 00092 public: 00093 static TypeHandle get_class_type() { 00094 return _type_handle; 00095 } 00096 static void init_type() { 00097 CollisionSolid::init_type(); 00098 register_type(_type_handle, "CollisionPlane", 00099 CollisionSolid::get_class_type()); 00100 } 00101 virtual TypeHandle get_type() const { 00102 return get_class_type(); 00103 } 00104 virtual TypeHandle force_init_type() {init_type(); return get_class_type();} 00105 00106 private: 00107 static TypeHandle _type_handle; 00108 }; 00109 00110 #include "collisionPlane.I" 00111 00112 #endif 00113 00114