rendered paste body#include "level.h"
#include "character.h"
#include "enemy.h"
#include <stdlib.h>
Level::Level(DrawEngine *de, int w, int h){
drawArea = de;
width = w;
height = h;
player = 0;
//char **
//reserve memory for the level
level = new char*[width];
for(int x = 0; x < width; x++)
level[x] = new char[height];
//create the level
createLevel();
drawArea->setMap(level);
}
Level::~Level(){
for(int x = 0; x < width; x++)
delete [] level[x];
delete [] level;
}
void Level::createLevel(void){
for(int x = 0; x < width; x++){
for(int y = 0; y < height; y++){
int random = rand() % 100;
if(y == 0 || y == height - 1 || x == 0 || x == width - 1)
level[x][y] = TILE_WALL;
else{
if(random < 90 || (x < 3 && y < 3))
level[x][y] = TILE_EMPTY;
else
level[x][y] = TILE_WALL;
}
}
}
}
void Level::draw(){
// we need to draw the level
drawArea->drawBackground();
}
void Level::addPlayer(Character *p){
player = p;
}
bool Level::keyPress(char c){
if(player)
if(player->keyPress(c))
return true;
return false;
}
void Level::update(void){
//Here's where we update all the stuff
for(Iter = npc.begin(); Iter != npc.end(); Iter++){
(*Iter)->idleUpdate();
if((*Iter)->isAlive() == false){
Sprite *temp = *Iter;
Iter--;
delete temp;
npc.remove(temp);
}
}
}
void Level::addEnemies(int num){
int i = num;
while(i > 0){
int xpos = float((rand() % 100) / 100) * (width - 2) + 1;
int ypos = float((rand() % 100) / 100) * (height - 2) + 1;
if(level[xpos][ypos] != TILE_WALL){
Enemy *temp = new Enemy(this, drawArea, SPRITE_ENEMY, (float)xpos, (float)ypos, 1);
temp->addGoal(player);
addNPC((Sprite *)temp);
i--;
}
}
}
void Level::addNPC(Sprite *spr){
npc.push_back(spr);
}