Пример #1
0
static void statueAttack()
{
	Entity *e;

	self->thinkTime--;

	if (self->thinkTime <= 0)
	{
		e = addEnemy("enemy/flame_statue", 0, 0);

		e->health = 5;

		e->layer = BACKGROUND_LAYER;

		e->x = player.x + player.w / 2 - e->w / 2;

		e->x -= player.w * 2;

		e->mental = 0;

		e->y = getMapFloor(self->x + self->w / 2, self->y);

		e->targetY = e->y - e->h;

		e->action = &statueRise;

		e->touch = NULL;

		e->thinkTime = 240;

		e = addEnemy("enemy/flame_statue", 0, 0);

		e->health = 5;

		e->layer = BACKGROUND_LAYER;

		e->x = player.x + player.w / 2 - e->w / 2;

		e->x += player.w * 2;

		e->mental = 1;

		e->y = getMapFloor(self->x + self->w / 2, self->y);

		e->targetY = e->y - e->h;

		e->action = &statueRise;

		e->touch = NULL;

		e->thinkTime = 240;

		self->thinkTime = 600;

		self->action = &statueRiseWait;
	}

	hover();
}
void Enemies::createEnemy(int model, FLOAT x1, FLOAT y1, FLOAT z1, FLOAT x2, FLOAT y2, FLOAT z2, FLOAT x3, FLOAT y3, FLOAT z3, FLOAT x4, FLOAT y4, FLOAT z4, FLOAT scale, int speed, int collisionstype)
{
	Enemy* newEnemy;
	newEnemy = new Enemy();

	XMMATRIX modelScale = XMMatrixScaling(scale, scale, -scale);
	XMMATRIX modelRot = XMMatrixRotationY(0);
	XMMATRIX modelOffset = XMMatrixTranslation(x1, y1, z1);

	newEnemy->setModelScale(modelScale);
	newEnemy->setModelRot(modelRot);
	newEnemy->setModelOffset(modelOffset);

	newEnemy->SetPositionOne(x1, y1, z1);
	newEnemy->SetPositionTwo(x2, y2, z2);
	newEnemy->SetPositionThree(x3, y3, z3);
	newEnemy->SetPositionFour(x4, y4, z4);



	if (model == simpleEnemy)
	{
		anEnemy = mSimpleEnemy;
	}
	else if (model == tractor)
	{
		anEnemy = mTractor;
	}

	newEnemy->setModel(anEnemy);
	newEnemy->setScale(scale);
	newEnemy->setSpeed(speed);
	newEnemy->setcollisiontype(collisionstype);


	BasicModelInstance oneEnemy;


	theEnemy.Model = anEnemy;


	XMStoreFloat4x4(&theEnemy.World, modelScale*modelRot*modelOffset);


	newEnemy->setBasicMInstance(theEnemy);

	oneEnemy = newEnemy->getBasicMInstance();



	addEnemy(theEnemy);

	enemyclass.push_back(newEnemy);


	LevelCollisions.push_back(EnemyBox);

	newEnemy->setWorld(theEnemy.World);

}
Пример #3
0
bool Monster::addEnemy(Creature* target, bool print) {
    if(isEnemy(target))
        return false;

    if(print) {
      if(aggroString[0])
          broadcast(nullptr, getRoomParent(), "%M says, \"%s.\"", this, aggroString);

      target->printColor("^r%M attacks you.\n", this);
      broadcast(target->getSock(), getRoomParent(), "%M attacks %N.", this, target);
    }

    if(target->isPlayer()) {
      // take pity on these people
      if(target->isEffected("petrification") || target->isUnconscious())
          return(0);
      // pets should not attack master
      if(isPet() && getMaster() == target)
          return(false);
    }
    if(target->isPet()) {
        addEnemy(target->getMaster());
    }

    adjustThreat(target, 0);
    return(true);
}
Пример #4
0
bool PlayLayer::init()
{
    if (!Layer::init()) {
        return false;
    }
    Size winSize = Director::getInstance()->getWinSize();
    
    SpriteFrameCache::getInstance()->addSpriteFramesWithFile("Sprite.plist");
    spriteSheet = SpriteBatchNode::create("Sprite.png");
    addChild(spriteSheet);
    
    map = TMXTiledMap::create("map1.tmx");
    auto bgLayer = map->getLayer("bg");
    bgLayer->setAnchorPoint(Point(0.5f, 0.5f));
    bgLayer->setPosition(Point(winSize.width / 2 ,winSize.height / 2));
	objects = map->getObjectGroup("obj");
    this->addChild(map, -1);
    
    float offX = ( map->getContentSize().width - winSize.width )/ 2;
    initPointsVector(offX);
    addEnemy();
    
    
    auto touchListener = EventListenerTouchOneByOne::create();
    touchListener->onTouchBegan = CC_CALLBACK_2(PlayLayer::onTouchBegan, this);
    _eventDispatcher->addEventListenerWithSceneGraphPriority(touchListener, this);
    
    scheduleUpdate();
    return true;
}
Пример #5
0
void Brave::addRoles()
{
	player = Player::create(Player::PlayerType::PLAYER);
	player->setPosition(VisibleRect::left().x + player->getContentSize().width / 2, VisibleRect::top().y / 2);
	this->addChild(player, 10);
	addEnemy();
}
Пример #6
0
static void creditsMove()
{
    Entity *e;

    e = addEnemy("boss/awesome_boss_4", self->x + 24, self->y);

    e->endX = 24;

    e->head = self;

    e->face = LEFT;

    e->creditsAction = &creditsMoveToMiddle;

    e = addEnemy("boss/awesome_boss_3", self->x + 16, self->y);

    e->endX = 16;

    e->head = self;

    e->face = LEFT;

    e->creditsAction = &creditsMoveToMiddle;

    e = addEnemy("boss/awesome_boss_2", self->x + 8, self->y);

    e->endX = 8;

    e->head = self;

    e->face = LEFT;

    e->creditsAction = &creditsMoveToMiddle;

    e = addEnemy("boss/awesome_boss_1", self->x + 0, self->y);

    e->endX = 0;

    e->head = self;

    e->face = LEFT;

    e->creditsAction = &creditsMoveToMiddle;

    self->creditsAction = &bossMoveToMiddle;
}
Пример #7
0
void ld::PlayState::countTimeForEnemies()
{
	if (m_Time <= m_spawnTime)
	{
		m_spawnTime = 0;
		addEnemy();
	}
}
Пример #8
0
void MainScene::addRoles()
{
	//add player
	_player = Player::create(Player::PlayerType::PLAYER);
	_player->setPosition(VisibleRect::left().x + _player->getContentSize().width/2, VisibleRect::top().y/2);
	this->addChild(_player,10);
	addEnemy();
}
Пример #9
0
int main(int argc, char* args[])
{
	SDL_Window* window = nullptr;
	SDL_Surface* windowSurface = nullptr;
	SDL_Renderer* renderer = nullptr;

	if (!init(&window, &windowSurface, &renderer))
	{
		printf("Failed to initialize SDL.\n", SDL_GetError());
	}
	else
	{
		bool quit = false;
		SDL_Event e;
		Player player;
		SDL_Rect winBox;

		addEnemy();
		addEntity(player.m_pos, 375, 25, 25, 25);
		addEntity(winBox, 0, 750, 50, 800);

		//Game loop
		while (!quit)
		{
			while (SDL_PollEvent(&e) != 0)
			{
				if (e.type == SDL_QUIT) {
					quit = true;
				}
				if (e.type == SDL_KEYDOWN)
				{
					inputMananger(e, player.m_pos, player.m_movementSpeed);
				}
			}

			if (playerCollisions(enemies, player)) {
				resetPlayerPos(player);
			}

			enemyMovement();
			gameBounds(player.m_pos);
			render(&renderer, player.m_pos, winBox);

			//Check to see whether the game is won
			if (checkWinCollision(winBox, player)) {
				quit = true;
			}

			SDL_Delay(16); //Simulate 16 fps
		}
	}

	close(&window, &renderer);
	return 0;
}
Пример #10
0
void			Env::_genEnemy( void ) {
	static int frame = 0;
	frame++;

	if (frame == REP_ENEMY) {
		Enemy *enemy = new Enemy(_hud.maxX+1, _hud.maxY+1);
		enemy->setMaxMinXY(MAP_LIMITS);
		addEnemy(*enemy);
		frame = 0;
	}
}
Пример #11
0
void GameObj::addContact(GameObj *enemy) {
	if(enemy == NULL) {
		groundContact = true;
	}
	else if(enemy->isNPC() != isNPC()) {
//		contacts++; 
		if(enemy->getType() != Settings::OBJ_T_BULLET) {
			addEnemy(enemy); 
		}
	}
}
Пример #12
0
void refreshTileMap(Game* g)
{
	memset(g->doors, 0, g->doorArraySize * sizeof(door));
	memset(g->enemies, 0, g->enemyArraySize * sizeof(enemy));
	memset(g->gameKeys, 0, g->keyArraySize * sizeof(key));
	memset(g->shots, 0, g->shotArraySize * sizeof(shot));
	memset(&g->player1, 0, sizeof(player));
	memset(&g->stairs, 0, sizeof(stair));

	Tile* t;
	for (int i = 0; i < TILEMAPSIDE; i++)
	{
		for (int j = 0; j < TILEMAPSIDE; j++)
		{
			t = &g->tileMaps[0].tiles[i][j];
			switch (t->tileID)
			{

			case Tile::FLOOR:
				t->filled = FALSE;
				t->texID = g->floorTex;
				break;
			case Tile::WALL:
				t->filled = TRUE;
				t->texID = g->wallTex;
				break;
			case Tile::ENEMY_FLOOR:
				t->filled = false;
				t->texID = g->floorTex;
				//enemy spawn
				addEnemy(g, TILESIDE*(j + 0.5), TILESIDE*(i + 0.5), g->enemyTex);
				break;
			case Tile::PLAYER_FLOOR:
				t->filled = false;
				t->texID = g->floorTex;
				//player spawn
				setPlayer(g, TILESIDE*(j + 0.5) , TILESIDE*(i + 0.5), g->playerTex);
				break;
			case Tile::STAIR:
				t->filled = false;
				t->texID = g->floorTex;
				setStair(g, TILESIDE*(j + 0.5), TILESIDE*(i + 0.5), g->stairTex); 
				break;
			case Tile::DOOR:
				t->filled = false;
				t->texID = g->floorTex;
				addDoor(g, TILESIDE*(j + 0.5), TILESIDE*(i + 0.5), g->doorTex);
				break;
			}
		}
	}
	printf("");

}
Пример #13
0
void		ListEnemies::handleEnnemy(const uint8_t id, const uint8_t life, const uint8_t type, const uint16_t x, const uint16_t y)
{
  Enemy_SharedPtr	e;

  if ((e = getEnemy(id)) == nullptr) {
    e = std::make_shared<Enemy>(id, life, type);
    addEnemy(e);
  }
  e->setX(x);
  e->setY(y);
}
Пример #14
0
void
Game2D::
addEnemyLine (int x, int y, int size, int count, int type, int align){
    if (align==1) x=x+width()/2-size*count/2;
    if (align==2) x=x+width()-size*count;

    for (int i=0; i<count; i++){
        addEnemy (x, y, size, type);
        x+=size;
    }
}
Пример #15
0
void World::addEnemies()
{
	const auto numberOfEnemies = 66u;
	const auto enemiesPerRow = 11u;
	const auto horizontalSpacing = 40.f;
	const auto verticalSpacing = 35.f;

	const sf::Vector2f positionOfTopLeft(MovementsPadding, Padding * 2.5);

	for (auto i = 0u; i < numberOfEnemies; ++i)
	{
		sf::Vector2f position(horizontalSpacing * (i % enemiesPerRow), verticalSpacing * (i / enemiesPerRow));

		if (i < 22)
			addEnemy(Invader::Enemy1, positionOfTopLeft.x + position.x, positionOfTopLeft.y + position.y);
		else if (i >= 22 && i < 44)
			addEnemy(Invader::Enemy2, positionOfTopLeft.x + position.x, positionOfTopLeft.y + position.y);
		else if (i >= 44)
			addEnemy(Invader::Enemy3, positionOfTopLeft.x + position.x, positionOfTopLeft.y + position.y);
	}
}
Пример #16
0
void spawnRandomEnemy()
{
	debug(("spawnRandomEnemy()\n"));
	
	Properties props;
	Vector position;
	
	if (game->nomonsters)
	{
		return;
	}
	
	position = player->position;
	
	props.clear();
	
	position.x += Math::rrand(-80, 80);
	position.y += Math::rrand(-80, 80);
	position.z += Math::rrand(16, 64);
	
	props.setProperty("classname", extractEnemyFromList(mission->enemySpawnList.getText()));
	
	int type = entityManager->getEntityType(&props);
	
	if ((entityManager->enemyDef[type].flags & EF_WEIGHTLESS))
	{
		if (bsp->getContentsAtPosition(position) & (CONTENTS_SLIME|CONTENTS_LAVA|CONTENTS_WATER|CONTENTS_MONSTERCLIP|CONTENTS_SOLID))
		{
			debug(("spawnRandomEnemy() - Can't spawn in content type\n"));
			return;
		}
	}
	else if (!unitCanSpawnInLocation(NULL, position))
	{
		debug(("spawnRandomEnemy() - Can't spawn at position\n"));
		return;
	}
	
	props.setProperty("position", position);
	props.setProperty("spawnedIn", 1);
	props.setProperty("thinkTime", Math::rrand(50, 100)); // don't attack instantly!
	
	addEnemy(&props);

	addTeleportParticles(position);
	
	audio->playSound(SND_TELEPORT2, CH_SPAWN, camera->getSoundDistance(position));
	
	debug(("spawnRandomEnemy() - Done\n"));
}
void JG_AttackWave_AllLinesTogether::initAttackWave(float attackDifficulty, int attackCount)
{

	JG_AttackWave_Base::initAttackWave( attackDifficulty, attackCount);

	enemeyAddInterval = 0.3;
	pathCounter =0;
	

	int currentTotalPathExist = CALL_MEMBER_FN(listenerObj,getAvailablePathCountFunction)();

	float totalDifficulty = 0.0;
	float currentEnemyDifficulty;




	while( totalDifficulty < attackDifficulty)
	{


		currentEnemy=addEnemy();

		
		//CCLOG("enemy added");
		currentEnemyDifficulty = currentEnemy->GetDifficulty();
		
		//difficulty added because of path health
		currentEnemyDifficulty *= (1 + ( (100 - selectPath(pathCounter)->GetHealth() )/100 ));

		//defficulty added because of concurrent path attack
		currentEnemyDifficulty *= ( ( (pathCounter+1) > currentTotalPathExist ? currentTotalPathExist:(pathCounter+1)) *2 );
		
		totalDifficulty += currentEnemyDifficulty;

		enemyCounter ++;
		pathCounter ++;
		//TODO pathcounter is redundant



	}
	//schedule(schedule_selector(JG_AttackWave_AllLinesSequential::initiateEnemyAttack),0,1,0.1);
	//this->schedule(schedule_selector(JG_AttackWave_AllLinesSequential::initiateEnemyAttack),0.5);
	//initiateEnemyAttack(2);
	//schedule(schedule_selector(JG_AttackWave_AllLinesSequential::initiateEnemyAttack),enemeyAddInterval,pathCo);
	schedule(schedule_selector(JG_AttackWave_AllLinesSequential::initiateEnemyAttack), enemeyAddInterval, pathCounter-1,0);


}
Пример #18
0
void EnemyColletion::init(MapShowScene* m)
{
	mms = m;
	vector< vector<int> > mapData = mms->curMap->mapData;
	for (int i = 0; i < mapData.size(); i++ )
	{
		for (int j = 0; j < mapData[i].size(); j++ )
		{
			if (mapData[i][ j ] == Map::ENEMY )
			{
				addEnemy(i, j);
			}
		}
	}
}
void World::addEnemies()
{
	// Add enemies to the spawn point container
	addEnemy(Aircraft::Raptor,    0.f,  500.f);
	addEnemy(Aircraft::Raptor,    0.f, 1000.f);
	addEnemy(Aircraft::Raptor, +100.f, 1100.f);
	addEnemy(Aircraft::Raptor, -100.f, 1100.f);
	addEnemy(Aircraft::Avenger, -70.f, 1400.f);
	addEnemy(Aircraft::Avenger, -70.f, 1600.f);
	addEnemy(Aircraft::Avenger,  70.f, 1400.f);
	addEnemy(Aircraft::Avenger,  70.f, 1600.f);

	// Sort all enemies according to their y value, such that lower enemies are checked first for spawning
	std::sort(mEnemySpawnPoints.begin(), mEnemySpawnPoints.end(), [] (SpawnPoint lhs, SpawnPoint rhs)
	{
		return lhs.y < rhs.y;
	});
}
Пример #20
0
static void raiseDead()
{
	char targetName[MAX_VALUE_LENGTH];
	Target *t;
	Entity *e;

	self->thinkTime--;

	if (self->thinkTime <= 0)
	{
		snprintf(targetName, MAX_VALUE_LENGTH, "GRAVE_%c", self->description[self->mental]);

		t = getTargetByName(targetName);

		if (t == NULL)
		{
			showErrorAndExit("Azriel cannot find target");
		}

		e = addEnemy("enemy/zombie", t->x, t->y);

		e->y = getMapFloor(self->x + self->w / 2, self->y);

		e->startX = e->x;

		e->startY = e->y - e->h;

		e->endY = e->y;

		e->thinkTime = 15 + prand() % 105;

		self->mental--;

		if (self->mental <= 0)
		{
			self->thinkTime = 30;

			self->action = &raiseDeadFinish;
		}
	}

	checkToMap(self);

	becomeTransparent();
}
Пример #21
0
static void followPlayer()
{
	Entity *e;

	if (self->active == TRUE)
	{
		self->targetX = player.x - self->w / 2 + player.w / 2;

		/* Position above the player */

		if (abs(self->x - self->targetX) <= abs(self->dirX))
		{
			self->x = self->targetX;

			self->dirX = 0;
		}

		else
		{
			self->dirX = self->targetX < self->x ? -player.speed * 3 : player.speed * 3;
		}

		if (self->health > 0)
		{
			self->thinkTime--;

			if (self->thinkTime <= 0)
			{
				e = addEnemy("common/large_rock", self->x, self->y);

				e->x += (self->w - e->w) / 2;
				e->y += (self->h - e->h) / 2;

				self->health--;

				self->thinkTime = self->maxThinkTime;
			}
		}
	}

	checkToMap(self);
}
Пример #22
0
Entity *addEntityFromResource(char *type, char *name, int startX, int startY)
{
	Entity *e = NULL;

	if (strcmpignorecase(type, "ITEM") == 0 || strcmpignorecase(type, "SHIELD") == 0 || strcmpignorecase(type, "WEAPON") == 0)
	{
		e = addPermanentItem(name, startX, startY);
	}

	else if (strcmpignorecase(type, "TEMP_ITEM") == 0 || strcmpignorecase(type, "HEALTH") == 0)
	{
		e = addTemporaryItem(name, startX, startY, LEFT, 0, 0);
	}

	else if (strcmpignorecase(type, "PLAYER") == 0)
	{
		e = loadPlayer(startX, startY, NULL);
	}

	else if (strcmpignorecase(type, "PLAYER_WEAPON") == 0)
	{
		setPlayerWeaponName(name);
	}

	else if (strcmpignorecase(type, "PLAYER_SHIELD") == 0)
	{
		setPlayerShieldName(name);
	}

	else if (strcmpignorecase(type, "KEY_ITEM") == 0)
	{
		e = addKeyItem(name, startX, startY);
	}

	else if (strcmpignorecase(type, "ENEMY") == 0)
	{
		e = addEnemy(name, startX, startY);
	}

	else if (strcmpignorecase(type, "NPC") == 0)
	{
		e = addNPC(name, startX, startY);
	}

	else if (strcmpignorecase(type, "AUTO_LIFT") == 0 || strcmpignorecase(type, "MANUAL_LIFT") == 0)
	{
		e = addLift(name, startX, startY, getEntityTypeByName(type));
	}

	else if (strcmpignorecase(type, "SPAWNER") == 0)
	{
		e = addSpawner(startX, startY, name);
	}

	else if (strcmpignorecase(type, "TARGET") == 0)
	{
		addTarget(startX, startY, name);
	}

	else if (strcmpignorecase(type, "PRESSURE_PLATE") == 0)
	{
		e = addPressurePlate(name, startX, startY);
	}

	else if (strcmpignorecase(type, "TELEPORTER") == 0)
	{
		e = addTeleporter(name, startX, startY);
	}

	else if (strcmpignorecase(type, "AUTO_DOOR") == 0 || strcmpignorecase(type, "MANUAL_DOOR") == 0)
	{
		e = addDoor(name, startX, startY, getEntityTypeByName(type));
	}

	else if (strcmpignorecase(type, "WEAK_WALL") == 0)
	{
		e = addWeakWall(name, startX, startY);
	}

	else if (strcmpignorecase(type, "TRAP_DOOR") == 0)
	{
		e = addTrapDoor(name, startX, startY);
	}

	else if (strcmpignorecase(type, "CONVEYOR_BELT") == 0)
	{
		e = addConveyorBelt(name, startX, startY);
	}

	else if (strcmpignorecase(type, "SWITCH") == 0)
	{
		e = addSwitch(name, startX, startY);
	}

	else if (strcmpignorecase(type, "SCRIPT_LINE_DEF") == 0 || strcmpignorecase(type, "LINE_DEF") == 0)
	{
		e = addLineDef(type, name, startX, startY);
	}

	else if (strcmpignorecase(type, "LEVEL_EXIT") == 0)
	{
		e = addLevelExit(name, startX, startY);
	}

	else if (strcmpignorecase(type, "SAVE_POINT") == 0)
	{
		/* Save points don't spawn for replays */

		if (game.gameType == NORMAL)
		{
			e = addSavePoint(startX, startY);
		}
	}

	else if (strcmpignorecase(type, "TRIGGER") == 0)
	{
		addTriggerFromResource(key, value);
	}

	else if (strcmpignorecase(type, "GLOBAL_TRIGGER") == 0)
	{
		addGlobalTriggerFromResource(key, value);
	}

	else if (strcmpignorecase(type, "MAP_TRIGGER") == 0)
	{
		addMapTriggerFromResource(key, value);
	}

	else if (strcmpignorecase(type, "OBJECTIVE") == 0)
	{
		addObjectiveFromResource(key, value);
	}

	else if (strcmpignorecase(type, "ACTION_POINT") == 0)
	{
		e = addActionPoint(name, startX, startY);
	}

	else if (strcmpignorecase(type, "FALLING_PLATFORM") == 0)
	{
		e = addFallingPlatform(startX, startY, name);
	}

	else if (strcmpignorecase(type, "VANISHING_PLATFORM") == 0)
	{
		e = addVanishingPlatform(startX, startY, name);
	}

	else if (strcmpignorecase(type, "ANTI_GRAVITY") == 0)
	{
		e = addAntiGravityField(startX, startY, name);
	}

	else
	{
		showErrorAndExit("Unknown Entity type %s", type);
	}

	return e;
}
Пример #23
0
void EditLayer::onMessage( unsigned int type, unsigned long param1, unsigned long param2 )
{
	switch (type)
	{
	case MSG_DELETESELECTED:
		deleteSelected();
		break;

	case MSG_CHANGEITEMTYPE:
		changeEnemyType(param1, param2);
		break;

	case MSG_CHANGEITEMRINGTYPE:
		changeEnemyRingType(param1, param2);
		break;

	case MSG_CHANGEBOXTYPE:
		changeBlockBoxType(param1, param2);
		break;

	case MSG_CHANGESELECTED:
		{
			hidePropertyLayer();
			hideBlockBoxPropertyLayer();

			int old_sel = param1;
			int new_sel = param2;

			Node* pNode = this->getChildByTag(old_sel);
			if (pNode)
				pNode->removeChildByTag(TAG_SELECTED_RECT);

			Sprite* pSelected = dynamic_cast<Sprite*>(this->getChildByTag(new_sel));
			if (pSelected)
				drawSelectedRect(pSelected);
		}
		break;

	case MSG_ADDBLOCK:
		{
			switch (param1)
			{
			case kBlockBox:
				addBlock(Vec2(200, 200));
				break;

			case kBlockWheel:
				addWheel(Vec2(300, 300));
				break;

			case kBlockVortex:
				addVortex(Vec2(400, 400));
				break;

			case kBlockBomb:
				addBomb(Vec2(500, 500));
				break;
			default:
				break;
			}
		}
		break;

	case MSG_ADDENEMYITEM:
		addEnemy(BallBase::kTypeNormal1, Vec2(100, 100), BallBase::kTypeBulletUnknown);
		break;

	case MSG_SAVESTAGE:
		{
			_sectionId = param1;
			_stageId = param2;
			save();
		}
		break;

	case MSG_SETBULLETCOUNT:
		{
			_bulletCounter[param1] = param2;
			updateBulletCount();
		}
		break;

	default:
		break;
	}
}
Пример #24
0
void World::addEnemies(int level)	//requires level
{
	// Add enemies to the spawn point container
	if (level == 1){
		addEnemy(Aircraft::Raptor, 0.f, 500.f);
		addEnemy(Aircraft::Raptor, 0.f, 1000.f);
		addEnemy(Aircraft::Raptor, +100.f, 1150.f);
		addEnemy(Aircraft::Raptor, -100.f, 1150.f);
		addEnemy(Aircraft::Avenger, 70.f, 1500.f);
		addEnemy(Aircraft::Avenger, -70.f, 1500.f);
		addEnemy(Aircraft::Avenger, -70.f, 1710.f);
		addEnemy(Aircraft::Avenger, 140.f, 1700.f);
		addEnemy(Aircraft::Avenger, -140.f, 1850.f);
		addEnemy(Aircraft::Raptor, 300.f, 2200.f);
		addEnemy(Aircraft::Raptor, -300.f, 2200.f);
		addEnemy(Aircraft::Raptor, 0.f, 2200.f);
		addEnemy(Aircraft::Raptor, 0.f, 2500.f);
		addEnemy(Aircraft::Avenger, -300.f, 2700.f);
		addEnemy(Aircraft::Raptor, 0.f, 3000.f);
		addEnemy(Aircraft::Raptor, 250.f, 3250.f);
		addEnemy(Aircraft::Raptor, -250.f, 3250.f);
		addEnemy(Aircraft::Avenger, 0.f, 3500.f);
		addEnemy(Aircraft::Avenger, 0.f, 3700.f);
		addEnemy(Aircraft::Raptor, 0.f, 3800.f);
		addEnemy(Aircraft::Avenger, 0.f, 4000.f);
		addEnemy(Aircraft::Avenger, -200.f, 4200.f);
		addEnemy(Aircraft::Raptor, 200.f, 4200.f);
		addEnemy(Aircraft::Raptor, 0.f, 4400.f);
	}
	if (level == 2)
	{	//enemies added but needs to be optimized and placed correctly
		addEnemy(Aircraft::Raptor2, 0.f, 500.f);
		addEnemy(Aircraft::Raptor2, 0.f, 1000.f);
		addEnemy(Aircraft::Raptor2, 150.f, 1150.f);
		addEnemy(Aircraft::Raptor2, -150.f, 1150.f);
		addEnemy(Aircraft::Avenger2, 70.f, 1500.f);
		addEnemy(Aircraft::Avenger2, -70.f, 1500.f);
		addEnemy(Aircraft::Avenger2, -70.f, 1710.f);
		addEnemy(Aircraft::Avenger2, 70.f, 1700.f);
		addEnemy(Aircraft::Avenger2, 30.f, 1850.f);
		addEnemy(Aircraft::Raptor2, 300.f, 2200.f);
		addEnemy(Aircraft::Raptor2, -300.f, 2200.f);
		addEnemy(Aircraft::Raptor2, 0.f, 2200.f);
		addEnemy(Aircraft::Raptor2, 0.f, 2500.f);
		addEnemy(Aircraft::Avenger2, -300.f, 2700.f);
		addEnemy(Aircraft::Avenger2, 300.f, 2900.f);
		addEnemy(Aircraft::Raptor2, 0.f, 3000.f);
		addEnemy(Aircraft::Raptor2, 250.f, 3250.f);
		addEnemy(Aircraft::Raptor2, -250.f, 3250.f);
		addEnemy(Aircraft::Avenger2, 0.f, 3500.f);
		addEnemy(Aircraft::Avenger2, 0.f, 3700.f);
		addEnemy(Aircraft::Raptor2, 0.f, 3800.f);
		addEnemy(Aircraft::Avenger2, 0.f, 4000.f);
		addEnemy(Aircraft::Avenger2, -200.f, 4200.f);
		addEnemy(Aircraft::Raptor2, 200.f, 4200.f);
		addEnemy(Aircraft::Raptor2, 0.f, 4400.f);
	}
	if (level == 3)
	{
		addEnemy(Aircraft::Raptor3, 0.f, 500.f);
		addEnemy(Aircraft::Raptor3, 400.f, 750.f);
		addEnemy(Aircraft::Raptor3, -400.f, 750.f);
		addEnemy(Aircraft::Raptor3, 0.f, 1000.f);
		addEnemy(Aircraft::Raptor3, +200.f, 1150.f);
		addEnemy(Aircraft::Raptor3, -200.f, 1150.f);
		addEnemy(Aircraft::Avenger3, 140.f, 1500.f);
		addEnemy(Aircraft::Avenger3, 0.f, 1500.f);
		addEnemy(Aircraft::Avenger3, -140.f, 1500.f);
		addEnemy(Aircraft::Avenger3, -70.f, 1710.f);
		addEnemy(Aircraft::Avenger3, 70.f, 1700.f);
		addEnemy(Aircraft::Avenger3, 30.f, 1850.f);
		addEnemy(Aircraft::Raptor3, 375.f, 2200.f);
		addEnemy(Aircraft::Raptor3, -375.f, 2200.f);
		addEnemy(Aircraft::Raptor3, 0.f, 2200.f);
		addEnemy(Aircraft::Raptor3, 0.f, 2500.f);
		addEnemy(Aircraft::Avenger3, -325.f, 2700.f);
		addEnemy(Aircraft::Avenger3, 325.f, 2900.f);
		addEnemy(Aircraft::Raptor3, 0.f, 3000.f);
		addEnemy(Aircraft::Avenger3, 250.f, 3250.f);
		addEnemy(Aircraft::Avenger3, -250.f, 3250.f);
		addEnemy(Aircraft::Avenger3, 100.f, 3500.f);
		addEnemy(Aircraft::Avenger3, -100.f, 3600.f);
		addEnemy(Aircraft::Raptor3, 0.f, 3800.f);
		addEnemy(Aircraft::Avenger3, 0.f, 4000.f);
		addEnemy(Aircraft::Avenger3, -200.f, 4200.f);
		addEnemy(Aircraft::Raptor3, 200.f, 4200.f);
		addEnemy(Aircraft::Raptor3, 0.f, 4400.f);
	}


	// Sort all enemies according to their y value, such that lower enemies are checked first for spawning
	std::sort(mEnemySpawnPoints.begin(), mEnemySpawnPoints.end(), [] (SpawnPoint lhs, SpawnPoint rhs)
	{
		return lhs.y < rhs.y;
	});
}
Пример #25
0
bool ld::PlayState::init()
{
    std::srand(static_cast<unsigned int>(std::time(0)));
    
    if (m_music.openFromFile("assets/Audio/Music/Abstraction - Ludum Dare 28 - First Track.wav"))
        m_music.play();
    m_music.setLoop(true);

    const float buttonScale = 2.f;
    // Pause menu
    {
        std::array<std::unique_ptr<Button>, 3> buttons;

        for (auto& i : buttons)
        {
            i.reset(new Button(*m_window));

            i->setFillColor(sf::Color(255, 255, 255, 255));
            i->setSound("assets/Audio/Sound Effects/menuselect.ogg");
        }
        const float buttonOffset = 50.f;

        /****** Resume button ******/
        auto tex = ldResource.getTexture("assets/Graphics/Menus/retry.png");
        buttons[0]->setTexture(tex);
        buttons[0]->setSize(sf::Vector2f(tex->getSize()) * buttonScale);
        buttons[0]->setPosition(100.f, 100.f);
        buttons[0]->setCallback([this]()
        {
            m_menuState = Count;
            Engine::getInstance().setPaused(false);
        });

        /****** Restart button ******/
        tex = ldResource.getTexture("assets/Graphics/Menus/restart.png");
        buttons[1]->setTexture(tex);
        buttons[1]->setSize(buttons[0]->getSize());
        buttons[1]->setPosition(100.f, buttons[0]->getPosition().y + buttons[0]->getSize().y + buttonOffset);
        buttons[1]->setCallback([this]()
        {
            auto ptr = new PlayState(*m_window);
            ptr->setDifficulty(m_difficulty);
            Engine::getInstance().changeState(ptr);
            Engine::getInstance().setPaused(false);
        });

        /****** Exit button ******/
        tex = ldResource.getTexture("assets/Graphics/Menus/backToMenu.png");
        buttons[2]->setTexture(tex);
        buttons[2]->setSize(buttons[1]->getSize());
        buttons[2]->setPosition(100.f, buttons[1]->getPosition().y + buttons[1]->getSize().y + buttonOffset);
        buttons[2]->setCallback([this]()
        {
            Engine::getInstance().changeState(new MainMenuState(*m_window));
            Engine::getInstance().setPaused(false);
        });

        for (auto& i : buttons)
            m_menus[Pause]->addElement(i.release());
    }

    // Game over menu
    {
        std::array<std::unique_ptr<Button>, 2> buttons;

        for (auto& i : buttons)
        {
            i.reset(new Button(*m_window));

            i->setFillColor(sf::Color(255, 255, 255, 255));
            i->setSound("assets/Audio/Sound Effects/menuselect.ogg");
        }

        const float buttonOffset = 50.f;

        /****** Restart button ******/
        auto tex = ldResource.getTexture("assets/Graphics/Menus/restart.png");
        buttons[0]->setTexture(tex);
        buttons[0]->setSize(sf::Vector2f(tex->getSize()) * buttonScale);
        buttons[0]->setPosition(100.f, 100.f);
        buttons[0]->setCallback([this]()
        {
            auto ptr = new PlayState(*m_window);
            ptr->setDifficulty(m_difficulty);

            Engine::getInstance().changeState(ptr);
            Engine::getInstance().setPaused(false);
        });

        /****** Quit button ******/
        tex = ldResource.getTexture("assets/Graphics/Menus/backToMenu.png");
        buttons[1]->setTexture(tex);
        buttons[1]->setSize(buttons[0]->getSize());
        buttons[1]->setPosition(100.f, buttons[0]->getPosition().y + buttons[0]->getSize().y + buttonOffset);
        buttons[1]->setCallback([this]()
        {
            Engine::getInstance().changeState(new MainMenuState(*m_window));
            Engine::getInstance().setPaused(false);
        });

        for (auto& i : buttons)
            m_menus[GameOver]->addElement(i.release());
    }

	//Player
	auto tex = ldResource.getTexture("assets/Graphics/Player and shield planets/Player_Base.png");
	tex->setSmooth(true);
	m_player.setTexture(tex);
	m_player.setSize(sf::Vector2f(128.f,128.f));
	m_player.setOrigin(m_player.getSize().x / 2, m_player.getSize().y / 2);
	m_player.setPosition(m_window->getView().getCenter());

	tex = ldResource.getTexture("assets/Graphics/Player and shield planets/Shield.png");
	tex->setSmooth(true);
	m_player.m_shield.setTexture(tex);
	m_player.m_shield.setSize(sf::Vector2f(128.f, 128.f));
	m_player.m_shield.setOrigin(m_player.m_shield.getSize().x / 2, m_player.m_shield.getSize().y / 2);
	m_player.m_shield.setPosition(m_player.getPosition() - m_player.getSize());

	tex = ldResource.getTexture("assets/Graphics/Effects/electricity_chain_loop.png");
	tex->setSmooth(true);
	tex->setRepeated(true);
	m_player.m_chain.setTexture(tex);
	m_player.m_chain.setSize(sf::Vector2f(200, 200));
	m_player.m_chain.setOrigin(m_player.m_chain.getSize().x / 2, 0);
	m_player.m_chain.setPosition(m_player.getPosition());

    tex = ldResource.getTexture("assets/Graphics/Player and shield planets/Player_Cloud.png");
    tex->setSmooth(true);
    m_player.m_clouds.setTexture(tex);
    m_player.m_clouds.setSize(m_player.getSize());
    m_player.m_clouds.setScale(m_player.getScale());
    m_player.m_clouds.setOrigin(m_player.getSize() / 2.f);
    m_player.m_clouds.setPosition(m_player.getPosition());
	
    tex = ldResource.getTexture("assets/Graphics/Backgrounds/background.png");
    tex->setSmooth(true);
    m_background.setSize(m_window->getView().getSize());
    m_background.setTexture(tex);

    tex = ldResource.getTexture("assets/Graphics/Menus/healthcounter.png");
    tex->setSmooth(true);
    m_lifeIcon.setTexture(tex);
    m_lifeIcon.setSize(sf::Vector2f(m_lifeIcon.getTexture()->getSize()));

    tex = ldResource.getTexture("assets/Graphics/Menus/killcounter.png");
    tex->setSmooth(true);
    m_killIcon.setTexture(tex);
    m_killIcon.setSize(sf::Vector2f(m_killIcon.getTexture()->getSize()));

    auto font = ldResource.getFont("assets/Graphics/Roboto-Black.ttf");
    m_scoreText.setFont(*font);
    m_scoreText.setCharacterSize(50);
    m_scoreText.setColor(sf::Color(255, 255, 255, 255));

    m_killsText.setFont(*font);
    m_killsText.setCharacterSize(65);
    m_killsText.setColor(sf::Color(255, 255, 255, 255));

    switch (m_difficulty)
    {
        case 1:
            m_Time = 6.f;
            m_minTime = 3.f;
			m_player.setLives(5);
			m_enemySpeed = 150.f;
			m_enemySpeedMin = 100.f;
			break;
        case 2:
            m_Time = 3.5f;
            m_minTime = 1.f;
            m_player.setLives(4);
			m_enemySpeed = 185.f;
			m_enemySpeedMin = 100.f;
            break;
        case 3:
            m_Time = 2.5f;
            m_minTime = 0.25f;
			m_player.setLives(3);
			m_enemySpeed = 225.f;
			m_enemySpeedMin = 100.f;
            break;
		default:
			assert(false);
			break;
    }

    m_scoreClock.restart();

	//Enemy
	addEnemy();

	return true;
}
Пример #26
0
static void summonEnemies()
{
	char summonList[MAX_VALUE_LENGTH], enemyToSummon[MAX_VALUE_LENGTH];
	char *token;
	int i, summonIndex = 0, summonCount = 0;
	Entity *e;

	for (i=0;i<2;i++)
	{
		summonCount = 0;

		summonIndex = 0;

		STRNCPY(summonList, self->requires, MAX_VALUE_LENGTH);

		token = strtok(summonList, "|");

		while (token != NULL)
		{
			token = strtok(NULL, "|");

			summonCount++;
		}

		if (summonCount == 0)
		{
			showErrorAndExit("Scanner at %f %f has no summon list", self->x, self->y);
		}

		summonIndex = prand() % summonCount;

		STRNCPY(summonList, self->requires, MAX_VALUE_LENGTH);

		summonCount = 0;

		token = strtok(summonList, "|");

		while (token != NULL)
		{
			if (summonCount == summonIndex)
			{
				break;
			}

			token = strtok(NULL, "|");

			summonCount++;
		}

		snprintf(enemyToSummon, MAX_VALUE_LENGTH, "enemy/%s", token);

		e = addEnemy(enemyToSummon, self->x, self->y);

		e->x = self->x;

		e->y = self->y;

		e->targetX = self->x + (i == 0 ? -64 : 64);

		e->targetY = self->y;

		calculatePath(e->x, e->y, e->targetX, e->targetY, &e->dirX, &e->dirY);

		e->flags |= (NO_DRAW|HELPLESS|TELEPORTING);
	}
}
Пример #27
0
void World::addEnemies() {
    if (mNetworkedWorld)
        return;

    // Add enemies to the spawn point container
    addEnemy(Aircraft::Raptor,    0.f,  500.f);
    addEnemy(Aircraft::Raptor,    0.f, 1000.f);
    addEnemy(Aircraft::Raptor, +100.f, 1150.f);
    addEnemy(Aircraft::Raptor, -100.f, 1150.f);
    addEnemy(Aircraft::Avenger,  70.f, 1500.f);
    addEnemy(Aircraft::Avenger, -70.f, 1500.f);
    addEnemy(Aircraft::Avenger, -70.f, 1710.f);
    addEnemy(Aircraft::Avenger,  70.f, 1700.f);
    addEnemy(Aircraft::Avenger,  30.f, 1850.f);
    addEnemy(Aircraft::Raptor,  300.f, 2200.f);
    addEnemy(Aircraft::Raptor, -300.f, 2200.f);
    addEnemy(Aircraft::Raptor,    0.f, 2200.f);
    addEnemy(Aircraft::Raptor,    0.f, 2500.f);
    addEnemy(Aircraft::Avenger,-300.f, 2700.f);
    addEnemy(Aircraft::Avenger,-300.f, 2700.f);
    addEnemy(Aircraft::Raptor,    0.f, 3000.f);
    addEnemy(Aircraft::Raptor,  250.f, 3250.f);
    addEnemy(Aircraft::Raptor, -250.f, 3250.f);
    addEnemy(Aircraft::Avenger,   0.f, 3500.f);
    addEnemy(Aircraft::Avenger,   0.f, 3700.f);
    addEnemy(Aircraft::Raptor,    0.f, 3800.f);
    addEnemy(Aircraft::Avenger,   0.f, 4000.f);
    addEnemy(Aircraft::Avenger,-200.f, 4200.f);
    addEnemy(Aircraft::Raptor,  200.f, 4200.f);
    addEnemy(Aircraft::Raptor,    0.f, 4400.f);

    sortEnemies();
}
Пример #28
0
void Model::startWave() {
	if (enemiesLeft == -2&&enemies.size()==0) {
		enemiesLeft = waves.at(waveNumber).size-2;
		addEnemy(waves.at(waveNumber).enemyType, waves.at(waveNumber).enemyLevel);
	}
}
Пример #29
0
void Model::update(sf::Time delta) {
	//check for GameOver
	if (this->lives < 1) {
		std::cout << "YOU LOSE" << std::endl;
		this->gameMode = -1;
	}
	//Checks for winner
	if ((this->waveNumber == this->totalWaves) && (this->enemiesLeft=-2) && lives > 0) {
		std::cout << "YOU WIN" << std::endl;
		this->gameMode = 2;
	}
	this->player.update(delta);
	sf::Transform mapState;
	mapState.translate(float(mapX), float(mapY));
	state.transform = mapState;
	for (unsigned int i = 0; i < this->enemies.size(); i++) {
		bool crossedLine = false;
		this->enemies.at(i).UpdatePos(this->mapX, this->mapY);
		if (checkPoint[int(-this->enemies.at(i).getPosition().x+mapX+640)][int(-this->enemies.at(i).getPosition().y+mapY+448)]) {
			if (this->enemies.at(i).checkPointUpdate(1)==0) {
				if (enemiesLeft > -1) {
					addEnemy(waves.at(waveNumber).enemyType, waves.at(waveNumber).enemyLevel);
					enemiesLeft -= 1;
				}
			}
			if (this->enemies.at(i).checkPointUpdate(0) == 15) {
				crossedLine = true;
			}
		}
		if (crossedLine) {
			//delete enemy here
			this->lives -= 1;
			enemies.erase(enemies.begin() + i);
		}
		else {
			if (this->enemies.at(i).isDead()) {
				this->player.inventory.gold += this->enemies.at(i).inventory.gold;
				enemies.erase(enemies.begin() + i);
			}
			else {
				this->enemies.at(i).update(delta);
			}
		}
	}
	if (enemiesLeft == -1&&enemies.size()==0) {
		enemiesLeft--;
		waveNumber++;
	}
	for (unsigned int i = 0; i < this->towers.size(); i++) {
		if (this->towers.at(i).moving == false) {
			this->towers.at(i).moveTower(int(this->dispX), int(this->dispY));
			if (this->towers.at(i).update(delta, enemies)) {
				switch (this->towers.at(i).type) {
					//Add other options later
					default:
						attackSound.play();
					break;
				}
			}
		}
	}
	for (unsigned int i = 0; i < this->shops.size(); i++) {
		this->shops.at(i).movePlayer(int(this->dispX), int(this->dispY));
	}
	for (unsigned int i = 0; i < this->powerUps.size(); i++) {
		this->powerUps.at(i).movePower(int(this->dispX), int(this->dispY));
	}
	this->dispX = 0;
	this->dispY = 0;
	monsterNeedTex();
}
Пример #30
0
static void callSummoners()
{
	int r;
	Entity *e;
	Target *t;

	self->thinkTime--;

	if (self->thinkTime <= 0)
	{
		setEntityAnimation(self, "ATTACK_1");

		self->mental--;

		playSoundToMap("sound/common/spell", BOSS_CHANNEL, self->x, self->y, 0);

		e = addEnemy("enemy/sorceror_dark_summoner", 0, 0);

		e->x = self->x + self->w / 2 - e->w / 2;
		e->y = self->y + self->h / 2 - e->h / 2;

		r = prand() % 3;

		switch (r)
		{
			case 0:
				t = getTargetByName("DARK_SUMMONER_TARGET_0");
			break;

			case 1:
				t = getTargetByName("DARK_SUMMONER_TARGET_1");
			break;

			default:
				t = getTargetByName("DARK_SUMMONER_TARGET_2");
			break;
		}

		if (t == NULL)
		{
			showErrorAndExit("Sorceror cannot find target");
		}

		e->targetX = t->x;
		e->targetY = t->y;

		e->startX = e->targetX;
		e->startY = e->targetY;

		e->maxThinkTime = self->maxThinkTime;

		calculatePath(e->x, e->y, e->targetX, e->targetY, &e->dirX, &e->dirY);

		e->flags |= (NO_DRAW|HELPLESS|TELEPORTING);

		e->head = self;

		if (self->mental <= 0)
		{
			setEntityAnimation(self, "STAND");

			self->maxThinkTime++;

			self->action = &callSummonersWait;
		}

		self->thinkTime = 30;
	}

	hover();
}