示例#1
0
Asteroids::Asteroids() {
	Init();
	srand(time(NULL));
	done = false;
	lastFrameTicks = 0.0f;
	timeLeftOver = 0.0f;

	gravity_x = 0.0f;
	gravity_y = 0.0f;

	bulletIndex = 0;
	shootTimer = 0.1f;

	spriteSheetTexture = LoadTexture("sheet.png");
	bulletSprite = SheetSprite(spriteSheetTexture, 425.0f / 1024.0f, 468.0f / 1024.0f, 93.0f / 1024.0f, 84.0f / 1024.0f);

	SheetSprite playerSprite = SheetSprite(spriteSheetTexture, 425.0f / 1024.0f, 468.0f / 1024.0f, 93.0f / 1024.0f, 84.0f / 1024.0f);
	player = new Player();
	player->sprite = playerSprite;
	player->scale_x = 1.0f;
	player->scale_y = 1.0f;
	player->x = 0.0f;
	player->y = 0.0f;
	player->friction_x = 3.0f;
	player->friction_y = 3.0f;
	entities.push_back(player);

	SheetSprite asteroidSprite = SheetSprite(spriteSheetTexture, 224.0f / 1024.0f, 664.0f / 1024.0f, 101.0f / 1024.0f, 84.0f / 1024.0f);
	for (int i = 0; i < 20; i++) {
		Entity* asteroid = new Entity();
		asteroid->sprite = asteroidSprite;
		float scale = genRandomNumber(0.7f, 1.5f);
		asteroid->scale_x = scale;
		asteroid->scale_y = scale;
		asteroid->x = genRandomNumber(-1.33f, 1.33f);
		asteroid->y = genRandomNumber(-1.0f, 1.0f);
		asteroid->rotation = genRandomNumber(-90.0f, 90.0f);
		asteroid->velocity_x = genRandomNumber(-0.15f, 0.15f);
		asteroid->velocity_y = genRandomNumber(-0.15f, 0.15f);
		entities.push_back(asteroid);
	}

	ParticleEmitter demoParticles(300);
	demoParticles.maxLifetime = 1.0f;
	demoParticles.position = Vector(0.0f, 0.5f, 0.0f);
	demoParticles.velocity = Vector(0.8f, 0.5f, 0.0f);
	demoParticles.velocityDeviation = Vector(0.5f, 1.5f, 0.0f);
	particleEmitters.push_back(demoParticles);
	


	gunshot = Mix_LoadWAV("gunshot.wav");
	music = Mix_LoadMUS("music.wav");
	if (Mix_PlayMusic(music, -1) < 0) {
		cout << "Error";
	}

}
示例#2
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;
}
示例#3
0
void ClassDemoApp::RenderGameLevel() {
    state = STATE_GAME_LEVEL;
    Mix_HaltMusic();

    player = new Entity();
    player->position_x = 1.0f;
    player->position_y = -9.0f;
    player->sprite = SheetSprite(playerTexture, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f);
    player->hitboxHeight = player->height * 1.0f;
    player->hitboxWidth = player->width * 1.0f;
    player->friction_x = 2.0f;
    player->friction_y = 2.0f;
    player->isStatic = false;
    entities.push_back(player);

    enemies.clear();

    for (int i = 0; i < 50; i++) {
        Entity enemy;
        enemy.position_x = 15 + i * 5;
        enemy.position_y = -(2 + rand() % (9 - 2));
        enemy.sprite = SheetSprite(spritesTexture, 420.0f/1024.0f, 66.0f/512.0f, 40.0f/1024.0f, 66.0f/512.0f, 1.0f);
        enemy.hitboxHeight = enemy.height * 0.5f;
        enemy.hitboxWidth = enemy.width * 0.5f;
//        int randint = 1 + rand() % (2-1);
//        if (randint == 1) {
//            enemy.velocity_y = 1.0f;
//        }
//        else {
//            enemy.velocity_y = -1.0f;
//        }
        int randint2 = 1 + rand() % (2-1);
        if (randint2 == 1) {
            enemy.velocity_x = 0.5f;
        }
        else {
            enemy.velocity_x = -0.5f;
        }
        enemies.push_back(enemy);
    }

    keyv.clear();

    for (int i = 0; i < 90; i++) {
        Entity key;
        key.position_x = 7 + i * 2;
        key.position_y = -(2 + rand() % (9 - 2));
        key.sprite = SheetSprite(keysTexture, 1.0f, 1.0f, 1.0f, 1.0f, 0.7f);
        key.hitboxHeight = key.height * 1.0f;
        key.hitboxWidth = key.width * 1.0f;
        keyv.push_back(key);
    }
}
示例#4
0
Slug::Slug(float size, float x_position, float y_position, int texture, ShaderProgram* program){
	this->program = program;
	x = x_position;
	y = y_position;
	this->size = size;
	
	// Animation stuff
	animation_time = .5f;
	float sheet_width = 353;
	float sheet_length = 153;
	Sheetposition slimeDead = Sheetposition(0, 112, 59, 12, this->size/2, sheet_width, sheet_length);
	Sheetposition slimeWalk1 = Sheetposition(52, 125, 50, 28, this->size, sheet_width, sheet_length);
	Sheetposition slimeWalk2 = Sheetposition(0, 125, 51, 26, this->size, sheet_width, sheet_length);
	spritesheet = SheetSprite(texture, slimeWalk1);
	frames = new Sheetposition[3];
	Sheetposition holder[]= { slimeWalk1, slimeWalk2, slimeDead};
	for (int i = 0; i < 3; i++){
		frames[i] = holder[i];
	}
	death_frame = 2;
	walk_begin = 0;
	walk_end = 1;
	sprite = slimeWalk1;
	
	
	
	acceleration_rate = 1.0;
	y_gravity = 1.0;
	bottom_flag = top_flag = right_flag = left_flag = false;
}
示例#5
0
GameApp::GameApp() 
{
	Init();
	keys = SDL_GetKeyboardState(NULL);
	done = false;
	lastFrameTicks = 0.0f;
	timeLeftOver = 0.0f;
	state = STATE_GAME;
	dead = false;

	fontText = loadTexture("pixel_font.png");
	spriteSheet = loadTexture("sprites.png");
	music = Mix_LoadMUS("music.ogg");
	Mix_PlayMusic(music, -1);
	jumpSound = Mix_LoadWAV("jump.wav");
	starSound = Mix_LoadWAV("star.wav");

	gravityX = 0.0f;
	gravityY = -1.0f;
	starsCollected = 0;

	BuildLevel();

	//Build player
	player.sprite = SheetSprite(spriteSheet, 159, SPRITE_COUNT_X, SPRITE_COUNT_Y);
	player.isStatic = false;
	player.enableGravity = true;
	entities.push_back(&player);
}
示例#6
0
void initPlayer(){
    Entity player = *new Entity(0,-0.5,0.13,0.15);
    player.sprite = SheetSprite(spriteSheetTexture, 792.0f/914.0f, 828.0f/936.0f, 48.0f/914.0f, 106.0f/936.0f, 0.2);
    player.type = PLAYER;
    player.isAlive = true;
    entities.push_back(player);
}
示例#7
0
PlatKillas::PlatKillas() {
	Init();
	

	done = false;
	lastFrameTicks = 0.0f;
	timeLeftOver = 0.0f;

	gravity_x = 0.0f;
	gravity_y = -9.8f;

	bulletIndex = 0;
	shootTimer = 0.1f;

	buildLevel();

	characterSpriteSheetTexture = LoadTexture("characters_1.png");

	SheetSprite playerSprite = SheetSprite(characterSpriteSheetTexture, 12, 8, 15);
	player = new Player();
	player->sprite = playerSprite;
	player->y = -0.5f;
	player->width = 0.2f;
	player->height = 0.2f;
	player->friction_x = 3.0f;
	entities.push_back(player);
	
}
示例#8
0
void PlatKillas::Update(float elapsed) {
	if (enemySpawnTimer > 1.0f && enemyIndex < 8) {
		SheetSprite enemySprite = SheetSprite(characterSpriteSheetTexture, 12, 8, 2);
		enemies[enemyIndex].sprite = enemySprite;
		enemies[enemyIndex].y = 0.85f;
		enemies[enemyIndex].x = 0.65f;
		enemies[enemyIndex].width = 0.2f;
		enemies[enemyIndex].height = 0.2f;
		enemies[enemyIndex].acceleration_x = -2.0f;
		entities.push_back(&enemies[enemyIndex]);
		enemyIndex++;
		enemySpawnTimer = 0.0f;
	}

	for (size_t i = 0; i < entities.size(); i++) {
		entities[i]->Update(elapsed);
	}

	for (size_t i = 0; i < MAX_BULLETS; i++) {
		bullets[i].Update(elapsed);
	}

	shootTimer += elapsed;
	enemySpawnTimer += elapsed;
}
示例#9
0
//TODO: sometimes these are swallowed somehow
void shootBullet(int direction) {//N.E.W.S.
    GLuint sSTex = LoadTexture(RESOURCE_FOLDER"tiles_spritesheet2.png");
    Entity newBullet = *new Entity(PLAYER_ENT.xmid()-0.015,PLAYER_ENT.ymid()-0.015,0.03,0.03);
    newBullet.sprite = SheetSprite(sSTex, 0.0f/1024.0f, 576.0f/1024.0f, 70.0f/1024.0f, 70.0f/1024.0f, 0.2);
    newBullet.type = BULLET;
    switch (direction){
        case 0:
            newBullet.velocity_y = 2.0f;
            //puts("up");
            break;
        case 1:
            newBullet.x += 0.02f;
            newBullet.velocity_x = 2.0f;
            //puts("right");
            break;
        case 2:
            newBullet.x -= 0.02f;
            newBullet.velocity_x = -2.0f;
            //puts("left");
            break;
        case 3:
            newBullet.y -= 0.02f;
            newBullet.velocity_y = -2.0f;
            //puts("down");
            break;
    }
    bullets.push_back(newBullet);
    Mix_PlayChannel( -1, pewpew, 0);
}
示例#10
0
SheetSprite App::decodeFromIndex(int index, int spriteCountX, int spriteCountY, GLuint texture){
	float u = (index % spriteCountX) / spriteCountX;
	float v = (index / spriteCountX) / spriteCountY;
	float spriteWidth = 1 / spriteCountX;
	float spriteHeight = 1 / spriteCountY;
	SheetSprite sprite = SheetSprite(texture, u, v, spriteWidth, spriteHeight);
	return sprite;
}
示例#11
0
Enemy::Enemy(Textures* tex) : Character(tex) {
	is_jumper = false;

	//Enemy static sprites
	sprite = SheetSprite(tex->characterSpriteSheetTexture, 405.0f / 2048.0f, 167.0f / 2048.0f, 132.0f / 2048.0f, 161.0f / 2048.0f);
	sprite_face_right = SheetSprite(tex->characterSpriteSheetTexture, 1160.0f / 2048.0f, 827.0f / 2048.0f, 120.0f / 2048.0f, 162.0f / 2048.0f);
	sprite_face_left = SheetSprite(tex->characterSpriteSheetTexture, 916.0f / 2048.0f, 995.0f / 2048.0f, 120.0f / 2048.0f, 161.0f / 2048.0f);
	sprite_jump_right = SheetSprite(tex->characterAnimationSpriteSheetTexture, 122.0f / 1320.0f, 476.0f / 1320.0f, 120.0f / 1320.0f, 161.0f / 1320.0f);
	sprite_jump_left = SheetSprite(tex->characterAnimationSpriteSheetTexture, 721.0f / 1320.0f, 483.0f / 1320.0f, 120.0f / 1320.0f, 161.0f / 1320.0f);

	//Enemy animated sprites
	vector<vector<float>> frames_walk_right;
	vector<vector<float>> frames_walk_left;
	frames_walk_right.push_back({ 1160.0f / 2048.0f, 827.0f / 2048.0f, 120.0f / 2048.0f, 162.0f / 2048.0f });
	frames_walk_right.push_back({ 1158.0f / 2048.0f, 0.0f / 2048.0f, 120.0f / 2048.0f, 162.0f / 2048.0f });
	frames_walk_right.push_back({ 795.0f / 2048.0f, 1820.0f / 2048.0f, 120.0f / 2048.0f, 162.0f / 2048.0f });
	frames_walk_left.push_back({ 916.0f / 2048.0f, 995.0f / 2048.0f, 120.0f / 2048.0f, 161.0f / 2048.0f });
	frames_walk_left.push_back({ 1040.0f / 2048.0f, 1163.0f / 2048.0f, 120.0f / 2048.0f, 162.0f / 2048.0f });
	frames_walk_left.push_back({ 796.0f / 2048.0f, 831.0f / 2048.0f, 120.0f / 2048.0f, 162.0f / 2048.0f });

	//walk right animation
	animation_walk_right = SheetSprite(tex->characterSpriteSheetTexture);
	animation_walk_right.setAnimated(true, 8.0f, frames_walk_right);

	//walk left animation
	animation_walk_left = SheetSprite(tex->characterSpriteSheetTexture);
	animation_walk_left.setAnimated(true, 8.0f, frames_walk_left);
}
示例#12
0
Entity::Entity() {
	sprite = SheetSprite();
	friction_x = 5.0f;
	gravity_y = -4.0f;
	enableCollisions = true;
	collidedBottom = false;
	isStatic = true;
	isCollisionBool = false;
}
void ClassDemoApp::Setup() {
	SDL_Init(SDL_INIT_VIDEO);
	displayWindow = SDL_CreateWindow("My Game", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 360, SDL_WINDOW_OPENGL);
	SDL_GLContext context = SDL_GL_CreateContext(displayWindow);
	SDL_GL_MakeCurrent(displayWindow, context);

	glEnable(GL_BLEND);
	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

#ifdef _WINDOWS
	glewInit();
#endif
	done = false;

	srand((unsigned int)time(NULL));

	program = new ShaderProgram(RESOURCE_FOLDER"vertex_textured.glsl", RESOURCE_FOLDER"fragment_textured.glsl");
//	program = new ShaderProgram(RESOURCE_FOLDER"vertex.glsl", RESOURCE_FOLDER"fragment.glsl");
	tileTexture = LoadTexture("sheet_4.png");

	projectionMatrix.setOrthoProjection(-3.55f, 3.55f, -2.0f, 2.0f, -1.0f, 1.0f);

	//SheetSprite sheet = SheetSprite(tileTexture, 14, 8);
	for (int i = 0; i < LEVEL_HEIGHT; i++) {
		for (int j = 0; j < LEVEL_WIDTH; j++) {
			if (i == 0 || j == 0 || j == LEVEL_WIDTH - 1)
				levelData[i][j] = 13;
			else
				levelData[i][j] = 254;
		}
	}

	for (int k = 2; k < LEVEL_WIDTH - 5; ) {
		for (int r = rand() % 3; r < 3; r++) {
			int j = rand() % (LEVEL_HEIGHT - 4) + 3;
			for (int i = rand() % 4; i < 6; i++) {
				levelData[j][k + i] = 13;
				if (i == 4 && (k + i) > LEVEL_WIDTH - 11) {
					levelData[j - 1][k + i] = 64;
					r = 3;
				}
			}
		}
		k += 7 + rand() % 3;
	}

	SheetSprite playerSprite = SheetSprite(LoadTexture("p2_spritesheet.png"), 1, 1);
	player = new Entity(playerSprite);
	entities.push_back(player);
	player->width = 0.225f;
	player->height = 0.3f;
	player->x = TILE_SIZE * 6 + player->width / 2;
	player->y = -TILE_SIZE * 2;
	player->isStatic = false;
	baseTouchX = 6;
}
示例#14
0
void loadChunk(Chunk chunk, bool alive){
    for(int y=LEVEL_HEIGHT-1; y > 0 ; y--){
        for(int x=0; x < LEVEL_WIDTH; x++){
            if(chunk.get(y, x)){
                Entity myEntity = *new Entity(chunk.tileGlobalX(y, x),-(chunk.tileGlobalY(y,x)),TILE_X,TILE_Y);
                if (rand() % 100 < 20){
                    myEntity.type = BPLATFORM;
                    myEntity.sprite = SheetSprite(spriteSheetTexture, 0.0f/914.0f, 432.0f/936.0f, 70.0f/914.0f, 70.0f/936.0f, 0.2);
                }
                else{
                    myEntity.type = PLATFORM;
                    myEntity.sprite = SheetSprite(spriteSheetTexture, 504.0f/914.0f, 288.0f/936.0f, 70.0f/914.0f, 70.0f/936.0f, 0.2);
                }
                
                myEntity.isStatic = true;
                myEntity.isAlive = alive;
                entities.push_back(myEntity);
            }
        }
    }
}
示例#15
0
void ClassDemoApp::RenderGameLevel() {
    state = STATE_GAME_LEVEL;
    
    score = 0;
    
    timeCount = 0;
    enemyDirection = 1.0f;
    moveEnemyDown = false;
    enemyHitWall = false;
    
    player = new Entity();
    player->x = -0.1f;
    player->y = -2.0f + (player->height * 0.3f) / 2.0f;
    player->sprite = SheetSprite(spritesTexture, 426.0f/1024.0f, 132.0f/512.0f, 32.0f/1024.0f, 66.0f/512.0f, 0.3f);
    player->hitboxHeight = player->height * 0.3f;
    player->hitboxWidth = player->width * 0.3f;
    
    enemies.clear();
    
    for (int row = 0; row < 3; row++) {
        for (int column = 0; column < 6; column++) {
            Entity enemy;
            enemy.x = -3.0f + (column * 0.75f);
            enemy.y = 1.4f - (row * 0.5f);
            enemy.sprite = SheetSprite(spritesTexture, 420.0f/1024.0f, 66.0f/512.0f, 40.0f/1024.0f, 66.0f/512.0f, 0.3f);
            enemy.hitboxHeight = enemy.height * 0.3f;
            enemy.hitboxWidth = enemy.width * 0.3f;
            enemies.push_back(enemy);
            numOfEnemies++;
        }
    }
    
    bullet = Entity();
    bullet.active = false;
    bullet.sprite = SheetSprite(spritesTexture, 183.0f/1024.0f, 467.0f/512.0f, 12.0f/1024.0f, 11.0f/512.0f, 0.3f);
    bullet.hitboxHeight = bullet.height * 0.3f;
    bullet.hitboxWidth = bullet.width * 0.3f;
}
示例#16
0
///*
void DrawText(ShaderProgram* program, int fontTexture, std::string text, float size, float spacing) {
    for(int i=0; i < text.size(); i++){
        
        int x = 2 + (text[i] - 'a') % 16;
        int y = 5 + (text[i] - 'a')/16;
        
        Entity myEntity = *new Entity(0+(0.3*i),0,0.1,0.1);
        myEntity.sprite = SheetSprite(fontTexture, (spacing+(x*(spacing+size)))/512.0f, (spacing+(y*(spacing+size)))/512.0f, 20.0f/512.0f, 20.0f/512.0f, 0.2);
        myEntity.type = PLATFORM;
        myEntity.isStatic = true;
        menuEntities.push_back(myEntity);

    }
}
示例#17
0
void spawnEnemy(){
    float randx = (static_cast <float> (rand()) / (static_cast <float> (RAND_MAX/1.0f))) + 0.5f;
    if(rand() % 2){
        randx = -1 * randx;
    }
    float randy = (static_cast <float> (rand()) / (static_cast <float> (RAND_MAX/1.0f))) + 0.5f;
    if(rand() % 2){
        randy = -1 * randy;
    }
    Entity enemy = *new Entity(PLAYER_ENT.xmid()+randx,PLAYER_ENT.ymid()+randy,0.13,0.13);
    enemy.sprite = SheetSprite(spriteSheetTexture, 72.0f/914.0f, 72.0f/936.0f, 70.0f/914.0f, 70.0f/936.0f, 0.2);
    enemy.type = ENEMY;
    enemy.isAlive = true;
    enemy.player = &PLAYER_ENT;
    entities.push_back(enemy);
}
示例#18
0
void PlatKillas::shootBullet() {
	SheetSprite bulletSprite = SheetSprite(characterSpriteSheetTexture, 12, 8, 3);
	bullets[bulletIndex].sprite = bulletSprite;
	bullets[bulletIndex].visible = true;
	bullets[bulletIndex].x = player->x;
	bullets[bulletIndex].y = player->y;
	bullets[bulletIndex].rotation = 0.0f;
	if (player->face_left)
		bullets[bulletIndex].velocity_x = -3.5f;
	else
		bullets[bulletIndex].velocity_x = 3.5f;
	bulletIndex++;
	if (bulletIndex > MAX_BULLETS - 1) {
		bulletIndex = 0;
	}
	shootTimer = 0;
}
示例#19
0
void GameApp::placeEntity(string type, float placeX, float placeY)
{
	if (type == "player")
	{
		player.x = placeX;
		player.y = placeY;
	}
	else if(type == "star")
	{
		Entity* temp = new Entity();
		temp->sprite = SheetSprite(spriteSheet, 478, SPRITE_COUNT_X, SPRITE_COUNT_Y);
		temp->x = placeX;
		temp->y = placeY;
		temp->enableGravity = false;
		temp->enableCollisions = false;
		stars.push_back(temp);
		entities.push_back(temp);
	}
}
示例#20
0
void setupMainMenu(ShaderProgram* program){
    state = STATE_MAIN_MENU;
    //create a menu UI and such
    /*
    GLuint textTexture = LoadTexture(RESOURCE_FOLDER"font1.png");

    std::string text = "abcdefg";
    DrawText(program, textTexture,  text, 14.2f, 9.0f);//textTexture
    */
    

    GLuint menuTexture = LoadTexture(RESOURCE_FOLDER"Menu.png");
    
    Entity myEntity = *new Entity(-1.8,-1,3.6,2.0);
    myEntity.sprite = SheetSprite(menuTexture, 0.0f, 0.0f, 1.0f, 1.0f, 2.0);
    myEntity.type = PLATFORM;
    myEntity.isStatic = true;
    menuEntities.push_back(myEntity);

    
}
示例#21
0
void PlatKillas::buildLevel() {
	brickIndex = 0;
	brickSpriteSheetTexture = LoadTexture("sheet_4.png");
	SheetSprite brickSprite;
	for (float i = -1.0f; i <= 1.0f; i = i + 0.2f) {
		brickSprite = SheetSprite(brickSpriteSheetTexture, 14, 8, 7 + rand() % 3);
		bricks[brickIndex].sprite = brickSprite;
		bricks[brickIndex].isStatic = true;
		bricks[brickIndex].y = -0.9f;
		bricks[brickIndex].x = i;
		bricks[brickIndex].width = 0.2f;
		bricks[brickIndex].height = 0.2f;
		entities.push_back(&bricks[brickIndex]);
		brickIndex++;
	}

	brickSprite = SheetSprite(brickSpriteSheetTexture, 14, 8, 27);
	for (float i = -0.4f; i <= 1.0f; i = i + 0.2f) {
		bricks[brickIndex].sprite = brickSprite;
		bricks[brickIndex].isStatic = true;
		bricks[brickIndex].y = i;
		bricks[brickIndex].x = -1.23f;
		bricks[brickIndex].width = 0.2f;
		bricks[brickIndex].height = 0.2f;
		entities.push_back(&bricks[brickIndex]);
		brickIndex++;
	}
	for (float i = -0.4f; i <= 1.0f; i = i + 0.2f) {
		bricks[brickIndex].sprite = brickSprite;
		bricks[brickIndex].isStatic = true;
		bricks[brickIndex].y = i;
		bricks[brickIndex].x = 1.23f;
		bricks[brickIndex].width = 0.2f;
		bricks[brickIndex].height = 0.2f;
		entities.push_back(&bricks[brickIndex]);
		brickIndex++;
	}

	for (float i = -0.4f; i <= 0.4f; i = i + 0.2f) {
		brickSprite = SheetSprite(brickSpriteSheetTexture, 14, 8, 11);
		bricks[brickIndex].sprite = brickSprite;
		bricks[brickIndex].isStatic = true;
		bricks[brickIndex].y = 0.1f;
		bricks[brickIndex].x = i;
		bricks[brickIndex].width = 0.2f;
		bricks[brickIndex].height = 0.2f;
		entities.push_back(&bricks[brickIndex]);
		brickIndex++;
	}

	for (float i = -1.05f; i <= -0.8f; i = i + 0.2f) {
		brickSprite = SheetSprite(brickSpriteSheetTexture, 14, 8, 11);
		bricks[brickIndex].sprite = brickSprite;
		bricks[brickIndex].isStatic = true;
		bricks[brickIndex].y = -0.4f;
		bricks[brickIndex].x = i;
		bricks[brickIndex].width = 0.2f;
		bricks[brickIndex].height = 0.2f;
		entities.push_back(&bricks[brickIndex]);
		brickIndex++;
	}

	for (float i = 1.05f; i >= 0.8f; i = i - 0.2f) {
		brickSprite = SheetSprite(brickSpriteSheetTexture, 14, 8, 11);
		bricks[brickIndex].sprite = brickSprite;
		bricks[brickIndex].isStatic = true;
		bricks[brickIndex].y = -0.4f;
		bricks[brickIndex].x = i;
		bricks[brickIndex].width = 0.3f;
		bricks[brickIndex].height = 0.2f;
		entities.push_back(&bricks[brickIndex]);
		brickIndex++;
	}


	
}
示例#22
0
Player::Player(float size, float x_position, float y_position, int texture, ShaderProgram* program){
	current_health = max_health = 1000;
	current_mana = max_mana = 75;
	stretchy = true;
	this->program = program;
	position.set_x(x_position);
	position.set_y(y_position);
	this->size = size;
	coloruniform = glGetUniformLocation(program->programID, "color_shift");
	// Animation stuff. Here, set the positions of the various sprites used, toss them in array
	float sheet_width = 256;
	float sheet_length = 512;
	animation_time = .05f;
	/*<TextureAtlas imagePath="sprites.png">
	<SubTexture name="bathighflap.png" x="0" y="53" width="96" height="58"/>
	<SubTexture name="batlowflap.png" x="0" y="113" width="88" height="66"/>
	<SubTexture name="batmidhighflap.png" x="0" y="181" width="83" height="57"/>
	<SubTexture name="batmidlowflap.png" x="0" y="0" width="100" height="51"/>
	<SubTexture name="player_jumping.png" x="148" y="307" width="66" height="94"/>
	<SubTexture name="player_standing.png" x="148" y="209" width="66" height="96"/>
	<SubTexture name="player_walking1.png" x="102" y="0" width="72" height="94"/>
	<SubTexture name="player_walking2.png" x="90" y="113" width="72" height="94"/>
	<SubTexture name="player_walking3.png" x="74" y="336" width="72" height="94"/>
	<SubTexture name="player_walking4.png" x="74" y="240" width="72" height="94"/>
	<SubTexture name="player_walking5.png" x="0" y="336" width="72" height="94"/>
	<SubTexture name="player_walking6.png" x="0" y="240" width="72" height="94"/>
</TextureAtlas>*/
	Sheetposition p1_stand = Sheetposition(148, 209, 66, 96, this->size, sheet_width, sheet_length);
	Sheetposition p1_jump = Sheetposition(148, 307, 66, 94, this->size, sheet_width, sheet_length);
	Sheetposition p1_walk01 = Sheetposition(102, 0, 72, 94, this->size, sheet_width, sheet_length);
	Sheetposition p1_walk02 = Sheetposition(90, 113, 72, 94, this->size, sheet_width, sheet_length);
	Sheetposition p1_walk03 = Sheetposition(74, 336, 72, 94, this->size, sheet_width, sheet_length);
	Sheetposition p1_walk04 = Sheetposition(74, 240, 72, 94, this->size, sheet_width, sheet_length);
	Sheetposition p1_walk05 = Sheetposition(0, 336, 72, 94, this->size, sheet_width, sheet_length);
	Sheetposition p1_walk06 = Sheetposition(0, 240, 72, 94, this->size, sheet_width, sheet_length);
	Sheetposition bat_highflap = Sheetposition(0, 53, 96, 57, this->size/2, sheet_width, sheet_length);
	Sheetposition bat_midhighflap = Sheetposition(0, 181, 83, 57, this->size/2, sheet_width, sheet_length);
	Sheetposition bat_midlowflap = Sheetposition(0, 0, 100, 51, this->size/2, sheet_width, sheet_length);
	Sheetposition bat_lowflap = Sheetposition(0, 113, 88, 66, this->size/2, sheet_width, sheet_length);
	spritesheet = SheetSprite(texture, p1_stand);
	frames = new Sheetposition[12];
	Sheetposition holder[] = { p1_stand, p1_jump, p1_walk01, p1_walk02, p1_walk03, p1_walk04, p1_walk05, p1_walk06,
		bat_highflap, bat_midhighflap, bat_midlowflap, bat_lowflap};
	for (int i = 0; i < 12; i++){
		frames[i] = holder[i];
	}

	hurt_frame = 1;
	walk_begin = 2;
	walk_end = 7;
	sprite = p1_stand;
	hurt_time = .5f;

	
	
	// physics stuff
	bottom_flag = top_flag = right_flag = left_flag = false;
	jump_velocity = 3.5;
	acceleration_rate = 17.5;
	gravity.set_y(25.0);
	friction.set_x(5.0);
	friction.set_y(0);
}
示例#23
0
void ClassDemoApp::Setup() {
	SDL_Init(SDL_INIT_VIDEO);
	displayWindow = SDL_CreateWindow("My Box Game", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, (int)WINDOW_WIDTH, (int)WINDOW_HEIGHT, SDL_WINDOW_OPENGL);
	SDL_GLContext context = SDL_GL_CreateContext(displayWindow);
	SDL_GL_MakeCurrent(displayWindow, context);

	glEnable(GL_BLEND);
	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

#ifdef _WINDOWS
	glewInit();
#endif
	done = false;

	srand((unsigned int)time(NULL));

	program = new ShaderProgram(RESOURCE_FOLDER"vertex_textured.glsl", RESOURCE_FOLDER"fragment_textured_lighting.glsl");
	programInfo = new ShaderProgram(RESOURCE_FOLDER"vertex_textured.glsl", RESOURCE_FOLDER"fragment_textured_colored.glsl");
	tileTexture = LoadTexture("Tileset.png");
	infoBox = LoadTexture("InfoBox.png");

	projectionMatrix.setOrthoProjection(-PROJECTION_WIDTH, PROJECTION_WIDTH, -PROJECTION_HEIGHT, PROJECTION_HEIGHT, -1.0f, 1.0f);

	state = PlayingLevel;
	LoadLevel("map1.txt");

	SheetSprite playerSprite = SheetSprite(LoadTexture("player.png"), 1, 1);
	player = new Entity(playerSprite);
	entities.push_back(player);
	player->entityType = Entity::ENTITY_PLAYER;
	player->width = BOX_SIZE;
	player->height = BOX_SIZE;
	player->spawnX = 2;
	player->spawnY = -5;
	player->y = TILE_SIZE * player->spawnY + player->height / 2;
	player->x = TILE_SIZE * player->spawnX + player->width / 2;
	player->isStatic = false;

	includePlayer2 = false;

	player2 = new Entity(playerSprite);
	if (includePlayer2) {
		entities.push_back(player2);
	}
	player2->entityType = Entity::ENTITY_PLAYER;
	player2->width = BOX_SIZE;
	player2->height = BOX_SIZE;
	player2->spawnX = 1;
	player2->spawnY = -5;
	player2->y = TILE_SIZE * player2->spawnY + player->height / 2;
	player2->x = TILE_SIZE * player2->spawnX + player->width / 2;
	player2->isStatic = false;

	box = new Entity(playerSprite);
	box->entityType = Entity::ENTITY_ENEMY;
	box->width = BOX_SIZE;
	box->height = BOX_SIZE;
	box->spawnX = 4;
	box->spawnY = -5;
	box->y = TILE_SIZE * box->spawnY + box->height / 2;
	box->x = TILE_SIZE * box->spawnX + box->width / 2;
	box->isStatic = false;
	entities.push_back(box);

	box2 = new Entity(playerSprite);
	box2->entityType = Entity::ENTITY_ENEMY;
	box2->width = (float)(BOX_SIZE) * 2;
	box2->height = (float)(BOX_SIZE)* 2;
	box2->spawnX = 7;
	box2->spawnY = -6;
	box2->y = TILE_SIZE * box2->spawnY + box2->height / 2;
	box2->x = TILE_SIZE * box2->spawnX + box2->width / 2;
	box2->isStatic = false;
	entities.push_back(box2);

	box3 = new Entity(playerSprite);
	box3->entityType = Entity::ENTITY_ENEMY;
	box3->width = (float)(BOX_SIZE)* 3;
	box3->height = (float)(BOX_SIZE)* 3;
	box3->spawnX = 12;
	box3->spawnY = -6;
	box3->y = TILE_SIZE * box3->spawnY + box3->height / 2;
	box3->x = TILE_SIZE * box3->spawnX + box3->width / 2;
	box3->isStatic = false;
	entities.push_back(box3);


	players[0] = player;
	players[1] = player2;

	//Set Controls Here
	controls[0] = new PlayerController(SDL_SCANCODE_W, SDL_SCANCODE_S, SDL_SCANCODE_A, SDL_SCANCODE_D, SDL_SCANCODE_K);
	controls[1] = new PlayerController(SDL_SCANCODE_UP, SDL_SCANCODE_DOWN, SDL_SCANCODE_LEFT, SDL_SCANCODE_RIGHT, SDL_SCANCODE_RCTRL);

	infoBoxTimer = 8;
}
示例#24
0
void Weapon::changeWeapon(int type)
{
	this->type = type;
	if (type == RAY_GUN) {
		scale_x = 1.5f;
		scale_y = 1.5f;

		rateOfFire = 1.0f;
		ammo = 150;
		max_ammo = 350;
		melee_damage = 0;

		droppable = true;
		bullet_type = PLASMA_BALL;
		sprite = SheetSprite(tex->weaponSpriteSheetTexture, 14, 7, 2);
	}
	else if (type == SWORD) {
		scale_x = 1.2f;
		scale_y = 0.4f;

		rateOfFire = 0.0f;
		ammo = 0;
		max_ammo = 0;
		melee_damage = 20;

		droppable = false;
		bullet_type = PLASMA_BALL;
		sprite = SheetSprite(tex->characterAnimationSpriteSheetTexture, 481.0f / 1320.0f, 987.0f / 1320.0f, 111.0f / 1320.0f, 33.0f / 1320.0f);
	}
	else if (type == MINI_GUN) {
		scale_x = 1.5f;
		scale_y = 1.5f;

		rateOfFire = 2.0f;
		ammo = 125;
		max_ammo = 200;
		melee_damage = 0;

		droppable = true;
		bullet_type = LASER;
		sprite = SheetSprite(tex->minigunTexture, 1, 1, 0);
	}
	else if (type == MACHINE_GUN) {
		scale_x = 1.5f;
		scale_y = 1.0f;

		rateOfFire = 1.5f;
		ammo = 150;
		max_ammo = 400;
		melee_damage = 0;

		droppable = true;
		bullet_type = SMILEY_FACE;
		sprite = SheetSprite(tex->gunsSpriteSheetTexture, 344.0f / 480.0f, 4.0f / 256.0f, 99.0f / 480.0f, 63.0f / 256.0f);
	}
	else if (type == SHOTGUN) {
		scale_x = 1.3f;
		scale_y = 0.5f;

		rateOfFire = 0.3f;
		ammo = 20;
		max_ammo = 40;
		melee_damage = 0;

		droppable = true;
		bullet_type = FRUIT;
		sprite = SheetSprite(tex->gunsSpriteSheetTexture, 96.0f / 480.0f, 212.0f / 256.0f, 95.0f / 480.0f, 33.0f / 256.0f);
	}
}