Example #1
0
Character::Character(float radius, float speed, Color green, Color yellow, 
					 Vector2D centre) 
:	M_PI(std::acos(-1)),
	DEGREES(M_PI / 180.0f),
	m_move(false), 
	m_centre(centre),
	m_radius(radius),
	m_speed(speed),
	m_angle(90 * DEGREES),
	m_tRadius(radius / 5),
	m_tAngle(m_angle)
{
	Vector2D offset = Vector2D(PATH_RADIUS * cos(m_angle), 
							   PATH_RADIUS * sin(m_angle));

	//Positions
	m_pos = Vector2D(m_centre.x + offset.x, m_centre.y + offset.y);
	m_tPos = m_pos;

	//Character shape
	m_shape = CircleShape(m_radius);
	m_shape.setFillColor(green);
	m_shape.setPosition(Vector2f(m_pos.x - m_radius, m_pos.y - m_radius));

	//Target shape
	m_target = CircleShape(m_tRadius);
	m_target.setFillColor(yellow);
	m_target.setPosition(Vector2f(m_tPos.x - m_tRadius, 
								  m_tPos.y - m_tRadius));
}
//-----------------------------------------------------------------------
void SpringGenerator::addToTriangleBuffer(TriangleBuffer& buffer) const
{
	Path p = HelixPath().setHeight(mHeight).setNumRound(mNumRound).setNumSegPath(mNumSegPath).setRadius(mRadiusHelix).realizePath();

	Shape s = CircleShape().setRadius(mRadiusCircle).setNumSeg(mNumSegCircle).realizeShape();

	Extruder().setExtrusionPath(&p).setShapeToExtrude(&s).addToTriangleBuffer(buffer);
}
Example #3
0
//void demography  :: add()
//{
////    if(false)
//    {
//        b2CircleShape Shape;
//        Shape.m_radius = radius;
//        auto position =
//            Vec2(wsize.x*getrangerand(.1,.9),
//                 wsize.y*getrangerand(.1,.9));
//
//        auto Body = makebody(World,&Shape,conv(position),b2_dynamicBody,0,0.01,0,.9);
//
//        Body->SetLinearVelocity(
//        b2Vec2(5*getrangerand(-1,1),
//            5*getrangerand(-1,1)));
//        cellbodies.push_back(Body);
//        pos.push_back(b2Vec2());
//        
////        cells.push_back(CircleShape(0,4));
////        cells.back().setFillColor(Color(255,80,160));
////        cells.back().setRadius(SCALE*radius*GR_PH_COEFF);
////        cells.back().setOrigin(cells.back().getRadius(), cells.back().getRadius());
//        vbunk.add();
//    //    cells.back().setPosition(conv(position));
//    }
//    if(false)
//    {
//        pos.push_back(b2Vec2());
//    //    pos_sf.push_back(Vec2());
//        
//        b2BodyDef BodyDef;
//        BodyDef.position = b2Vec2
//        ((getrand(0.3)+0.2)*wsize.x/SCALE,
//         (getrand(0.3)+0.2)*wsize.y/SCALE);
//        BodyDef.type = b2_dynamicBody;
//    //    BodyDef.linearDamping=dampen;
//        b2Body* Body = World.CreateBody(&BodyDef);
//        
//        b2CircleShape Shape;
//        Shape.m_radius = radius;
//        //Body->setv
//        b2FixtureDef FixtureDef;
//        FixtureDef.density = 4.f;
//        FixtureDef.restitution = .9f;
//        FixtureDef.shape = &Shape;
//        Body->CreateFixture(&FixtureDef);
//        Body->SetLinearVelocity(b2Vec2
//            (5*getrangerand(-1,1),
//             5*getrangerand(-1,1)));
//        cellbodies.push_back(Body);
//        
//        cells.push_back(CircleShape(SCALE,4));
//        cells.back().setFillColor(Color(255,80,160));
//        cells.back().setRadius(SCALE*radius);
//        cells.back().setOrigin(cells.back().getRadius(), cells.back().getRadius());
//    }
//    lb2(cells.size());
//}
void demography  :: add_agent(Vec2 position, int is_enemy)

