Exemple #1
0
void Player::checkLoot()
{
	// Calculate loot area
	Rect lootArea = getRect();
	if(getWeapon() != NULL)	{
		// Add weapons width to loot area :NOTE: :TODO: Gives wrong result when the weapon is centered on the player etc...
		if(mFaceDirection == RIGHT)
			lootArea.right += getWeapon()->getWidth();
		else if(mFaceDirection == LEFT)
			lootArea.left -= getWeapon()->getWidth();
	}

	// Add some extra area
	lootArea.bottom += 20;
	lootArea.top -= 20;
	lootArea.left -= 20;
	lootArea.right += 20;

	// Find loot inside loot area
	Object* lootObject = getLevel()->findCollision(lootArea, getId(), LOOT);

	// If an object is found
	if(lootObject != NULL)
	{
		// If the object is loot
		if(lootObject->getType() == LOOT)	{
			// Cast and call equip()
			Loot* loot = dynamic_cast<Loot*>(lootObject);
			loot->equip(this);
		}
	}
}
Exemple #2
0
void player::use(int index){
	//WEAPON,ARMOR,CONSUMABLE,ETC
	Item tmp = load::getItemData(getItemList()->at(index).getID());
	if(tmp.getItemType() == "WEAPON"){
		getStat()->addAll(0-getWeapon().getiAtk(),0-getWeapon().getiDef(),0-getWeapon().getiMaxHp());
		getItemList()->at(index) = load::getItemData(getWeapon().getID());
		if(getItemList()->at(index).getID() == 1)delItem(index);
		setWeapon(tmp.getID());
		getStat()->addAll(tmp.getiAtk(),tmp.getiDef(),tmp.getiMaxHp());
		cout << "\n\tEquipe "<<tmp.getName()<<endl;
	}else if(tmp.getItemType() == "ARMOR"){
		getStat()->addAll(0-getArmor().getiAtk(),0-getArmor().getiDef(),0-getArmor().getiMaxHp());
		getItemList()->at(index) = load::getItemData(getArmor().getID());
		if(getItemList()->at(index).getID() == 2)delItem(index);
		setArmor(tmp.getID());
		getStat()->addAll(tmp.getiAtk(),tmp.getiDef(),tmp.getiMaxHp());
		cout << "\n\tEquipe "<<tmp.getName()<<endl;
	}else if(tmp.getItemType() == "CONSUMABLE"){
		getStat()->addAll(tmp.getiAtk(),tmp.getiDef(),tmp.getiMaxHp());
		getStat()->addHp(tmp.getiHp());
		delItem(index);
		cout << "\tUse "<<tmp.getName()<<endl;
	}else{
		cout << "\n\tCannot use "<<tmp.getName()<<endl;
	}
	getch();
}
Exemple #3
0
int UnitClass::getTimeToKill(Unit unit)
{
	int health = unit->totalHitPoints();

	BWAPI::WeaponType weapon = getWeapon(unit);

	int weaponDamage = weapon.damageAmount() + (weapon.damageFactor() * getPlayer()->getUpgradeLevel(weapon.upgradeType()));
	if(weaponDamage == 0)
		return 5000;

	int thisNumberOfShots = health / weaponDamage;

	if(weapon.damageType() == BWAPI::DamageTypes::Concussive)
	{
		if(unit->getType().size() == BWAPI::UnitSizeTypes::Large)
			thisNumberOfShots *= 4;
		else if(unit->getType().size() == BWAPI::UnitSizeTypes::Medium)
			thisNumberOfShots += thisNumberOfShots;
	}
	else if(weapon.damageType() == BWAPI::DamageTypes::Explosive)
	{
		if(unit->getType().size() == BWAPI::UnitSizeTypes::Small)
			thisNumberOfShots += thisNumberOfShots;
		else if(unit->getType().size() == BWAPI::UnitSizeTypes::Medium)
			thisNumberOfShots += thisNumberOfShots / 2;
	}

	if((BWAPI::Broodwar->getGroundHeight(getTilePosition()) - BWAPI::Broodwar->getGroundHeight(unit->getTilePosition())) < 0)
		thisNumberOfShots += thisNumberOfShots;

	return thisNumberOfShots * weapon.damageCooldown();
}
//end
void player_init(){
	int i = 0;
	
	Tile start = tile_start();
	Vec2d pos = {start.mBox.x,start.mBox.y};
	SDL_Rect bound = {PLAYER_FRAMEW*.2f,PLAYER_FRAMEW*.2f,PLAYER_FRAMEW*.6f, PLAYER_FRAMEH*.6f};

	Sprite *player_sprite = sprite_load(player_char_file,PLAYERW, PLAYERH, PLAYER_FRAMEW, PLAYER_FRAMEH);
	player_sprite->fpl = 9;
	animCurrent = WALK;
	player = entity_load(player_sprite,pos, 100, 100, 0 );
	slog("Player: X: %i Y: %i", player->position.x, player->position.y);

	playerBody.image = player->sprite;
	playerBody.image_slash = sprite_load("images/player/slash/body slash.png",PLAYERW, PLAYERH, PLAYER_FRAMEW, PLAYER_FRAMEH);
	playerBody.image_slash->fpl = 5;
	player->boundBox = bound;

	player->frame_horizontal = 1;
	player->frame_vertical = 2;
	player->think = player_think;
	player->update = player_update;
	player->player = true;
	player->team = TEAM_PLAYER;
	player->p_em = particle_em_new();

	weapon_load_all();
	armor_load_all();

	PlayerEquip.weapon = getWeapon("longsword");
	player->weapon = PlayerEquip.weapon;
	PlayerEquip.head = getArmor("head chain hood");
	PlayerEquip.chest = getArmor("chest chain");
}
// setActiveWeapon
// set weapon
void CWeaponComponent::setActiveWeapon( const char* weaponName )
{
	if ( m_activeWeapon )
		m_activeWeapon->m_obj->setVisible(false);

	m_activeWeapon = getWeapon(weaponName);
}
Exemple #6
0
	const Vector3D &Mission::Target::getPos() const
	{
		switch(type)
		{
		case TargetUnit:
			{
				const Unit *p = getUnit();
				if (p)
					return p->Pos;
			}
			break;
		case TargetWeapon:
			{
				const Weapon *p = getWeapon();
				if (p)
					return p->Pos;
			}
			break;
		case TargetNone:
		case TargetStatic:
			return Pos;
		};

		return Pos;
	}
