src/proto2/Terrain.hh
author saiam
Sun, 30 Nov 2008 00:28:12 +0000
changeset 139 77220921ae7d
parent 137 8736fdd12197
child 142 00672d0682ac
permissions -rw-r--r--
Toteutin viel? yhen funktion Terrainiin. Jos joku ehtii huomenna ennen mua toteuttamaan loputkin (l?hinn? noi collidet)
niin saa suorittaa.
137
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
     1
#ifndef TERRAIN_HH
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
     2
#define TERRAIN_HH
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
     3
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
     4
#include <vector>
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
     5
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
     6
#include "Vector.hh"
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
     7
#include "Config.hh"
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
     8
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
     9
enum TerrainType {EMPTY, DIRT, ROCK};
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    10
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    11
/**
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    12
 * Terrain class. Represents game terrain and contains member
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    13
 * functions to manipulate terrain and get info about it.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    14
 * 
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    15
 * Terrain resolution is a constant that is defined in
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    16
 * configuration. Terrain has a scale (i.e. the width and height in
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    17
 * "real" units. Scaling is needed because physics simulation uses
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    18
 * "real" units. The idea is that this class is used with "real" units
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    19
 * and it uses pixelcoordinates internally.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    20
 */ 
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    21
class Terrain {
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    22
private:
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    23
    const Vector scale;
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    24
    std::vector<std::vector<TerrainType> > terrain;
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    25
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    26
    // Terrain graphic
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    27
    CL_PixelBuffer pixbuf;
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    28
    
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    29
    /**
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    30
     * Generates pixelbuffer from terrain. Should be used only on
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    31
     * constructors because this is expected to be slow.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    32
     */
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    33
    void generatePixelBuffer();
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    34
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    35
    /**
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    36
     * Get pixel location of a point that is in "real" units.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    37
     *
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    38
     * @param point Point in "real" units
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    39
     * @return Int vector
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    40
     */
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    41
    Vector getPixelLocation(Vector point);
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    42
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    43
public:
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    44
    /**
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    45
     * Constructor.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    46
     *
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    47
     * @param scale The "real" width and height of the terrain.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    48
     */
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    49
    Terrain(const Vector &scale);
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    50
    /**
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    51
     * Constructor.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    52
     *
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    53
     * @param scale The "real" width and height of the terrain.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    54
     * @param seed Random number generator seed used to create the
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    55
     * terrain.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    56
     */
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    57
    Terrain(const Vector &scale, const int &seed);
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    58
    /**
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    59
     * Copy constructor.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    60
     *
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    61
     * @param t Terrain to be copied.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    62
     */
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    63
    Terrain(const Terrain &t);
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    64
    /**
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    65
     * Destructor
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    66
     */
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    67
    ~Terrain();
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    68
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    69
    /**
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    70
     * Check if given point has some terrain.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    71
     *
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    72
     * @param point Point that is in scaled units.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    73
     */
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    74
    bool collides(const Vector &point) const;
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    75
    /**
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    76
     * Check if given line collides with terrain.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    77
     *
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    78
     * @param begin Line begin point in scaled units.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    79
     * @param end Line end point in scaled units.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    80
     */
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    81
    bool collides(const Vector &begin, const Vector &end) const;
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    82
    
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    83
    /**
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    84
     * Remove a circular area from terrain.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    85
     *
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    86
     * @param pos Circle center
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    87
     * @param r Circle radius
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    88
     */ 
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    89
    void removeGround(Vector pos, float r);
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    90
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    91
    /**
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    92
     * Get tangent for the given point.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    93
     *
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    94
     * @param point Point where the tangent is calculated
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    95
     * @param n Accuracy in pixels 
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    96
     */
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    97
    Vector getTangent(Vector point, int n = 1) const;
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    98
    /**
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
    99
     * Get tangent for the given point.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   100
     *
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   101
     * @param point Point where the tangent is calculated
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   102
     * @param a Accuracy in scaled units.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   103
     */
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   104
    Vector getTangent(Vector point, float a) const;
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   105
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   106
    /**
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   107
     * Return normal for the given point.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   108
     *
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   109
     * @param point Point for which the normal is calculated.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   110
     * @param n Accuracy in pixels
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   111
     */
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   112
    Vector getNormal(Vector point, int n = 1) const;
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   113
    /**
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   114
     * Return a normal for the given point.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   115
     *
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   116
     * @param point Point for which the normal is calculated.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   117
     * @param a Accuracy in scaled units
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   118
     */
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   119
    Vector getNormal(Vector point, float a) const;
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   120
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   121
    /**
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   122
     * Generate random terrain.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   123
     *
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   124
     * @param seed Seed for the randomnumber generator.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   125
     */
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   126
    void generateTerrain(int seed);
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   127
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   128
    /**
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   129
     * Draw the terrain for given graphicscontext.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   130
     *
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   131
     * @param gc CL_GraphicContext
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   132
     */
139
77220921ae7d Toteutin viel? yhen funktion Terrainiin. Jos joku ehtii huomenna ennen mua toteuttamaan loputkin (l?hinn? noi collidet)
saiam
parents: 137
diff changeset
   133
    void draw(CL_GraphicContext *gc) const;
137
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   134
    /**
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   135
     * Draw part of the terrain for given graphiscontext.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   136
     *
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   137
     * @param gc CL_GraphicContext
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   138
     * @param center Center of the rectangle drawn.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   139
     * @param dimension Dimensions of the rectangle.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   140
     */
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   141
    void draw(CL_GraphicContext &gc, Vector center, Vector dimensions);
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   142
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   143
    /**
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   144
     * Set terrain.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   145
     *
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   146
     * @param terrain Terrain.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   147
     */
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   148
    void setTerrain(const std::vector<std::vector<TerrainType> > &terrain);
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   149
    /**
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   150
     * Get terrain.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   151
     *
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   152
     * @return Terrain.
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   153
     */
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   154
    std::vector<std::vector<TerrainType> > getTerrain() const;
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   155
};
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   156
8736fdd12197 Drafted somekind of Terrain class. Still unfinished and not uses.
saiam
parents:
diff changeset
   157
#endif