bool StudioModel::PostLoadModel( const char *modelname ) { MDLCACHE_CRITICAL_SECTION_( g_pMDLCache ); CStudioHdr *pStudioHdr = GetStudioHdr(); if (pStudioHdr == NULL) return false; SetSequence (0); SetController (0, 0.0f); SetController (1, 0.0f); SetController (2, 0.0f); SetController (3, 0.0f); SetBlendTime( DEFAULT_BLEND_TIME ); // SetHeadTurn( 1.0f ); // FIXME:!!! int n; for (n = 0; n < pStudioHdr->numbodyparts(); n++) { SetBodygroup (n, 0); } SetSkin (0); /* Vector mins, maxs; ExtractBbox (mins, maxs); if (mins[2] < 5.0f) m_origin[2] = -mins[2]; */ return true; }
void CAIVehicle::PlayerFrob( idPlayer *player ) { idVec3 origin; idMat3 axis; // =============== DISMOUNT =============== if( m_Controller.GetEntity() ) { if( m_Controller.GetEntity() == player ) { player->Unbind(); SetController( NULL ); } } // =============== MOUNT =============== else { // attach player to the joint GetJointWorldTransform( m_RideJoint, gameLocal.time, origin, axis ); // put the player in a crouch, so their view is low to the animal // without actually clipping into it idPhysics_Player *playerPhys = ( idPhysics_Player * ) player->GetPhysics(); // TODO: look up PMF_DUCKED somehow (make those flags statics in the idPhysics_Player class?) // for now, using 1 since we know that is PMF_DUCKED // Or, we could move mount and dismount to idPhysics_Player... playerPhys->SetMovementFlags( playerPhys->GetMovementFlags() | 1 ); player->SetOrigin( origin + m_RideOffset * axis ); player->BindToJoint( this, m_RideJoint, true ); SetController( player ); } }
/* <10893> ../cstrike/dlls/animating.cpp:180 */ void CBaseAnimating::InitBoneControllers(void) { void *pmodel = GET_MODEL_PTR(ENT(pev)); SetController(pmodel, pev, 0, 0); SetController(pmodel, pev, 1, 0); SetController(pmodel, pev, 2, 0); SetController(pmodel, pev, 3, 0); }
void Ship::Load(Serializer::Reader &rd, Space *space) { DynamicBody::Load(rd, space); // needs fixups m_angThrusters = rd.Vector3d(); m_thrusters = rd.Vector3d(); m_wheelTransition = rd.Int32(); m_wheelState = rd.Float(); m_launchLockTimeout = rd.Float(); m_testLanded = rd.Bool(); m_flightState = FlightState(rd.Int32()); m_alertState = AlertState(rd.Int32()); m_lastFiringAlert = rd.Double(); m_hyperspace.dest = SystemPath::Unserialize(rd); m_hyperspace.countdown = rd.Float(); for (int i=0; i<ShipType::GUNMOUNT_MAX; i++) { m_gunState[i] = rd.Int32(); m_gunRecharge[i] = rd.Float(); m_gunTemperature[i] = rd.Float(); } m_ecmRecharge = rd.Float(); m_shipFlavour.Load(rd); m_type = &ShipType::types[m_shipFlavour.id]; m_dockedWithPort = rd.Int32(); m_dockedWithIndex = rd.Int32(); m_equipment.InitSlotSizes(m_shipFlavour.id); m_equipment.Load(rd); Init(); m_stats.hull_mass_left = rd.Float(); // must be after Init()... m_stats.shield_mass_left = rd.Float(); if(rd.Int32()) m_curAICmd = AICommand::Load(rd); else m_curAICmd = 0; m_aiMessage = AIError(rd.Int32()); SetFuel(rd.Double()); m_stats.fuel_tank_mass_left = GetShipType().fuelTankMass * GetFuel(); m_reserveFuel = rd.Double(); UpdateStats(); // this is necessary, UpdateStats() in Ship::Init has wrong values of m_thrusterFuel after Load m_controller = 0; const ShipController::Type ctype = static_cast<ShipController::Type>(rd.Int32()); if (ctype == ShipController::PLAYER) SetController(new PlayerShipController()); else SetController(new ShipController()); m_controller->Load(rd); m_equipment.onChange.connect(sigc::mem_fun(this, &Ship::OnEquipmentChange)); }
func Launch(object clonk, int x, int y) { shooter = clonk; SetController(clonk->GetOwner()); TargetAngle = Angle(0, 0, x, y); ImaCharginMaLazor(0, 0, Sin(TargetAngle, MaxLength), Cos(TargetAngle, MaxLength) * -1, TargetAngle); clonk->Charge(this, "ChargeStop", ChargeDuration, {}); AddEffect("PreLazor", this, 1, 2, this, nil); Sound("Flash::charge", nil, nil, nil, nil, nil, 20); }
Ship::Ship(const ShipType::Id &shipId): DynamicBody(), m_flightState(FLYING), m_alertState(ALERT_NONE), m_controller(0), m_thrusterFuel(1.0), m_reserveFuel(0.0), m_landingGearAnimation(nullptr) { Properties().Set("flightState", EnumStrings::GetString("ShipFlightState", m_flightState)); Properties().Set("alertStatus", EnumStrings::GetString("ShipAlertStatus", m_alertState)); m_lastAlertUpdate = 0.0; m_lastFiringAlert = 0.0; m_shipNear = false; m_shipFiring = false; m_testLanded = false; m_launchLockTimeout = 0; m_wheelTransition = 0; m_wheelState = 0; m_dockedWith = nullptr; m_dockedWithPort = 0; SetShipId(shipId); m_thrusters.x = m_thrusters.y = m_thrusters.z = 0; m_angThrusters.x = m_angThrusters.y = m_angThrusters.z = 0; InitEquipSet(); m_hyperspace.countdown = 0; m_hyperspace.now = false; for (int i=0; i<ShipType::GUNMOUNT_MAX; i++) { m_gun[i].state = 0; m_gun[i].recharge = 0; m_gun[i].temperature = 0; } m_ecmRecharge = 0; m_shieldCooldown = 0.0f; m_curAICmd = 0; m_aiMessage = AIERROR_NONE; m_decelerating = false; SetModel(m_type->modelName.c_str()); SetLabel("UNLABELED_SHIP"); m_skin.SetRandomColors(Pi::rng); m_skin.SetDecal(m_type->manufacturer); m_skin.Apply(GetModel()); if(GetModel()->SupportsPatterns()) GetModel()->SetPattern(Pi::rng.Int32(0, GetModel()->GetNumPatterns()-1)); Init(); SetController(new ShipController()); }
Player::Player(size_t id, Position initial_position, PT::PlayerType type, PlayerControllerPtr controller) : m_id(id), m_position(initial_position), m_direction(0,0), m_type(type), m_current_action_start_time(SDL_GetTicks()), m_is_dying(false), m_all_bomb_count(g_bomb_player_has_at_start), m_used_bomb_count(0), m_flame_range(g_flame_range_player_has_at_start) { SetController(controller); }
Player::Player(ShipType::Id shipId): Ship(shipId) { SetController(new PlayerShipController()); InitCockpit(); lua_State *l = Lua::manager->GetLuaState(); LUA_DEBUG_START(l); LuaObject<Player>::PushToLua(this); lua_pushcclosure(l, onEquipChangeListener, 1); LuaRef lr(Lua::manager->GetLuaState(), -1); ScopedTable(m_equipSet).CallMethod("AddListener", lr); lua_pop(l, 1); LUA_DEBUG_END(l, 0); }
// main function int main() { // Initialize the controls // Constructor is ModelerControl(name, minimumvalue, maximumvalue, // stepsize, defaultvalue) // You will want to modify this to accommodate your model. ModelerControl controls[NUM_CONTROLS+1]; // Set model controllers SetController( controls ); // Initialize the modeler application with your model and the // appropriate array of controls. ModelerApplication::Instance()->Init( &createModel, controls, NUM_CONTROLS); // make sure we give back the memory to older OSs that don't // clear your memory pool after shutdown. int Result = ModelerApplication::Instance()->Run(); delete ModelerApplication::Instance(); return Result; }
Ship::Ship(ShipType::Id shipId): DynamicBody(), m_controller(0), m_thrusterFuel(1.0), m_reserveFuel(0.0) { m_flightState = FLYING; m_alertState = ALERT_NONE; m_lastFiringAlert = 0.0; m_testLanded = false; m_launchLockTimeout = 0; m_wheelTransition = 0; m_wheelState = 0; m_dockedWith = 0; m_dockedWithPort = 0; m_shipFlavour = ShipFlavour(shipId); m_type = &ShipType::types[m_shipFlavour.id]; m_thrusters.x = m_thrusters.y = m_thrusters.z = 0; m_angThrusters.x = m_angThrusters.y = m_angThrusters.z = 0; m_equipment.InitSlotSizes(shipId); m_hyperspace.countdown = 0; m_hyperspace.now = false; for (int i=0; i<ShipType::GUNMOUNT_MAX; i++) { m_gunState[i] = 0; m_gunRecharge[i] = 0; m_gunTemperature[i] = 0; } m_ecmRecharge = 0; SetLabel(m_shipFlavour.regid); m_curAICmd = 0; m_aiMessage = AIERROR_NONE; m_decelerating = false; m_equipment.onChange.connect(sigc::mem_fun(this, &Ship::OnEquipmentChange)); Init(); SetController(new ShipController()); }
/* <10837> ../cstrike/dlls/animating.cpp:171 */ float CBaseAnimating::SetBoneController(int iController, float flValue) { void *pmodel = GET_MODEL_PTR(ENT(pev)); return SetController(pmodel, pev, iController, flValue); }
Player::Player(ShipType::Id shipId): Ship(shipId) { SetController(new PlayerShipController()); m_killCount = 0; m_knownKillCount = 0; }
bool StudioModel::PostLoadModel( char *modelname ) { // preload textures if (m_pstudiohdr->numtextures == 0) { char texturename[256]; strcpy( texturename, modelname ); strcpy( &texturename[strlen(texturename) - 4], "T.mdl" ); m_ptexturehdr = LoadModel( texturename ); if (!m_ptexturehdr) { FreeModel (); return false; } m_owntexmodel = true; } else { m_ptexturehdr = m_pstudiohdr; m_owntexmodel = false; } // preload animations if (m_pstudiohdr->numseqgroups > 1) { for (int i = 1; i < m_pstudiohdr->numseqgroups; i++) { char seqgroupname[256]; strcpy( seqgroupname, modelname ); sprintf( &seqgroupname[strlen(seqgroupname) - 4], "%02d.mdl", i ); m_panimhdr[i] = LoadModel( seqgroupname ); if (!m_panimhdr[i]) { FreeModel (); return false; } } } SetSequence (0); SetController (0, 0.0f); SetController (1, 0.0f); SetController (2, 0.0f); SetController (3, 0.0f); SetMouth (0.0f); int n; for (n = 0; n < m_pstudiohdr->numbodyparts; n++) SetBodygroup (n, 0); SetSkin (0); /* vec3_t mins, maxs; ExtractBbox (mins, maxs); if (mins[2] < 5.0f) m_origin[2] = -mins[2]; */ return true; }
void Ship::LoadFromJson(const Json::Value &jsonObj, Space *space) { DynamicBody::LoadFromJson(jsonObj, space); if (!jsonObj.isMember("ship")) throw SavedGameCorruptException(); Json::Value shipObj = jsonObj["ship"]; if (!shipObj.isMember("ang_thrusters")) throw SavedGameCorruptException(); if (!shipObj.isMember("thrusters")) throw SavedGameCorruptException(); if (!shipObj.isMember("wheel_transition")) throw SavedGameCorruptException(); if (!shipObj.isMember("wheel_state")) throw SavedGameCorruptException(); if (!shipObj.isMember("launch_lock_timeout")) throw SavedGameCorruptException(); if (!shipObj.isMember("test_landed")) throw SavedGameCorruptException(); if (!shipObj.isMember("flight_state")) throw SavedGameCorruptException(); if (!shipObj.isMember("alert_state")) throw SavedGameCorruptException(); if (!shipObj.isMember("last_firing_alert")) throw SavedGameCorruptException(); if (!shipObj.isMember("hyperspace_destination")) throw SavedGameCorruptException(); if (!shipObj.isMember("hyperspace_countdown")) throw SavedGameCorruptException(); if (!shipObj.isMember("guns")) throw SavedGameCorruptException(); if (!shipObj.isMember("ecm_recharge")) throw SavedGameCorruptException(); if (!shipObj.isMember("ship_type_id")) throw SavedGameCorruptException(); if (!shipObj.isMember("docked_with_port")) throw SavedGameCorruptException(); if (!shipObj.isMember("index_for_body_docked_with")) throw SavedGameCorruptException(); if (!shipObj.isMember("hull_mass_left")) throw SavedGameCorruptException(); if (!shipObj.isMember("shield_mass_left")) throw SavedGameCorruptException(); if (!shipObj.isMember("shield_cooldown")) throw SavedGameCorruptException(); if (!shipObj.isMember("ai_message")) throw SavedGameCorruptException(); if (!shipObj.isMember("thruster_fuel")) throw SavedGameCorruptException(); if (!shipObj.isMember("reserve_fuel")) throw SavedGameCorruptException(); if (!shipObj.isMember("controller_type")) throw SavedGameCorruptException(); if (!shipObj.isMember("name")) throw SavedGameCorruptException(); m_skin.LoadFromJson(shipObj); m_skin.Apply(GetModel()); // needs fixups JsonToVector(&m_angThrusters, shipObj, "ang_thrusters"); JsonToVector(&m_thrusters, shipObj, "thrusters"); m_wheelTransition = shipObj["wheel_transition"].asInt(); m_wheelState = StrToFloat(shipObj["wheel_state"].asString()); m_launchLockTimeout = StrToFloat(shipObj["launch_lock_timeout"].asString()); m_testLanded = shipObj["test_landed"].asBool(); m_flightState = static_cast<FlightState>(shipObj["flight_state"].asInt()); m_alertState = static_cast<AlertState>(shipObj["alert_state"].asInt()); Properties().Set("flightState", EnumStrings::GetString("ShipFlightState", m_flightState)); Properties().Set("alertStatus", EnumStrings::GetString("ShipAlertStatus", m_alertState)); m_lastFiringAlert = StrToDouble(shipObj["last_firing_alert"].asString()); Json::Value hyperspaceDestObj = shipObj["hyperspace_destination"]; m_hyperspace.dest = SystemPath::FromJson(hyperspaceDestObj); m_hyperspace.countdown = StrToFloat(shipObj["hyperspace_countdown"].asString()); m_hyperspace.duration = 0; Json::Value gunArray = shipObj["guns"]; if (!gunArray.isArray()) throw SavedGameCorruptException(); assert(ShipType::GUNMOUNT_MAX == gunArray.size()); for (unsigned int i = 0; i < ShipType::GUNMOUNT_MAX; i++) { Json::Value gunArrayEl = gunArray[i]; if (!gunArrayEl.isMember("state")) throw SavedGameCorruptException(); if (!gunArrayEl.isMember("recharge")) throw SavedGameCorruptException(); if (!gunArrayEl.isMember("temperature")) throw SavedGameCorruptException(); m_gun[i].state = gunArrayEl["state"].asUInt(); m_gun[i].recharge = StrToFloat(gunArrayEl["recharge"].asString()); m_gun[i].temperature = StrToFloat(gunArrayEl["temperature"].asString()); } m_ecmRecharge = StrToFloat(shipObj["ecm_recharge"].asString()); SetShipId(shipObj["ship_type_id"].asString()); // XXX handle missing thirdparty ship m_dockedWithPort = shipObj["docked_with_port"].asInt(); m_dockedWithIndex = shipObj["index_for_body_docked_with"].asUInt(); Init(); m_stats.hull_mass_left = StrToFloat(shipObj["hull_mass_left"].asString()); // must be after Init()... m_stats.shield_mass_left = StrToFloat(shipObj["shield_mass_left"].asString()); m_shieldCooldown = StrToFloat(shipObj["shield_cooldown"].asString()); m_curAICmd = 0; m_curAICmd = AICommand::LoadFromJson(shipObj); m_aiMessage = AIError(shipObj["ai_message"].asInt()); SetFuel(StrToDouble(shipObj["thruster_fuel"].asString())); m_stats.fuel_tank_mass_left = GetShipType()->fuelTankMass * GetFuel(); m_reserveFuel = StrToDouble(shipObj["reserve_fuel"].asString()); PropertyMap &p = Properties(); p.Set("hullMassLeft", m_stats.hull_mass_left); p.Set("hullPercent", 100.0f * (m_stats.hull_mass_left / float(m_type->hullMass))); p.Set("shieldMassLeft", m_stats.shield_mass_left); p.Set("fuelMassLeft", m_stats.fuel_tank_mass_left); p.PushLuaTable(); lua_State *l = Lua::manager->GetLuaState(); lua_getfield(l, -1, "equipSet"); m_equipSet = LuaRef(l, -1); lua_pop(l, 2); UpdateLuaStats(); m_controller = 0; const ShipController::Type ctype = static_cast<ShipController::Type>(shipObj["controller_type"].asInt()); if (ctype == ShipController::PLAYER) SetController(new PlayerShipController()); else SetController(new ShipController()); m_controller->LoadFromJson(shipObj); m_navLights->LoadFromJson(shipObj); m_shipName = shipObj["name"].asString(); Properties().Set("shipName", m_shipName); }
func Fall(int from_plr) { SetOwner(from_plr); SetController(from_plr); Launch(RandomX(-10,10)+180); }
// script events void CAIVehicle::Event_ClearController( void ) { SetController( NULL ); }
func Incineration(int caused_by) { SetController(caused_by); Fuse(); }
Player::Player(ShipType::Id shipId): Ship(shipId) { SetController(new PlayerShipController()); InitCockpit(); registerEquipChangeListener(this); }
public func Activate(caster, real_caster) { // Zaubernden Clonk ermitteln var clonk = caster; if (real_caster) clonk = real_caster; // Richtungsvorzeichen ermitteln var dir_sign = -1; if (GetDir(caster) == DIR_Right()) dir_sign = +1; // Evtl. mit Flint kombinieren var obj; if (obj = FindContents(FLNT, clonk)) { // Holz erzeugen, anzünden und in Guckrichtung schleudern var wood = CreateObject(WOOD, 5*dir_sign, 0, -1); Incinerate(wood); // Richtigen Controller setzen SetController(GetController(clonk),wood); SetXDir(40*dir_sign, wood); SetYDir(-10, wood); // Flint verbrauchen RemoveObject(obj); } // Evtl. mit Pfeil kombinieren else { obj = FindContents(ARRW, clonk); if(!obj) if(FindContents(ARWP, clonk)) obj = FindContents(ARWP, clonk)->GetItem(); if(obj) { // Ein paar Objekte schleudern var fling_cnt = RandomX(4, 10); var fling_obj; while (fling_obj = FindObject(0, 0, 0, -1, -1, OCF_InFree(), 0, 0, NoContainer(), fling_obj)) { // Zu weit weg vom Clonk? if (ObjectDistance(clonk, fling_obj) > 5*GetDefCoreVal("Width", "DefCore", GetID(caster))) break; // Der Wolf konnte keine Steinhütten wegblasen - Clonks können keine Hütten mit Fundament wegblasen if (!LocalN("basement", fling_obj)) { var pBasement = Local(9, fling_obj); if (GetType(pBasement) != C4V_C4Object()) pBasement=0; if (pBasement) if (!PrivateCall(pBasement, "BasementID")) pBasement=0; if (!pBasement) { SetXDir(dir_sign*Min(80, 80*350/GetMass(fling_obj)), fling_obj); SetYDir(-Min(20, 20/GetMass(fling_obj)), fling_obj); // Bei Objekten noch den Controller anpassen if(GetCategory(fling_obj) & C4D_Object()) SetController(GetController(clonk),fling_obj); } } // Schon genügend Objekte geschleudert? if (!fling_cnt--) break; } if (!Contained(clonk)) { Fling(clonk, 8*dir_sign, -2); } // Pfeil verbrauchen RemoveObject(obj); } // Sonst normale Wirkung else { AddEffect("WindUSpell", 0, 104, 50, 0, GetID(), GetDir(caster)); Sound("Wind2"); } } RemoveObject(); return(1); }
// script events void CAIVehicle::Event_SetController( idPlayer *player ) { SetController( player ); }