void WeaponManager::enableWeapon(Weapon::WeaponType wt) {
    // First check if weapon is not already available
    for (unsigned i = 0; i != availableWeapons_.size(); ++i) {
        if (wt == availableWeapons_.get(i)->getWeaponType())
            return;
    }

    // Then get weapon
    Weapon *pWeapon = getWeapon(wt);

    // removes it from cache
    for (std::vector < Weapon * >::iterator it = preFetch_.begin();
         it != preFetch_.end(); it++) {
             if (pWeapon == *it) {
                preFetch_.erase(it);
                break;
             }
    }

    // make it available
    for (unsigned i = 0; i != availableWeapons_.size(); ++i) {
        if (pWeapon->getWeaponType() < availableWeapons_.get(i)->getWeaponType()) {
            // The new weapon is inserted in the order of the WeaponType constants
            availableWeapons_.insertAt(i, pWeapon);
            return;
        }
    }
    // If we're here, it's because the new weapon comes at the end of the list
    availableWeapons_.add(pWeapon);
}
Exemple #8
0
void ServerPlayer::throwAllEquips(){

    room->throwCard(getWeapon(), true);
    room->throwCard(getArmor(), true);
    room->throwCard(getDefensiveHorse(), true);
    room->throwCard(getOffensiveHorse(), true);
}
// addWeaponToInventory
// add to component
void CWeaponComponent::addWeaponToInventory( const char* weaponName )
{
	SWeapon* weapon = getWeapon(weaponName);

	if ( weapon == NULL )
	{
		CGameConfig::SWeaponInfo* wpInfo = CGameConfig::getInstance()->getWeaponByName(weaponName);
		if ( wpInfo )
		{
			CGameObject *wpObj = new CGameObject(NULL);
			
			// load model
			if ( wpInfo->model.empty() == false )
			{
				CColladaMeshComponent *collada = new CColladaMeshComponent(wpObj);
				collada->loadScene(wpInfo->model.c_str());
				wpObj->addComponent(collada);
				wpObj->initComponent();			
			}
			
			wpObj->setVisible(false);
			wpObj->setParent(m_gameObject);

			m_weapons.push_back( SWeapon() );
			SWeapon& w = m_weapons.back();

			w.m_obj = wpObj;
			w.m_num = 1;
			w.m_info = wpInfo;

			// find type of weapon
			for (int i = (int)Unknown; i < (int)NumWPType; i++)
			{
				if ( wpInfo->type == k_weaponTypeString[i] )
				{
					w.m_type = (EWeaponType)i;
					break;
				}
			}

			switch (w.m_type)
			{
			case Gun:
				{
					CGunComponent *gun = new CGunComponent(wpObj, wpInfo);
					wpObj->addComponent(gun);
				}
				break;
			}

			wpObj->initComponent();
		}
	}
	else
	{
		weapon->m_num++;
	}
}
Exemple #10
0
// By station
Weapon* Stores::releaseWeapon(const unsigned int s)
{
   Weapon* flyout = 0;

   Weapon* wpn = getWeapon(s);
   if (wpn != 0) {
      flyout = releaseWeapon(wpn);
      wpn->unref();
   }

   return flyout;
}
// By station
Weapon* Stores::prereleaseWeapon(const unsigned int s)
{
   Weapon* flyout = nullptr;

   Weapon* wpn = getWeapon(s);
   if (wpn != nullptr) {
      flyout = prereleaseWeapon(wpn);
      wpn->unref();
   }

   return flyout;
}
Exemple #12
0
	void Unit2D::draw(float accumulator, float timeStep, const GameShader& gameShader) {
		if (isActive()) {
			// Draw body.
			float diameter = 2 * getRadius();
			float angle = getDirection();
			
			gameShader.glUseProgram();
			gameShader.setGlColorU(1, 1, 1);
			gameShader.setGlGlobalPositionU(getPosition());
			gameShader.setGlLocalAngleU(getDirection());
			animation_.draw(timeStep, 0, 0, diameter, diameter, gameShader);
			Position grip = getGrip();
			getWeapon()->draw(timeStep, grip.x, grip.y, gameShader);
		}
	}
