Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/terrain.old/src/lib/graphics/importer/terrain/terrain_quad.h

Last change on this file was 9417, checked in by bensch, 18 years ago

Cleanup after merge

File size: 2.4 KB
Line 
1/*
2        orxonox - the future of 3D-vertical-scrollers
3
4        Copyright (C) 2006 orx
5
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.
10
11        ### File Specific:
12        main programmer: Marco Biasini
13
14 */
15#ifndef _TERRAIN_QUAD_TREE_H
16#define _TERRAIN_QUAD_TREE_H
17
18#include "types.h"
19#include "frustum.h"
20#include <stdio.h>
21class Terrain;
22class TerrainQuad;
23typedef TerrainQuad *pTerrainQuad;
24
25typedef enum { TL_CHILD = 0, TR_CHILD = 1, BL_CHILD = 2, BR_CHILD = 3 } TerrainQuadChild;
26
27class TerrainQuad {
28        public:
29                TerrainQuad( Terrain *_owner, int _xOffset, int _zOffset );
30                TerrainQuad( Terrain *_owner, int _x0, int _z0, int _x1, int _z1 );
31
32                virtual ~TerrainQuad( )
33                {
34                        for ( int i = 0; i < 4; ++i ) {
35                                if ( !children[i]->isChildless() )
36                                        SAVE_DELETE( children[i] );
37                        }
38                }
39                int cull( );
40
41                /**
42                 * Returns the array containing the children quad-nodes of this node in the following
43                 * order: top-left, top-right, bottom-left, bottom-right
44                 */
45                inline pTerrainQuad* getChildren( )
46                {
47                        return children;
48                }
49
50                /**
51                 * Sets the child-nodes to the specified _children elements.
52                 */
53                void setChildren( pTerrainQuad _children[] )
54                {
55                        for ( int i = 0; i < 4; ++i )
56                                children[i] = _children[i];
57                }
58
59                inline bool isChildless() { return ( children[0] == NULL ); }
60
61                /**
62                 * Returns the child node given by _child. The returned node may be null.
63                 */
64                inline pTerrainQuad getChild( TerrainQuadChild _child )
65                {
66                        return children[_child];
67                }
68                inline void setScale( Vector _scale )
69                {
70                        scale = _scale;
71                }
72                inline const ABox getBounds() { return bounds; }
73                inline void setChildren( pTerrainQuad _bl, pTerrainQuad _br, pTerrainQuad _tl,
74                        pTerrainQuad _tr )
75                {
76                        children[TL_CHILD] = _tl;
77                        children[TR_CHILD] = _tr;
78                        children[BR_CHILD] = _br;
79                        children[BL_CHILD] = _bl;
80                }
81                /**
82                 * Calculates the mininum and maximum value of this box based on the size
83                 * and position of its children.
84                 */
85                virtual void calculateBounds( );
86                inline int getXOffset() { return xOffset; }
87                inline int getZOffset() { return zOffset; }
88                inline int getWidth() { return width; }
89                inline int getHeight() { return height; }
90
91        protected:
92                TerrainQuad( ) {}
93                Terrain                 *owner;
94                int                             xOffset, zOffset;
95                int                             width,  height;
96                Vector                  scale;
97                pTerrainQuad    children[4];
98                ABox                    bounds;
99};
100
101#endif
Note: See TracBrowser for help on using the repository browser.