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 Planef &plane); 00035 INLINE CollisionPlane(const CollisionPlane ©); 00036 00037 virtual LPoint3f get_collision_origin() const; 00038 00039 public: 00040 virtual CollisionSolid *make_copy(); 00041 00042 virtual void xform(const LMatrix4f &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 LVector3f get_normal() const; 00053 INLINE float dist_to_plane(const LPoint3f &point) const; 00054 00055 INLINE void set_plane(const Planef &plane); 00056 INLINE const Planef &get_plane() const; 00057 00058 protected: 00059 virtual PT(BoundingVolume) compute_internal_bounds() const; 00060 00061 protected: 00062 virtual PT(CollisionEntry) 00063 test_intersection_from_sphere(const CollisionEntry &entry) const; 00064 virtual PT(CollisionEntry) 00065 test_intersection_from_line(const CollisionEntry &entry) const; 00066 virtual PT(CollisionEntry) 00067 test_intersection_from_ray(const CollisionEntry &entry) const; 00068 virtual PT(CollisionEntry) 00069 test_intersection_from_segment(const CollisionEntry &entry) const; 00070 virtual PT(CollisionEntry) 00071 test_intersection_from_parabola(const CollisionEntry &entry) const; 00072 00073 virtual void fill_viz_geom(); 00074 00075 private: 00076 Planef _plane; 00077 00078 static PStatCollector _volume_pcollector; 00079 static PStatCollector _test_pcollector; 00080 00081 public: 00082 static void register_with_read_factory(); 00083 virtual void write_datagram(BamWriter* manager, Datagram &me); 00084 00085 static TypedWritable *make_CollisionPlane(const FactoryParams ¶ms); 00086 00087 protected: 00088 void fillin(DatagramIterator& scan, BamReader* manager); 00089 00090 public: 00091 static TypeHandle get_class_type() { 00092 return _type_handle; 00093 } 00094 static void init_type() { 00095 CollisionSolid::init_type(); 00096 register_type(_type_handle, "CollisionPlane", 00097 CollisionSolid::get_class_type()); 00098 } 00099 virtual TypeHandle get_type() const { 00100 return get_class_type(); 00101 } 00102 virtual TypeHandle force_init_type() {init_type(); return get_class_type();} 00103 00104 private: 00105 static TypeHandle _type_handle; 00106 }; 00107 00108 #include "collisionPlane.I" 00109 00110 #endif 00111 00112