{
    b2CircleShape shape,shape_s,shape_s_e;
    shape       .m_radius = radius;
    shape_s     .m_radius = sensor_radius;
    shape_s_e   .m_radius = sensor_radius_e;

    auto Body = make_body(World,conv(position),b2_dynamicBody,dampen);
    b2FixtureDef fixdef, fixdef_s, fixdef_s_e;
    if(use_masks)
    {
        fixdef      = make_fixture(static_cast<b2Shape*>(&shape),    false, &filters[is_enemy][0],.1,4);
        //fixdef_s    = make_fixture(static_cast<b2Shape*>(&shape_s),  true,  &filters[is_enemy][1]    );
        //fixdef_s_e  = make_fixture(static_cast<b2Shape*>(&shape_s_e),true,  &filters[is_enemy][2]);
    }
    else
    {
        fixdef = make_fixture  (static_cast<b2Shape*>(&shape),false);
        fixdef.density=4;
        //fixdef_s = make_fixture(static_cast<b2Shape*>(&shape_s),true);
        //fixdef_s_e = make_fixture(static_cast<b2Shape*>(&shape_s_e),true);
    }
    Body->CreateFixture(&fixdef);
    //Body->CreateFixture(&fixdef_s);
    //Body->CreateFixture(&fixdef_s_e);
    if(!is_enemy)cellbodies.insert(Body);
    //if(draw_sensors)
    //{
    //    sensors[Body]=(CircleShape(SCALE*shape_s.m_radius,16));
    //    sensors[Body].setFillColor(Color(0,0,0,0));
    //    sensors[Body].setOutlineColor(Color(64,64,64));
    //    //sensors[Body].setOutlineColor(Color(0,64,0));
    //    sensors[Body].setOutlineThickness(0.5);
    //    sensors[Body].setOrigin(sensors[Body].getRadius(), sensors[Body].getRadius());

    //    sensors2[Body]=(CircleShape(SCALE*shape_s_e.m_radius,16));
    //    sensors2[Body].setFillColor(Color(0,0,0,0));
    //    //sensors2[Body].setOutlineColor(Color(96,0,0));
    //    sensors2[Body].setOutlineColor(Color(64,64,64));
    //    sensors2[Body].setOutlineThickness(0.5);
    //    sensors2[Body].setOrigin(sensors2[Body].getRadius(), sensors2[Body].getRadius());
    //}
#define USE_SHAPES
#ifdef USE_SHAPES
    cells[Body]=CircleShape(SCALE,getrangerand(3,6));
    cells[Body].setFillColor(rgb_from_hue(getrand(1)));
    cells[Body].setRadius(SCALE*radius);
    cells[Body].setOrigin(cells[Body].getRadius(), cells[Body].getRadius());
#else
    vbunk.add();
#endif
    nears[Body]=unordered_set<b2Body*>();
    pos.push_back(b2Vec2());
}
Example #4
0
void Particle::SetParticle(Vector2f InTopLeft, Vector2f InBottommRight, Uint32 i, Uint32 j, Real * InU, Real * InV)
{
	ParticleRadius = 10;
	TopLeft = InTopLeft;
	BottommRight = InBottommRight;
	CavitySize = Vector2f(BottommRight.x - TopLeft.x, BottommRight.y - TopLeft.y);
	Cavity_i = i;
	Cavity_j = j;
	u = InU;
	v = InV;
	Circle = CircleShape(ParticleRadius, 4);
	Circle.setFillColor(sf::Color(100, 250, 50));
	
	SetPosition(Cavity_i, Cavity_j);
}
Example #5
0
void Player::updatePlayer()
{
	//Animation logic stuff
	if (flameAnim > animSteps){
		animAscend = false;
	}
	else if (flameAnim < -animSteps){
		animAscend = true;
	}



	//Collision checks
	//Borders
	if (!getExplosionState()){
		if (playerSprite.getPosition().y <= (playerSprite.getGlobalBounds().height / 2) || playerSprite.getPosition().y + (playerSprite.getGlobalBounds().height / 2) >= VideoMode::getDesktopMode().height){

			for (int i = 0; i < 2; i++){
				decreaseHealth(difficulty);
				if (getPlayerHealth() < 0){
					short num = -(getPlayerHealth());
					increaseHealth(num);
				}

				if (hardcore) setExplosionState(true);

				updateCrashSound();

				if (showParticles){
					crashDebrisSpeed.push_back(Vector2f(-(getObstacleBaseSpeed() / 2), getRandom(-2, 2)));
	
					crashDebris.push_back(RectangleShape());
					short ramNum = getRandom(5, 8);
					crashDebris.back().setSize(Vector2f(ramNum, ramNum));
					crashDebris.back().setOrigin(ramNum / 2, ramNum / 2);
					ramNum = getRandom(50, 160);
					crashDebris.back().setFillColor(Color::Color(ramNum, ramNum, ramNum));
					crashDebris.back().setPosition(collisionCircle[0].getPosition().x + getRandom(-5, 5), collisionCircle[0].getPosition().y + getRandom(-5, 5));
				}	
			}
		}

		//Obstacles
		for (int i=0; i<getNumberOfObstacles(); i++){
			if (playerCollision(&collisionCircle[0], &getObstacleObject(i))){
				if (getPlayerHealth() > 0) decreaseHealth(difficulty);
				if (getPlayerHealth() < 0){
					short num = -(getPlayerHealth());
					increaseHealth(num);
				}

				if (hardcore) setExplosionState(true);

				updateCrashSound();
	
				if (showParticles){
					crashDebrisSpeed.push_back(Vector2f(-(getObstacleBaseSpeed() / 2), getRandom(-2, 2)));
			
					crashDebris.push_back(RectangleShape());
					short ramNum = getRandom(5, 8);
					crashDebris.back().setSize(Vector2f(ramNum, ramNum));
					crashDebris.back().setOrigin(ramNum / 2, ramNum / 2);
					ramNum = getRandom(50, 160);
					crashDebris.back().setFillColor(Color::Color(ramNum, ramNum, ramNum));
					crashDebris.back().setPosition(collisionCircle[0].getPosition().x + getRandom(-5, 5), collisionCircle[0].getPosition().y + (getRandom(-5, 5)));
				}
			}

			if (playerCollision(&collisionCircle[1], &getObstacleObject(i))){
				if (getPlayerHealth() > 0) decreaseHealth(difficulty);
				if (getPlayerHealth() < 0){
					short num = -(getPlayerHealth());
					increaseHealth(num);
				}

				if (hardcore) setExplosionState(true);

				updateCrashSound();
			
				if (showParticles){
					crashDebrisSpeed.push_back(Vector2f(-(getObstacleBaseSpeed() / 2), getRandom(-2, 2)));

					crashDebris.push_back(RectangleShape());
					short ramNum = getRandom(4, 7);
					crashDebris.back().setSize(Vector2f(ramNum, ramNum));
					crashDebris.back().setOrigin(ramNum / 2, ramNum / 2);
					ramNum = getRandom(50, 160);
					crashDebris.back().setFillColor(Color::Color(ramNum, ramNum, ramNum));
					crashDebris.back().setPosition(collisionCircle[1].getPosition().x + getRandom(-3, 3), collisionCircle[1].getPosition().y + (getRandom(-3, 3)));
				}
			}

			if (playerCollision(&collisionCircle[2], &getObstacleObject(i))){
				if (getPlayerHealth() > 0) decreaseHealth(difficulty);
				if (getPlayerHealth() < 0){
					short num = -(getPlayerHealth());
					increaseHealth(num);
				}

				if (hardcore) setExplosionState(true);

				updateCrashSound();
			
				if (showParticles){
					crashDebrisSpeed.push_back(Vector2f(-(getObstacleBaseSpeed() / 2), getRandom(-2, 2)));

					crashDebris.push_back(RectangleShape());
					short ramNum = getRandom(4, 7);
					crashDebris.back().setSize(Vector2f(ramNum, ramNum));
					crashDebris.back().setOrigin(ramNum / 2.0f, ramNum / 2.0f);
					ramNum = getRandom(50, 160);
					crashDebris.back().setFillColor(Color::Color(ramNum, ramNum, ramNum));
					crashDebris.back().setPosition(collisionCircle[2].getPosition().x + getRandom(-3, 3), collisionCircle[2].getPosition().y + (getRandom(-3, 3)));
				}
			}
		}
	}

	//Explosion
	if (getPlayerHealth() <= 0 || getExplosionState()){
		setExplosionState(true);
		decreaseFuel(getPlayerFuel());
		updateExplosionText();
		stopRocketSound();
		stopAlarmSound();
		stopCrashSound();

		if (initExplosion){
			for (int i = 0; i < 200; i++){
				crashDebrisSpeed2.push_back(Vector2f(getRandom(-2, 2), getRandom(-2, 2)));

				crashDebris2.push_back(RectangleShape());
				short ramNum = getRandom(4, 7);
				crashDebris2.back().setSize(Vector2f(ramNum, ramNum));
				crashDebris2.back().setOrigin(ramNum / 2.0f, ramNum / 2.0f);
				ramNum = getRandom(50, 160);
				crashDebris2.back().setFillColor(Color::Color(ramNum, ramNum, ramNum));
				crashDebris2.back().setPosition(collisionCircle[0].getPosition().x + getRandom(-3, 3), collisionCircle[0].getPosition().y + (getRandom(-3, 3)));


				damageParticleSpeed2.push_back(Vector2f(getRandom(-3, 3), getRandom(-3, 3)));

				damageParticle2.push_back(CircleShape());
				damageParticle2.back().setRadius(getRandom(1, 2));
				damageParticle2.back().setFillColor(Color::Color(255, 153, 51));
				int j = getRandom(0, 2);
				damageParticle2.back().setPosition(collisionCircle[0].getPosition().x + getRandom(-3, 3), collisionCircle[0].getPosition().y + (getRandom(-3, 3)));
			}

			playExplosionSound();
		}

		for (int i = 0; i < crashDebris2.size(); i++){
			crashDebris2[i].move(crashDebrisSpeed2[i].x - explosionSpeedCounter, crashDebrisSpeed2[i].y);
			if (i % 2 == 0){
				crashDebris2[i].rotate(2);
			}
			else crashDebris2[i].rotate(-2);

			crashDebrisSpeed2[i].x = crashDebrisSpeed2[i].x * 0.985;
			crashDebrisSpeed2[i].y = crashDebrisSpeed2[i].y * 0.985;

			if (crashDebris2[i].getPosition().x < -10){
				crashDebris2.erase(crashDebris2.begin() + i);
				crashDebrisSpeed2.erase(crashDebrisSpeed2.begin() + i);
			}
		}
		for (int i = 0; i < damageParticleSpeed2.size(); i++){
			damageParticle2[i].move(damageParticleSpeed2[i].x - explosionSpeedCounter, damageParticleSpeed2[i].y);

			damageParticleSpeed2[i].x = damageParticleSpeed2[i].x * 0.985;
			damageParticleSpeed2[i].y = damageParticleSpeed2[i].y * 0.985;

			if (damageParticle2[i].getPosition().x < -10){
				damageParticle2.erase(damageParticle2.begin() + i);
				damageParticleSpeed2.erase(damageParticleSpeed2.begin() + i);
			}

		}

		if (explosionSpeedCounter <= 10.0){
			explosionSpeedCounter *= 1.03;
		}

		initExplosion = false;

		if (Keyboard::isKeyPressed(Keyboard::R)){
			setCrashState(true);
			setExplosionState(false);
		}
		else if (Keyboard::isKeyPressed(Keyboard::Escape)) setExitState(true);
	}


	//Updates
	//Crash debris
	if (showParticles){
		for (int i = 0; i < crashDebris.size(); i++){
			crashDebris[i].move(crashDebrisSpeed[i].x, crashDebrisSpeed[i].y);
		
			if (i % 2 == 0) crashDebris[i].rotate(10);
				else crashDebris[i].rotate(-10);

			if (crashDebris[i].getPosition().x < -20){
				crashDebris.erase(crashDebris.begin() + i);
				crashDebrisSpeed.erase(crashDebrisSpeed.begin() + i);
			}
		}

	//Damage particles
		if (getPlayerHealth() > 0 && getPlayerHealth() <= 75){
		
			if (1 >= getRandom(0, 10)){
				damageParticleSpeed.push_back(Vector2f(-(getObstacleBaseSpeed()), 0));

				damageParticle.push_back(CircleShape());

				damageParticle.back().setRadius(1);
				damageParticle.back().setFillColor(Color::Color(255, 153, 51));
				int i = getRandom(0, 2);
				damageParticle.back().setPosition(collisionCircle[i].getPosition().x + getRandom(-3, 3), collisionCircle[i].getPosition().y + (getRandom(-3, 3)));
			}
		}
		if (getPlayerHealth() > 0 && getPlayerHealth() <= 50){
		
			if (1 >= getRandom(0, 5)){
				damageParticleSpeed.push_back(Vector2f(-(getObstacleBaseSpeed()), 0));

				damageParticle.push_back(CircleShape());
			
				damageParticle.back().setRadius(1);
				damageParticle.back().setFillColor(Color::Color(255, 153, 51));
				int i = getRandom(0, 2);
				damageParticle.back().setPosition(collisionCircle[i].getPosition().x + getRandom(-3, 3), collisionCircle[i].getPosition().y + (getRandom(-3, 3)));
			}
		}
		if (getPlayerHealth() > 0 && getPlayerHealth() <= 25){
		
			if (1 >= getRandom(0, 2)){
				damageParticleSpeed.push_back(Vector2f(-(getObstacleBaseSpeed()), 0));

				damageParticle.push_back(CircleShape());
			
				damageParticle.back().setRadius(1);
				damageParticle.back().setFillColor(Color::Color(255, 153, 51));
				int i = getRandom(0, 2);
				damageParticle.back().setPosition(collisionCircle[i].getPosition().x + getRandom(-3, 3), collisionCircle[i].getPosition().y + (getRandom(-3, 3)));
			}

			if (1 >= getRandom(0, 50)){

			}
		}

		for (int i = 0; i < damageParticle.size(); i++){
			damageParticle[i].move(damageParticleSpeed[i].x, damageParticleSpeed[i].y);

			if (damageParticle[i].getPosition().x < -10){
				damageParticle.erase(damageParticle.begin() + i);
				damageParticleSpeed.erase(damageParticleSpeed.begin() + i);
			}
		}
	}

	if (getPlayerFuel() > 0 && getPlayerHealth() > 0){

		if (controlScheme == 1){
			if (Keyboard::isKeyPressed(Keyboard::Space)){
				if (playerRotation >= -30){
					playerRotation -= 15;
					if (playerRotation < -30) playerRotation = playerRotation - (playerRotation + 30);
					playerSprite.setRotation(playerRotation);
				}

				playerSprite.move(0, baseClimingSpeed); //Climing speed is always constant
	
				playerSpeed = -(baseFallingSpeed +3); //Set speed value so that transition from climing to falling feels smooth
			}
			else {
				if (playerRotation <= 20){
					playerRotation += 5;
					playerSprite.setRotation(playerRotation);
				}

				playerSprite.move(0, baseFallingSpeed + playerSpeed);
		
				if (playerSpeed <= 0) playerSpeed = playerSpeed + 1;
				else if ((playerSpeed <= baseFallingSpeed) && (playerSpeed > 0)) playerSpeed = playerSpeed * 1.02;
			}
		}
		else if (controlScheme == 2){
			if (Keyboard::isKeyPressed(Keyboard::Left) && playerRotation >= -30){
				playerRotation -= 3;
			}
			
			else if (Keyboard::isKeyPressed(Keyboard::Right) && playerRotation <= 30){
				playerRotation += 3;
			}
			else if (Keyboard::isKeyPressed(Keyboard::Space)){
				playerRotation = 0;
			}
			
			playerSprite.setRotation(playerRotation);
			playerSprite.move(0, playerRotation / 3);
		}
		else if (controlScheme == 3){
			if (Keyboard::isKeyPressed(Keyboard::Left)){
				if (playerRotation >= -30) playerRotation -= 5;
			}
			
			else if (Keyboard::isKeyPressed(Keyboard::Right)){
				if (playerRotation <= 30) playerRotation += 5;
			}
			else {
				if (playerRotation < 0){
					playerRotation += 5;
				}
				else if (playerRotation > 0) playerRotation -= 5;
			}
			
			playerSprite.setRotation(playerRotation);
			playerSprite.move(0, playerRotation / 3);
		}

		if (getPlayerHealth() > 0) updateRocketSound();
	}
	else if (getPlayerFuel() <= 0){
		if (!playedShutdownSound){
			playShutdownSound();
			playedShutdownSound = true;
		}

		stopRocketSound();

		if (playerRotation < 0) playerSprite.move(0, playerRotation / 6);
		else if (playerRotation > 0) playerSprite.move(0, playerRotation / 3);

		if (playerRotation < 0) playerSprite.rotate(-1);
		else if (playerRotation > 0) playerSprite.rotate(1);
	}
	

	//Flame Sprite Bottom
	flameSpriteBottom.setPosition((playerSprite.getPosition().x - 45) - (playerRotation / 2.4), (playerSprite.getPosition().y + 28) + -(playerRotation / 1.05));
	flameSpriteBottom.setRotation(playerSprite.getRotation());

	if (animAscend){
		flameScale += 0.012;
		flameSpriteBottom.setScale(flameScale, flameSpriteBottom.getScale().y);
		flameAnim++;
	}
	else if (!animAscend){
		flameScale -= 0.012;
		flameSpriteBottom.setScale(flameScale, flameSpriteBottom.getScale().y);
		flameAnim--;
	}


	//Flame Sprite Top
	flameSpriteTop.setPosition(playerSprite.getPosition().x - 45, (playerSprite.getPosition().y - 7) + -(playerRotation / 1.05));
	flameSpriteTop.setRotation(playerSprite.getRotation());

	if (animAscend){
		flameScale += 0.012;
		flameSpriteTop.setScale(flameScale, flameSpriteBottom.getScale().y);
		flameAnim++;
	}
	else if (!animAscend){
		flameScale -= 0.012;
		flameSpriteTop.setScale(flameScale, flameSpriteBottom.getScale().y);
		flameAnim--;
	}

	collisionCircle[0].setPosition(playerSprite.getPosition().x + 20, playerSprite.getPosition().y + ((playerRotation / 3) + 2));
	collisionCircle[1].setPosition(playerSprite.getPosition().x - (24 - (playerRotation / 5)), playerSprite.getPosition().y - ((playerRotation / 2) + 12));
	collisionCircle[2].setPosition(playerSprite.getPosition().x - (24 + (playerRotation / 5)), playerSprite.getPosition().y - ((playerRotation / 2) - 14));
}
Example #6
0
MouseTest::MouseTest()
{
    circle = CircleShape(20, 30);
    circle.setOrigin(20.f, 20.f);
    playerSpeed = 200.0f;
}