示例#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);


}
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
文件: azriel.c 项目: LibreGames/edgar
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();
}