All pastes #1320049 Raw Edit

3D Buzz evil monkeys level.cpp

public text v1 · immutable
#1320049 ·published 2009-01-27 23:27 UTC
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);
}