Esempio n. 1
0
bool PlatKillas::UpdateAndRender() {
	float ticks = (float)SDL_GetTicks() / 1000.0f;
	float elapsed = ticks - lastFrameTicks;
	lastFrameTicks = ticks;

	SDL_Event event;
	while (SDL_PollEvent(&event)) {
		if (event.type == SDL_QUIT || event.type == SDL_WINDOWEVENT_CLOSE) {
			done = true;
		}
		else if (event.type == SDL_KEYDOWN) {
			if (event.key.keysym.scancode == SDL_SCANCODE_SPACE) {
				if (shootTimer > 0.1f)
					shootBullet();
			}
		}
	}
	const Uint8 *keys = SDL_GetKeyboardState(NULL);
	if (keys[SDL_SCANCODE_W]) {
		if (!player->isJumping) {
			player->jump();
		}
		
	}
	if (keys[SDL_SCANCODE_D]) {
		SheetSprite playerSprite = SheetSprite(characterSpriteSheetTexture, 12, 8, 27);
		player->sprite = playerSprite;
		player->setWalkRight();
	}
	else if (keys[SDL_SCANCODE_A]) {
		SheetSprite playerSprite = SheetSprite(characterSpriteSheetTexture, 12, 8, 15);
		player->sprite = playerSprite;
		player->setWalkLeft();
	}
	else {
		player->setIdle();
	}
	if (keys[SDL_SCANCODE_X]) {
		if (shootTimer > 0.1f) {
			shootTimer = 0.0f;
			shootBullet();
		}
	}

	float fixedElapsed = elapsed + timeLeftOver;
	if (fixedElapsed > FIXED_TIMESTEP* MAX_TIMESTEPS) {
		fixedElapsed = FIXED_TIMESTEP* MAX_TIMESTEPS;
	}
	while (fixedElapsed >= FIXED_TIMESTEP) {
		fixedElapsed -= FIXED_TIMESTEP;
		FixedUpdate();
	}
	timeLeftOver = fixedElapsed;

	Update(elapsed);
	Render();
	return done;
}
Esempio n. 2
0
bool Asteroids::UpdateAndRender() {
	float ticks = (float)SDL_GetTicks() / 1000.0f;
	float elapsed = ticks - lastFrameTicks;
	lastFrameTicks = ticks;

	SDL_Event event;
	while (SDL_PollEvent(&event)) {
		if (event.type == SDL_QUIT || event.type == SDL_WINDOWEVENT_CLOSE) {
			done = true;
		}
		else if (event.type == SDL_KEYDOWN) {
			if (event.key.keysym.scancode == SDL_SCANCODE_SPACE) {
				if (shootTimer > 0.1f)
					shootBullet();
			}
		}
	}
	const Uint8 *keys = SDL_GetKeyboardState(NULL);
	if (keys[SDL_SCANCODE_W]) {
		player->velocity_x = 1.0f;
		player->velocity_y = 1.0f;
	}
	else if (keys[SDL_SCANCODE_S]) {
		player->velocity_x = 0.0f;
		player->velocity_y = 0.0f;
	}
	if (keys[SDL_SCANCODE_D]) {
		player->rotation -= 5.0f * elapsed;
	}
	else if (keys[SDL_SCANCODE_A]) {
		player->rotation += 5.0f * elapsed;
	}
	if (keys[SDL_SCANCODE_X]) {
		if (shootTimer > 0.1f) {
			shootTimer = 0.0f;
			shootBullet();
		}
	}

	float fixedElapsed = elapsed + timeLeftOver;
	if (fixedElapsed > FIXED_TIMESTEP* MAX_TIMESTEPS) {
		fixedElapsed = FIXED_TIMESTEP* MAX_TIMESTEPS;
	}
	while (fixedElapsed >= FIXED_TIMESTEP) {
		fixedElapsed -= FIXED_TIMESTEP;
		FixedUpdate(fixedElapsed);
	}
	timeLeftOver = fixedElapsed;

	Update(elapsed);
	Render();
	return done;
}
Esempio n. 3
0
void Warship::fire() {
    if(limit>shootElapsed)
    {
        shootBullet();
        limit=0.f;
    }
}
Esempio n. 4
0
void processEvents(){
	//SDL event loop
	while (SDL_PollEvent(&event)) {
		if (event.type == SDL_QUIT || event.type == SDL_WINDOWEVENT_CLOSE) {
			done = true;
		}
		else if (event.type == SDL_KEYDOWN && currentState == STATE_GAME){
			if (event.key.keysym.scancode == SDL_SCANCODE_SPACE)
			{
				shootBullet(Player);
				
			}
		}
	}
}
Esempio n. 5
0
void Weapon::sequenceFire(Entity& shooter){

	if (sequenceDelayTime == 0){

		if (sequence_idx < bullet_list.size()){
			shootBullet(shooter, *bullet_list[sequence_idx]);
			sequenceDelayTime = sequenceDelaySet;
			sequence_idx++;
		}
		else {
			shootCooldownTime = shootCooldownSet;
			sequence_idx = 0;
		}
	}
	else {
		sequenceDelayTime--;
	}

}
Esempio n. 6
0
void Weapon::sequenceMultiFire(Entity& shooter){

	// Will polish up area later

	if (sequenceDelayTime == 0){

		if (sequence_idx < bullet_list.size()){
			for (int i = 0; i < bullets_fired; ++i){
				int shoot_idx = (sequence_idx + i) % bullet_list.size();
				shootBullet(shooter, *bullet_list[shoot_idx]);
			}
			sequenceDelayTime = sequenceDelaySet;
			sequence_idx += bullets_fired;
		}
		else {
			shootCooldownTime = shootCooldownSet;
			sequence_idx = 0;
		}
	}
	else {
		sequenceDelayTime--;
	}
}
Esempio n. 7
0
void BulletCache::shootBulletFrom(cocos2d::Vec2 startPosition, cocos2d::Vec2 velocity, std::string frameName, bool isPlayerBullet, Entity * owner){
    auto bullets = batch->getChildren();
    auto node = bullets.at(nextInactiveBullet);
    CCASSERT(dynamic_cast<Bullet *>(node), "not a Bullet!");
    auto bullet = dynamic_cast<Bullet *>(node);
    if (velocity.y > 0) {
        bullet->setRotation(0);
    }
    if (velocity.y < 0) {
        bullet->setRotation(180);
    }
    if (velocity.x > 0) {
        bullet->setRotation(90);
    }
    if (velocity.x < 0) {
        bullet->setRotation(270);
    }
    bullet->shootBullet(startPosition, velocity, frameName, isPlayerBullet, owner);
    
    nextInactiveBullet++;
    if (nextInactiveBullet >= bullets.size()) {
        nextInactiveBullet = 0;
    }
}
Esempio n. 8
0
//-----------------------------------------------------------------------------------------
//          randomize automated movements
//-----------------------------------------------------------------------------------------
void Robot::aiSetDestination(){
	//randomize shooting
	int randomNum = rand() % 15;
	if(randomNum == 7 || randomNum == 9){
		shootBullet();
	}
	//randomize destination
	if((checkXDestination() && checkZDestination())){
		int randomNum2 = rand() % 10;
		switch(randomNum2){
		case 0: case 1: case 2: case 3: case 4:
			if(checkXPos(false)){
				setDestination(xPos-ROBOT_LOOK_SIZE-1, zPos);
			}
			break;
		case 5: case 6:
			if(checkZPos(false)){
				setDestination(xPos, zPos-ROBOT_LOOK_SIZE);
			}
			break;
		case 8:
			if(checkZPos(true)){
				setDestination(xPos, zPos+ROBOT_LOOK_SIZE);
			}
			break;
		case 9:
			if(checkXPos(true)){
				setDestination(xPos+ROBOT_LOOK_SIZE, zPos);
			}
			break;
		default:
			break;
		}
		
	}
}
Esempio n. 9
0
void update(float elapsed){
	if (currentState == STATE_TITLE_SCREEN)
	{
		if (keys[SDL_SCANCODE_RETURN])
			currentState = STATE_GAME;
	}
	else if (currentState == STATE_GAME)
	{
		//Player movements
		if (keys[SDL_SCANCODE_LEFT]){
			Player->direction_x = -1.0f;
			Player->x += Player->direction_x * elapsed * Player->speed;
		}
		else if (keys[SDL_SCANCODE_RIGHT]){
			Player->direction_x = 1.0f;
			Player->x += Player->direction_x * elapsed * Player->speed;
		}
		if (Player->x < -1.77f + Player->width*0.5f)
			Player->x = -1.77f + Player->width*0.5f;
		else if (Player->x >1.77f - Player->width *0.5f)
			Player->x = 1.77f - Player->width*0.5f;
		//Bullets
		for (int i = 0; i < MAX_BULLETS; i++)
		{
			bullets[i].update(elapsed);
			enemyBullets[i].update(elapsed);
		}
		for (int i = 0; i < MAX_BULLETS; i++)
		{
			enemyBullets[i].colliding(Player);
		}

		float aliensMaxPosition = 0.0f;
		float aliensMinPosition = 0.0f;
		int random = std::rand() % 55;

		while (random < 44 && aliens[random + 11]->isAlive){
			random += 11;
		}
		shootBullet(aliens[random]);

		bool outOfScreen = false;
		bool belowPlayer = false;
		for (int i = 0; i < 55; i++){
			if (aliens[i]->isAlive){
				for (int k = 0; k < MAX_BULLETS; k++)
				{
					bullets[k].colliding(aliens[i]);
				}
				if (aliens[i]->isAlive && (aliens[i]->x <-1.77f + aliens[i]->width*0.5f ))
				{
					aliens[i]->x = -1.77f + aliens[i]->width*0.5f;
					outOfScreen = true;
				}
				if (aliens[i]->isAlive && aliens[i]->x > 1.77f - aliens[i]->width *0.5f)
				{
					aliens[i]->x = 1.77f - aliens[i]->width*0.5f;
					outOfScreen = true;
				}
				if (aliens[i]->isAlive && (aliens[i]->y - aliens[i]->height*0.5f < Player->y))
				{
					gameOver = true;
					currentState = STATE_TITLE_SCREEN;
				}
			
			}
		}
		for (int i = 0; i < 55; i++){
			if (aliens[i]->isAlive){
				if (outOfScreen){
					aliens[i]->direction_x *= -1.0f;
					aliens[i]->y += -0.10f;
				}
				aliens[i]->update(elapsed);

			}
		}
	}
}
Esempio n. 10
0
void PlayerInput(bool& done, ShaderProgram program){
    SDL_Event event;
    
    while (SDL_PollEvent(&event)) {
        if (event.type == SDL_QUIT || event.type == SDL_WINDOWEVENT_CLOSE) {
            done = true;
        }
        
        else if (event.type == SDL_KEYDOWN){
            if (state == STATE_MAIN_MENU) {
                if (event.key.keysym.scancode == SDL_SCANCODE_SPACE){
                    state = STATE_GAME_LEVEL;
                    startGame();
                }
                else if (event.key.keysym.scancode == SDL_SCANCODE_ESCAPE){
                    done = true;
                }
            }
            else{
                if (event.key.keysym.scancode == SDL_SCANCODE_LEFT){
                    if (PLAYER_ENT.godmode) {
                        PLAYER_ENT.acceleration_x += -2.2;
                    }
                    else{
                        if (false && PLAYER_ENT.leftContact) {
                            puts("not lefting");//do nothing
                        }
                        else{
                            PLAYER_ENT.acceleration_x = -2.2;
                            if (PLAYER_ENT.rightContact) {
                                PLAYER_ENT.rightContact = false;
                            }
                        }
                        
                    }
                }
                
                else if (event.key.keysym.scancode == SDL_SCANCODE_RIGHT){
                    if (PLAYER_ENT.godmode) {
                        PLAYER_ENT.acceleration_x += 2.2;
                    }
                    else{
                        if (false && PLAYER_ENT.rightContact) {
                            puts("not righting");//do nothing
                        }
                        else{
                            PLAYER_ENT.acceleration_x = 2.2;
                            if (PLAYER_ENT.leftContact) {
                                PLAYER_ENT.leftContact = false;
                            }
                        }
                        
                    }
                }
                else if (event.key.keysym.scancode == SDL_SCANCODE_W){
                    shootBullet(0);
                }
                else if (event.key.keysym.scancode == SDL_SCANCODE_D){
                    shootBullet(1);
                }
                else if (event.key.keysym.scancode == SDL_SCANCODE_A){
                    shootBullet(2);
                }
                else if (event.key.keysym.scancode == SDL_SCANCODE_S){
                    shootBullet(3);
                }
                else if (event.key.keysym.scancode == SDL_SCANCODE_J){//jetpack TODO: remove later
                    if (state != STATE_MAIN_MENU) {
                        PLAYER_ENT.velocity_y += 3.0f;
                    }
                }
                else if (event.key.keysym.scancode == SDL_SCANCODE_I){//toggle immunity to gravity TODO: remove later
                    if (state != STATE_MAIN_MENU) {
                        PLAYER_ENT.gravity = !PLAYER_ENT.gravity;
                    }
                }
                else if (event.key.keysym.scancode == SDL_SCANCODE_G){
                    PLAYER_ENT.godmode = !PLAYER_ENT.godmode;
                    
                }
                
                else if (event.key.keysym.scancode == SDL_SCANCODE_Z){
                    zoom += 0.5;
                    projectionMatrix.setOrthoProjection(zoom*-1.7777f, zoom*1.77777f, zoom*-1.0f, zoom*1.0f, zoom*-1.0f, zoom*1.0f);
                    program.setModelMatrix(modelMatrix);
                    program.setProjectionMatrix(projectionMatrix);
                    program.setViewMatrix(viewMatrix);
                    glUseProgram(program.programID);
                }
                else if (event.key.keysym.scancode == SDL_SCANCODE_X){
                    zoom -= 0.5;
                    projectionMatrix.setOrthoProjection(zoom*-1.7777f, zoom*1.77777f, zoom*-1.0f, zoom*1.0f, zoom*-1.0f, zoom*1.0f);
                    program.setModelMatrix(modelMatrix);
                    program.setProjectionMatrix(projectionMatrix);
                    program.setViewMatrix(viewMatrix);
                    glUseProgram(program.programID);
                }
                else if (event.key.keysym.scancode == SDL_SCANCODE_P){
                    peaceful = !peaceful;
                }
                
                
                else if (event.key.keysym.scancode == SDL_SCANCODE_UP){
                        if (PLAYER_ENT.godmode) {
                            PLAYER_ENT.acceleration_y += 2.2;
                        }
                        else{
                            if (PLAYER_ENT.bottomContact) {
                                PLAYER_ENT.velocity_y += 3.0f;
                                PLAYER_ENT.bottomContact = false;
                            }
                            else if (PLAYER_ENT.leftContact) {
                                PLAYER_ENT.velocity_y += 3.0f;
                                PLAYER_ENT.velocity_x += 1.7f;
                                PLAYER_ENT.leftContact = false;
                                PLAYER_ENT.rightContact = false;
                            }
                            else if (PLAYER_ENT.rightContact) {
                                PLAYER_ENT.velocity_y += 3.0f;
                                PLAYER_ENT.velocity_x -= 1.7f;
                                PLAYER_ENT.rightContact = false;
                                PLAYER_ENT.leftContact = false;
                            }
                        }
                }
                else if (event.key.keysym.scancode == SDL_SCANCODE_DOWN){
                    if (PLAYER_ENT.godmode) {
                        PLAYER_ENT.acceleration_y += -2.2;
                    }
                }
                else if (event.key.keysym.scancode == SDL_SCANCODE_ESCAPE){
                    done = true;
                }
            }

            }
        else if (event.type == SDL_KEYUP){
            if (event.key.keysym.scancode == SDL_SCANCODE_LEFT){
                PLAYER_ENT.acceleration_x = 0;
            }
            
            else if (event.key.keysym.scancode == SDL_SCANCODE_RIGHT){
                PLAYER_ENT.acceleration_x = 0;
            }
            
        }

    }
}
Esempio n. 11
0
Robot::Robot(GLfloat x, GLfloat y) {
	rubble = (Model*)(new LightRubbleModel());
	flag = (Model*)(new FlagModel());
    nuclearM = (Model*)(new NuclearModel()); 
    electronicsM = (Model*)(new ElectronicsModel()); 
    phaserM = (Model*)(new PhaserModel);
    cannonM = (Model*)(new CannonModel); 
    missileM = (Model*)(new MissileLauncherModel); 
    bipodM = (Model*)(new BipodModel); 
    tracksM = (Model*)(new TracksModel); 
    antiGravM = (Model*)(new AntiGravModel); 
	headlight = (Model*)(new HeadlightModel);
    model = bipodM;
	roboCam = NULL;
        groundplane[0] = 0.0f;
        groundplane[1] = 1.0f;
        groundplane[2] = 0.0f;
        groundplane[3] = 0.0f;
	robotIdCount++;
	robotId = robotIdCount;	

	xPos = x;
	zPos = y;
	xDestination = x;
	zDestination = y;
	spinDegrees = SOUTH;
	spinDestination = SOUTH;
	pitchAngle = 90.0f;
	yawAngle = 90.0f;
	isMyLightOn = false;
	hasBox = false;
	robotLife = MAX_LIFE;

	directionVector[0] = -1.0f;
	directionVector[1] = 0.0f;
	directionVector[2] = 0.0f;

	//BiPod is on
	isPartOn[0] = true;
	selectedIndex = 0;

	for(int i = 1; i < 8; i++){
		isPartOn[i]=false;
	}

	turnIndexOn(1);
	turnIndexOn(3);
	//turnIndexOn(4);
	//turnIndexOn(5);
	//turnIndexOn(6);
	//turnIndexOn(7);

	//incrementSpinDegrees(true,180.0f);
	refreshRobot();

	ct = new CollisionTester;
	box = new BoundingBox(xPos,0.0f,zPos,xPos+1.0f,height,zPos+1.0f, true, this);
	hasBox = true;
	ct->staticBoxes.push_back(box);

	isRobotBeingControlled = false;
	shootBullet();
	currentTime = clock();
	lastExplosion = clock();

	explosionSize = 0.5f;
	stop = false;
	
	isAlive = true;
	aiShootCount = 0;
	computerControlled = false;
}
Esempio n. 12
0
void ColoredCubeApp::updateScene(float dt)
{
    for (int i = 0; i < MAX_NUM_STARS; i++)
    {
        stars[i].update(dt);
    }

    switch (gsm->getGameState()) {
    case GameStateManager::START_GAME: {
        D3DApp::updateScene(dt);
        gameObject1.update(dt);
        D3DXMATRIX w;

        D3DXMatrixTranslation(&w, 2, 2, 0);
        mfxWVPVar->SetMatrix(w);

        score = 0;

        // Build the view matrix.
        /*D3DXVECTOR3 pos(10.0f, 2.0f, 0.0f);
        D3DXVECTOR3 target(0.0f, 0.0f, 0.0f);
        D3DXVECTOR3 up(0.0f, 1.0f, 0.0f);
        D3DXMatrixLookAtLH(&mView, &pos, &target, &up);*/

        if(GetAsyncKeyState(VK_SPACE) & 0x8000 && gsm->getGameState() != GameStateManager::IN_GAME) {
            gsm->setGameState(GameStateManager::IN_GAME);
            audio->playCue(SELECT);
        }

        Vector3 oldEnemyPositions[MAX_NUM_ENEMIES];
        for (int i = 0; i < MAX_NUM_ENEMIES; i++)
        {
            oldEnemyPositions[i] = enemyObjects[i].getPosition();
        }

        Vector3 oldBulletPositions[MAX_NUM_BULLETS];
        for (int i = 0; i < MAX_NUM_BULLETS; i++)
        {
            oldBulletPositions[i] = playerBullets[i].getPosition();
        }

        //Camera Object
        camera.update(dt);
        break;
    }

    case GameStateManager::IN_GAME:
    {
        //Generate a block every three seconds
        if (enemyBuffer.elapsedTime() > 2) {
            enemyBuffer.resetClock();

            generateEnemy(enemyObjects, dt);
        }

        if (gameTimer.elapsedTime() >= 1) {
            gameTimer.resetClock();
            secondsRemaining--;
        }


        for (int i = 0; i < MAX_NUM_BULLETS; i++)
        {
            playerBullets[i].update(dt);
        }


        for (int i = 0; i < MAX_NUM_EXP_PARTICLES; i++)
        {
            particles[i].update(dt);
        }

        if (camera.isCameraRecoiling()) {
            camera.cameraRecoil(dt);
        }


        if(explosionRunning) explosionTimer += dt;
        if (explosionTimer > .55) {
            explosionTimer = 0;
            explosionRunning = false;
            for (int i = 0; i < MAX_NUM_EXP_PARTICLES; i++)
            {
                particles[i].setInActive();
            }
        }

        if(GetAsyncKeyState(VK_RETURN) & 0x8000) {
            if(shotRelease) {

                shootBullet(playerBullets, dt, gameObject1);

                //shotRelease = false;
            }
        }


        //if(!(GetAsyncKeyState(VK_RETURN) & 0x8000)) shotRelease = true;

        Vector3 oldEnemyPositions[MAX_NUM_ENEMIES];
        for (int i = 0; i < MAX_NUM_ENEMIES; i++)
        {
            oldEnemyPositions[i] = enemyObjects[i].getPosition();
        }

        Vector3 direction(0, 0, 0);
        Vector3 oldposition = gameObject1.getPosition();

        D3DApp::updateScene(dt);
        gameObject1.update(dt);
        for (int i = 0; i < MAX_NUM_ENEMIES; i++) {
            enemyObjects[i].update(dt);
        }

        if((GetAsyncKeyState('A') & 0x8000) && !(GetAsyncKeyState('D') & 0x8000))  direction.z = -1.0f;
        if((GetAsyncKeyState('D') & 0x8000) && !(GetAsyncKeyState('A') & 0x8000))  direction.z = +1.0f;

        D3DXVec3Normalize(&direction, &direction);

        for (int i = 0; i < MAX_NUM_ENEMIES; i++)
        {
            //if they collide and are active
            if(gameObject1.collided(&enemyObjects[i]) && enemyObjects[i].getActiveState())
            {
                audio->playCue(FAIL);
                enemyObjects[i].setInActive();
                //score++;
                camera.cameraShake(dt);
                score = 0;
                gsm->setGameState(GameStateManager::END_GAME);
            }


            if (enemyObjects[i].getPosition().x > 7) {
                enemyObjects[i].setInActive();
            }
        }

        for (int i = 0; i < MAX_NUM_BULLETS; i++)
        {
            for (int j = 0; j < MAX_NUM_ENEMIES; j++)
            {
                if(playerBullets[i].collided(&enemyObjects[j]) && enemyObjects[j].getActiveState())
                {
                    audio->playCue(BOOM);
                    explosionTimer = 0;
                    runExplosion(playerBullets[i].getPosition());
                    enemyObjects[j].setInActive();
                    playerBullets[i].setInActive();
                    score++;
                }
            }
        }


        gameObject1.setVelocity( direction * gameObject1.getSpeed());

        if (gameObject1.getPosition().z < -PLAYER_Z_RANGE) {
            gameObject1.setPosition(Vector3(oldposition.x, oldposition.y, -PLAYER_Z_RANGE));
            camera.setCameraMoveLeft(false);
            camera.setCameraMoveRight(true);
        }
        else if (gameObject1.getPosition().z > PLAYER_Z_RANGE) {
            gameObject1.setPosition(Vector3(oldposition.x, oldposition.y, PLAYER_Z_RANGE));
            camera.setCameraMoveRight(false);
            camera.setCameraMoveLeft(true);
        }
        else {
            camera.setCameraMoveRight(true);
            camera.setCameraMoveLeft(true);
        }

        //Destroys bullet if too far away
        for (int i = 0; i < MAX_NUM_BULLETS; i++)
        {
            if(playerBullets[i].getPosition().x < -10 && playerBullets[i].getActiveState())
                playerBullets[i].setInActive();
        }

        D3DXMATRIX w;

        D3DXMatrixTranslation(&w, 2, 2, 0);
        mfxWVPVar->SetMatrix(w);

        //Camera Object
        camera.update(dt);

        //Get Camera viewMatrix
        mView = camera.getViewMatrix();
        mProj = camera.getProjectionMatrix();
    }

    if (secondsRemaining <= 0)
    {
        gsm->setGameState(GameStateManager::END_GAME);
    }

    case GameStateManager::END_GAME:
    {
        //D3DApp::updateScene(dt);
        //gameObject1.update(dt);

        if (camera.isCameraShaking()) {
            camera.cameraShake(dt);
        }

        D3DXMATRIX w;

        D3DXMatrixTranslation(&w, 2, 2, 0);
        mfxWVPVar->SetMatrix(w);

        //// Build the view matrix.
        //D3DXVECTOR3 pos(10.0f, 2.0f, 0.0f);
        //D3DXVECTOR3 target(0.0f, 0.0f, 0.0f);
        //D3DXVECTOR3 up(0.0f, 1.0f, 0.0f);
        //D3DXMatrixLookAtLH(&mView, &pos, &target, &up);

        if(GetAsyncKeyState(VK_SPACE) & 0x8000 && gsm->getGameState() != GameStateManager::IN_GAME) {
            restartGame();
            gsm->setGameState(GameStateManager::IN_GAME);
            audio->playCue(SELECT);
        }

        //Camera Object
        camera.update(dt);

        break;
    }


    default: {
        throw(GameError(gameErrorNS::FATAL_ERROR, "Game State Error"));
        break;
    }
    }
}
Esempio n. 13
0
void run(){
	Display gDisplay;
	Assets gAssets;
	ControlState gControlState;

	SDL_Event e;
	bool quit = false;

	srand(time(NULL));

	if (!initDisplay(&gDisplay)) {
		fprintf(stderr, "ERROR: failed to initialize\n");
		exit(1);
	}

	if (!loadAssets(&gAssets, &gDisplay)) {
		fprintf(stderr, "ERROR: failed to load game assets\n");
		exit(1);
	}

	Player p = P_createPlayer();
	AI *ai = AI_createAI();

	LinkedList playerBulletList = LL_createLinkedList();
	LinkedList enemyBulletList = LL_createLinkedList();
	LinkedList enemyList = LL_createLinkedList();

	Timer fpsCapTimer = T_createTimer();
	Timer gameTimer = T_createTimer();

	unsigned int lastShooting = 0;
	unsigned int lastEnemenySpawn = 0;
	unsigned int check = 0;
	T_start(&gameTimer);
	
	int controlarray[4] = {0};
	SDL_Rect healthbar;
	initialisehealthbar(&healthbar);
	quit = staticscreen(gDisplay.renderer, "Assets/startmenu.bmp");
	
	SDL_Surface* temp;
	SDL_Texture* background;
	temp = SDL_LoadBMP("Assets/background.bmp");
	background = SDL_CreateTextureFromSurface(gDisplay.renderer, temp);
	SDL_FreeSurface(temp);
	temp = NULL;

	/*Event loop*/
	do{
		// start frame timer
		T_start(&fpsCapTimer);
		
		// check for exit event
		SDL_PollEvent(&e);
		quit = (e.type == SDL_QUIT);
		
		// check to open ai interface
		if(e.type == SDL_KEYDOWN){
			if(e.key.keysym.sym == SDLK_ESCAPE){
				quit = openaiscreen(gDisplay.renderer, controlarray);
				e.key.keysym.sym = SDLK_0;
				SDL_PushEvent(&e);
			}
		}

		// move player
		getKeyState(&gControlState);
		getMouseState(&gControlState);

		movePlayer(&p, &gControlState, &gAssets);
		AI_move(ai, P_getPosition(&p));

		if ((check = T_getTicks(&gameTimer)) - lastEnemenySpawn > DEFAULT_SPAWN_INTERVAL) {
			spawnEnemy(&enemyList);
			lastEnemenySpawn = check;
		}
		
		aiaction(ai, &playerBulletList, &enemyList, T_getTicks(&gameTimer), controlarray, &p);

		moveEnemies(&enemyList, P_getPosition(&p));
		enemiesShoot(&enemyList, &enemyBulletList, &p, T_getTicks(&gameTimer));


		if (leftMouseIsDown() && ((check = T_getTicks(&gameTimer)) - lastShooting) > SHOOT_DELAY) {
			double mx = (double)gControlState.mouseX / SCREEN_WIDTH;
    		double my = (double)gControlState.mouseY / SCREEN_HEIGHT;
    		Point origin = P_getPosition(&p);
    		Point destination = {mx, my};
			shootBullet(&playerBulletList, origin, getShotDirection(origin, destination), PLAYER);
			lastShooting = check;
		}

		moveBullets(&playerBulletList);
		moveBullets(&enemyBulletList);

		detectCollision(&playerBulletList, &enemyList, &gAssets);
		detectCollisionPlayer(&enemyBulletList, &p, &gAssets);
		
		/* Update Screen */
		SDL_RenderCopy(gDisplay.renderer, background, NULL, NULL);
		displayhealth(gDisplay.renderer, healthbar, p.health);
		renderBullets(&playerBulletList, &gDisplay, &gAssets, PLAYER);
		renderBullets(&enemyBulletList, &gDisplay, &gAssets, ENEMY);
		renderEnemies(&enemyList, &gDisplay, &gAssets);
		renderPlayer(&gDisplay, &gAssets, &gControlState);
		renderAI(ai, &gDisplay, &gAssets);
		
		// draw screen
		SDL_RenderPresent(gDisplay.renderer);
        delayNextFrame(T_getTicks(&fpsCapTimer));

        if (gameOver(&p)) {
        	printf("GAME OVER\n");
        	quit = staticscreen(gDisplay.renderer, "Assets/gameover.bmp");
			p.health = 100;
        }

	} while (!quit);
	
	/* Memory Cleanup */
	LL_destroyLinkedList(&playerBulletList);
	LL_destroyLinkedList(&enemyBulletList);
	AI_destroyAI(ai);
	SDL_DestroyTexture(background);
	freeAssets(&gAssets);
	closeDisplay(&gDisplay);
}