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); } } }
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(); }
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); }
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); }
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++; } }
// 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; }
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); } }
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; }
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; }
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; }
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)); }
void HumanB::attack( void ) { std::cout << getName() << " attacks with his " << getWeapon() << std::endl; }