00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
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
00027
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