Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/adm/src/lib/graphics/importer/bsp/bsp_manager.h @ 10680

Last change on this file since 10680 was 10680, checked in by snellen, 17 years ago

Added Raycollision method to the BspManager

File size: 4.2 KB
RevLine 
[7353]1/*
2   orxonox - the future of 3D-vertical-scrollers
[8490]3
[7353]4   Copyright (C) 2006 orx
[8490]5
[7353]6   This program is free software; you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation; either version 2, or (at your option)
9   any later version.
[8490]10
[7353]11   ### File Specific:
12   main-programmer: bottac@ee.ethz.ch
[8490]13
[8081]14   Inspired by:
15   Rendering Q3 Maps by Morgan McGuire                  http://graphics.cs.brown.edu/games/quake/quake3.html
16   Unofficial Quake 3 Map Specs by Kekoa Proudfoot      http://graphics.stanford.edu/~kekoa/q3/
[8490]17
[8081]18   Collision detection adapted from:
19   Quake 3 Collision Detection by Nathan Ostgard        http://www.devmaster.net/articles/quake3collision/
[7353]20*/
21
[8490]22#ifndef _BSP_MANAGER_H
23#define _BSP_MANAGER_H
24
25
[7385]26#include <vector>
27#include <deque>
[7353]28
[8490]29
[9110]30#define BSP_X_OFFSET 20.0f
[9003]31#define BSP_Y_OFFSET 40.0f
[9110]32#define BSP_Z_OFFSET 20.0f
[8490]33
[9003]34
[7563]35// FORWARD DECLARATIONS
[7353]36class  BspFile;
37class BspTreeLeaf;
38class BspTreeNode;
39class Vector;
40class set;
41struct face;
[7563]42struct brush;
[8030]43struct plane;
44
[7833]45class WorldEntity;
[7353]46
[9003]47
48// Obsolete
[8081]49struct BspCollisionEvent
50{
51  Vector normal; //!< normal Vector, length 1
52  Vector place;  //!< Absoloute coordinates of collision
53};
54
[7353]55class BspManager
56{
57public:
[7395]58  // Constructors
[8490]59  BspManager(WorldEntity* parent);
60
[8081]61  BspManager(const char* fileName, float scale = 0.4f);
[7353]62
[9003]63  // Deconstructor
64  ~BspManager();
65
66
67
[7395]68  // Functions
[9003]69  int load(const char* fileName, float scale);
[8081]70  const void draw();
[8490]71  const void tick(float time);
72  void draw_debug_face(int Face);
[7395]73  void draw_face(int Face);
74  void draw_patch(face* Face);
[7353]75
[7395]76
[8490]77  void checkCollision(WorldEntity* worldEntity); /*!< WorldEntities use this function to check wheter they collided with the BspEntity.
78                                                      If a collision has been detected, the collides-function of worldEntity will be called.*/
[10680]79  float checkCollisionRay(Vector StartPoint, Vector Direction, float length ) ;
[8490]80
[10519]81  int sortTransparency;              //!< sort transparent textures
82  int sortTransparencyMore;          //!< sort transparent textures better
83
[7353]84private:
[9110]85  // collision functions
[7395]86  BspTreeNode* getLeaf(BspTreeNode*  node,   Vector* cam) ;  //!< Traverses the tree
[8490]87  void  checkCollision(BspTreeNode* node, Vector* cam); //!< Obsolete. Use this function for debugging only!
88  void  checkCollisionRay(BspTreeNode * node,float startFraction, float endFraction, Vector* start, Vector* end);
89  void  checkCollisionRayN(BspTreeNode * node,float startFraction, float endFraction, Vector* start, Vector* end);
[9110]90
[10618]91  bool checkCollisionX(WorldEntity* entity);
92  bool checkCollisionY(WorldEntity* entity);
93  bool checkCollisionZ(WorldEntity* entity);
94  bool checkCollisionWay(WorldEntity* entity);
[9110]95
[8490]96  void  checkCollisionBox(void);
[7563]97  void  checkBrushRay(brush* curBrush);
[8081]98  void  checkBrushRayN(brush* curBrush);
[8724]99  void  checkBrushRayN(brush* curBrush, Vector& inputStart, Vector& inputEnd);
[9110]100  float checkPatchAltitude(BspTreeNode* node); //! To be implemented...
[8490]101
[9110]102  void  TraceBox( Vector& inputStart, Vector& inputEnd,Vector& inputMins, Vector& inputMaxs );
103
104
105  // visibility functions
[7395]106  void drawDebugCube(Vector* cam);
[7563]107  bool isAlreadyVisible(int Face);
108  void addFace(int Face);
[8490]109
[7563]110  // Data
111  BspFile*  bspFile;
112  BspTreeNode* root;
[7395]113  Vector cam;
114  Vector ship;
115  Vector  viewDir;
[8030]116  plane* collPlane;
[7563]117  int lastTex;
[8490]118
119  //obsolete: global variables for collision detection
[7563]120  bool  outputStartsOut;
121  bool  outputAllSolid;
122  float outputFraction;
[8490]123  Vector inputStart;
124  Vector inputEnd;
[9003]125
[8490]126  Vector traceMins; //!< Mins of current bbox
127  Vector traceMaxs; //!< Maxs of current bbox
128  Vector traceExtents; /*!< Stores the maximum of the absolute value of each axis in the box.
129                            For example, if traceMins was (-100,-3,-15) and traceMaxs was (55,22,7), traceExtents */
130
131  WorldEntity* parent;          //!< the parent entity of the bspManager: interface to this
132
[7395]133  bool * alreadyVisible;
134  // Deques to store the visible faces
[10314]135  ::std::vector<int> trasparent; //!< the ones with transparancy go here
136  ::std::vector<int> opal; //!< the others here.
[7385]137
[9003]138  Vector out;  //!< Stores collision coordinates
[8490]139  Vector out1; //!< For debugging only
140  Vector out2; //!< For debugging only
[9003]141
[8490]142  int tgl;
[7353]143};
144
[8490]145#endif /* _BSP_MANAGER_H */
Note: See TracBrowser for help on using the repository browser.