Exemple #13
0
bool Inventory::addItem(Item* item)
{
	if (item->isWeapon() && getWeapon() == NULL) {
		weapon = (Weapon*)item;
		weapon->setWielder(ch);
		return true;
	}

	int slot = getFreeSlot();
	if (slot == -1)
		return false;

	items[slot] = item;
	return true;
}
Exemple #14
0
	void WPN_MoveShots(World& world, float elapsedTime)
	{
		auto shot = d6Shots.begin();

		while (shot != d6Shots.end())
		{
			const Weapon& weapon = shot->getWeapon();
			shot->move(elapsedTime);

			Hit hit = WPN_ShotPlayerCollision(*shot, world.getPlayers());
			if (!hit.hit)
			{
				hit = WPN_ShotWallCollision(*shot, world.getLevel());
			}

			if (hit.hit)
			{
				WPN_Boom(*shot, world.getPlayers(), hit.player, world.getSpriteList(), world.getFireList());
				const Vector shotCentre = shot->getCentre();
				
				Sprite boom(weapon.boomAnimation, weapon.textures.boom);
				boom.setPosition(shotCentre - Vector(0.5f, 0.5f), 0.6f)
					.setSpeed(2.0f)
					.setLooping(AnimationLooping::OnceAndRemove)
					.setOrientation(shot->getOrientation())
					.setAlpha(0.6f);

				SpriteList::Iterator boomSprite = world.getSpriteList().addSprite(boom);

				if (shot->getPlayer().hasPowerfulShots())
					boomSprite->setGrow(weapon.expGrow * 1.2f);
				else
					boomSprite->setGrow(weapon.expGrow);
				weapon.boomSample.play();
				if (weapon.boom > 0)
				{
					boomSprite->setNoDepth(true);
				}
				
				shot = WPN_RemoveShot(shot, world.getSpriteList());
			}
			else
			{
				++shot;
			}
		}
	}
const Weapon* StoresMgr::getCurrentWeapon() const
{
   // Get the selected station's weapon
   const Weapon* wpn = getWeapon();

   if (wpn == nullptr) {
      // If not found then check to see if the selected station
      // was really a Stores class object.  If so then ask it
      // for its selected station's weapon
      const ExternalStore* es = getExternalStore();
      if (es != nullptr) {
         const Stores* ss = dynamic_cast<const Stores*>( es );
         if (ss != nullptr) wpn = ss->getWeapon();
         es->unref();
      }
   }

   return wpn;
}
Exemple #16
0
GameObj* GOBox::shoot()
{
	if (getIsWeapon())
	{
		Weapon* w = getWeapon();

		if (getIsRangedWeapon()){
			
			if (((RangedWeapon *)w)->readyToShoot())
			{
				double rbDepth = getDepth() / 2 + ((RangedWeapon *)w)->getPDepth()/1.5 + 0.6f;
				btTransform* rbTrans = &getRigidBody()->getWorldTransform();
				btVector3 boxRot = rbTrans->getBasis()[2];
				boxRot.normalize();
				btVector3 correctedDisplacement = boxRot * -rbDepth; // /2
				double x = rbTrans->getOrigin().getX();// + 0.5 - w->getPWidth();
				double y = rbTrans->getOrigin().getY();
				double z = rbTrans->getOrigin().getZ() + correctedDisplacement.getZ();

				GameObj* proj = new Projectile(x, y, z, rbTrans->getRotation().getX(), rbTrans->getRotation().getY(), rbTrans->getRotation().getZ(), rbTrans->getRotation().getW(),
					((RangedWeapon *)w)->getPMass(), ((RangedWeapon *)w)->getPWidth(), ((RangedWeapon *)w)->getPHeight(), ((RangedWeapon *)w)->getPDepth());
				proj->setDamage(w->getDamage());
				//std::cout << "shoot: " << ((RangedWeapon *)w)->getPBlockType() << std::endl;
				proj->setBlockType(((RangedWeapon *)w)->getPBlockType());
				((RangedWeapon *)w)->setLastShot();
				((Projectile*)proj)->initForce = ((RangedWeapon *)w)->getPInitForce();


				return proj;
			}

		}

	}
	return nullptr;
}
Exemple #17
0
bool Player::isNude() const{
    return getHandcardNum() == 0 && getWeapon() == NULL && getArmor() == NULL
            && getDefensiveHorse() == NULL && getOffensiveHorse() == NULL;
}
WeaponItem* WeaponManager::getItem(std::string name) {
	return new WeaponItem(getWeapon(name), getCollision(name));
}
Exemple #19
0
void		HumanB::attack( void ) {
	std::cout << getName() << " attacks with his " << getWeapon() << std::endl;
}