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); }
//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()); }
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); }
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)); }
MouseTest::MouseTest() { circle = CircleShape(20, 30); circle.setOrigin(20.f, 20.f); playerSpeed = 200.0f; }