inline void grenade_StoC::handle() { #if DC_CLIENT if (owner == ClientState::player_agent.agent_id) return; Grenade* g = Particle::grenade_list->create(); if (g == NULL) return; g->set_state(p, m); g->owner = AgentID(this->owner); g->ttl_max = int(ttl_max); g->type = int(type); #endif }
void GrenadeWeapon::fireMissile(float_t angle, float_t power, Vector2 playerLocation) { Grenade *grenade = new Grenade(); grenade->setDamage(20); grenade->setExplosionRadius(50); grenade->setGravity(.15); grenade->setNumberOfBounces(GRENADE_BOUNCES); grenade->setWidth(2); grenade->setHeight(2); grenade->setPosition(playerLocation.getX() + (grenade->getMissileRadius() + 50) * cos(angle / 180 * M_PI), playerLocation.getY() + (grenade->getMissileRadius() + 50) * sin(angle / 180 * M_PI)); grenade->setVelocity(mMaxShotPower * power * cos(angle / 180 * M_PI), mMaxShotPower * power * sin(angle / 180 * M_PI)); MissileManager::GetInstance()->AddMissile(grenade); }
void Player::update_stand() { if(controller.button_was_pressed(USE_BUTTON)) { Entity* obj = find_useable_entity(); if (obj) obj->use(); return; } if(controller.button_was_pressed(JUMP_BUTTON) && controller.get_axis_state(Y_AXIS) > 1.0f) { set_jump_up_begin(); } else if (controller.button_was_pressed(AIM_BUTTON)) { // TODO remove me later, just here for testing Grenade* grenade = new Grenade(); grenade->set_pos(get_pos() + Vector(50, -300)); grenade->set_velocity(Vector(20, -10)); Sector::current()->add(grenade); sprite.set_action("PullGun"); state = PULL_GUN; } else if (controller.get_axis_state(X_AXIS) < 0) { if(get_direction() == WEST) set_walk(WEST); else set_turnaround(); } else if (controller.get_axis_state(X_AXIS) > 0) { if(get_direction() == EAST) set_walk(EAST); else set_turnaround(); } }
void World::Advance(float dt) { SPADES_MARK_FUNCTION(); for(size_t i = 0; i < players.size(); i++) if(players[i]) players[i]->Update(dt); std::vector<std::list<Grenade *>::iterator> removedGrenades; for(std::list<Grenade *>::iterator it = grenades.begin(); it != grenades.end(); it++){ Grenade *g = *it; if(g->Update(dt)){ removedGrenades.push_back(it); } } for(size_t i = 0; i < removedGrenades.size(); i++) grenades.erase(removedGrenades[i]); time += dt; }
//グレネード生成 int CharacterScriptInterface::GrenadeGenerate( lua_State * l_) { Character* character = static_cast< Character* >( lua_touserdata( l_, 1 ) ); //printf("aaaa\n"); float spx = lua_tonumber(l_, 2); float spy = lua_tonumber(l_, 3); float svx= lua_tonumber(l_, 4); float svy= lua_tonumber(l_, 5); float fs = lua_tonumber(l_, 6); int da = lua_tonumber(l_, 7); u32 ra = lua_tonumber(l_, 8); u32 cr = lua_tonumber(l_, 9); float bvx = lua_tonumber(l_, 10); float bvy = lua_tonumber(l_, 11); u32 sf = lua_tonumber(l_, 12); int rbx = lua_tonumber(l_, 13); int rby = lua_tonumber(l_, 14); u32 rs = lua_tonumber(l_, 15); Grenade *gre; gre = new Grenade(); gre->Initialize(); gre->setGeneObjType(character->getObjType()); gre->setPosition(LVector3(spx,spy,0)); gre->setVelocity(LVector3(svx,svy,0)); gre->setFallSpeed(fs); gre->setDirection(character->getDirection()); gre->setAttackParam(da,ra,cr,LVector3(bvx,bvy,0),sf); gre->setRandBrow(rbx,rby); gre->setRandStun(rs); return 0; }