コード例 #1
0
ファイル: ObjectModule.cpp プロジェクト: CyberSys/openrw
bool game_character_in_area_on_foot(const ScriptArguments& args)
{
	RW_UNIMPLEMENTED("game_character_in_area_on_foot");
	RW_UNUSED(args);
	/// @todo
	return false;
}
コード例 #2
0
ファイル: ObjectModule.cpp プロジェクト: CyberSys/openrw
void game_create_character_as_passenger(const ScriptArguments& args)
{
	auto vehicle = static_cast<VehicleObject*>(args.getObject<VehicleObject>(0));
	auto type = args[1].integerValue();
	RW_UNUSED(type);
	RW_UNIMPLEMENTED("game_create_character_as_passenger(): character type");
	auto id = args[2].integerValue();
	auto seat = args[3].integerValue();

	auto character = args.getWorld()->createPedestrian(id, vehicle->getPosition() + spawnMagic);
	new DefaultAIController(character);

	if (seat <= -1) {
		for (seat = 0; seat < static_cast<int>(vehicle->info->seats.size()); seat++) {
			if (vehicle->getOccupant(seat) == nullptr && !vehicle->isOccupantDriver(seat)) {
				break;
			}
		}
	} else {
		/// @todo 0 - passenger seat (or back seat of bike); 1 - left rear seat; 2 - right rear seat
		seat++;
	}

	RW_CHECK(seat < static_cast<int>(vehicle->info->seats.size()), "Seat index too high");
	RW_CHECK(vehicle->getOccupant(seat) == nullptr, "Seat is not free");
	RW_CHECK(vehicle->isOccupantDriver(seat) == false, "Seat is not a passenger seat");

	character->setCurrentVehicle(vehicle, seat);
	vehicle->setOccupant(seat, character);

	*args[4].globalInteger = character->getGameObjectID();
}
コード例 #3
0
ファイル: ObjectModule.cpp プロジェクト: CyberSys/openrw
bool game_is_vehicle_in_water(const ScriptArguments& args)
{
	RW_UNIMPLEMENTED("game_is_vehicle_in_water");
	RW_UNUSED(args);
	/// @todo
	return false;
}
コード例 #4
0
ファイル: GameWorld.cpp プロジェクト: CyberSys/openrw
PickupObject* GameWorld::createPickup(const glm::vec3& pos, int id, int type)
{
	auto modelInfo = data->findObjectType<ObjectData>(id);

	data->loadDFF(modelInfo->modelName + ".dff");
	data->loadTXD(modelInfo->textureName + ".txd");

	PickupObject* pickup = nullptr;
	auto pickuptype = (PickupObject::PickupType)type;

	// Attempt to find an InventoryItem associated with this model
	auto it = std::find_if(
	    inventoryItems.begin(), inventoryItems.end(),
	    [=](InventoryItem* itm) { return itm->getModelID() == id; });

	// If nothing, create a generic pickup instead of an item pickup
	if (it != inventoryItems.end()) {
		pickup = new ItemPickup(this, pos, pickuptype, *it);
	}
	else {
		RW_UNIMPLEMENTED("Non-weapon pickups");
		pickup = new PickupObject(this, pos, id, pickuptype);
	}

	pickupPool.insert(pickup);
	allObjects.push_back(pickup);

	return pickup;
}
コード例 #5
0
ファイル: ObjectModule.cpp プロジェクト: CyberSys/openrw
bool game_vehicle_in_air(const ScriptArguments& args)
{
	/// @todo IS vehicle in air.
	auto vehicle = static_cast<VehicleObject*>(args.getObject<VehicleObject>(0));
	RW_UNUSED(vehicle);
	RW_UNIMPLEMENTED("game_vehicle_in_air()");
	return false;
}
コード例 #6
0
ファイル: ObjectModule.cpp プロジェクト: CyberSys/openrw
void game_get_vehicle_health(const ScriptArguments& args)
{
	RW_UNIMPLEMENTED("game_get_vehicle_health");
	auto vehicle = static_cast<VehicleObject*>(args.getObject<VehicleObject>(0));
	if (vehicle) {
		/// @todo
		*args[1].globalReal = 1000.f;
	}
}
コード例 #7
0
ファイル: ObjectModule.cpp プロジェクト: CyberSys/openrw
bool game_is_boat(const ScriptArguments& args)
{
	RW_UNUSED(args);
	RW_UNIMPLEMENTED("game_is_boat()");
	/*auto vehicle = (VehicleObject*)(*args[0].handle);
	 *	if( vehicle )
	 *	{
	 *		return vehicle->vehicle->type == VehicleData::BOAT;
}*/
	return false;
}
コード例 #8
0
ファイル: ObjectModule.cpp プロジェクト: CyberSys/openrw
void game_create_weapon_pickup(const ScriptArguments& args)
{
	glm::vec3 pos (args[3].real, args[4].real, args[5].real);
	int id = args.getModel(0);
	int type = args[1].integer;
	int ammo = args[2].integer;
	RW_UNUSED(ammo);
	RW_UNIMPLEMENTED("game_create_weapon_pickup(): ammo count");

	PickupObject* pickup = args.getWorld()->createPickup(pos, id, type);
	*args[6].globalInteger = pickup->getGameObjectID();
}
コード例 #9
0
ファイル: ObjectModule.cpp プロジェクト: CyberSys/openrw
void game_create_character_in_vehicle(const ScriptArguments& args)
{
	auto vehicle = static_cast<VehicleObject*>(args.getObject<VehicleObject>(0));
	auto type = args[1].integer;
	RW_UNUSED(type);
	RW_UNIMPLEMENTED("game_create_character_in_vehicle(): character type");
	auto id = args[2].integer;
	
	auto character = args.getWorld()->createPedestrian(id, vehicle->getPosition() + spawnMagic);
	new DefaultAIController(character);
	
	character->setCurrentVehicle(vehicle, 0);
	vehicle->setOccupant(0, character);
	
	*args[3].globalInteger = character->getGameObjectID();
}
コード例 #10
0
ファイル: ObjectModule.cpp プロジェクト: CyberSys/openrw
void game_create_player(const ScriptArguments& args)
{
	auto id = args[0].integer;
	if (id != 0) {
		RW_UNIMPLEMENTED("Multiple player characters not supported");
	}

	glm::vec3 position(args[1].real, args[2].real, args[3].real);
	
	if( position.z < -99.f ) {
		position = args.getWorld()->getGroundAtPosition(position);
	}
	
	auto pc = args.getWorld()->createPlayer(position + spawnMagic);
    args.getState()->playerObject = pc->getGameObjectID();
    *args[4].globalInteger = args.getWorld()->players.size()-1;
}
コード例 #11
0
ファイル: ObjectModule.cpp プロジェクト: CyberSys/openrw
bool game_character_in_area_or_cylinder(const ScriptArguments& args)
{
	auto character = args.getPlayerCharacter(0);
	glm::vec2 min(args[1].real, args[2].real);
	glm::vec2 max(args[3].real, args[4].real);
	bool isCylinder = !!args[5].integerValue();

	RW_UNIMPLEMENTED("game_character_in_area_or_cylinder: should use cylinder if requested?");
	RW_UNUSED(isCylinder);
	/// @todo

	auto player = character->getPosition();
	if( player.x > min.x && player.y > min.y && player.x < max.x && player.y < max.y ) {
		return true;
	}
	return false;
}
コード例 #12
0
ファイル: MenuState.cpp プロジェクト: rwengine/openrw
void MenuState::enterMainMenu() {
    auto& t = game->getGameData().texts;

    Menu menu{
        {{t.text(MenuDefaults::kStartGameId),
          [=] { game->getStateManager().enter<IngameState>(game); }},
         {t.text(MenuDefaults::kLoadGameId), [=] { enterLoadMenu(); }},
         {t.text(MenuDefaults::kDebugId),
          [=] { game->getStateManager().enter<IngameState>(game, true, "test"); }},
         {t.text(MenuDefaults::kOptionsId),
          [] { RW_UNIMPLEMENTED("Options Menu"); }},
         {t.text(MenuDefaults::kQuitGameId),
          [=] { game->getStateManager().clear(); }}},
        glm::vec2(200.f, 200.f)};

    setNextMenu(std::move(menu));
}
コード例 #13
0
ファイル: ObjectModule.cpp プロジェクト: CyberSys/openrw
bool game_character_near_car_2d(const ScriptArguments& args)
{
	auto character = static_cast<CharacterObject*>(args.getObject<CharacterObject>(0));
	auto vehicle = static_cast<VehicleObject*>(args.getObject<VehicleObject>(1));
	glm::vec2 radius(args[2].real, args[3].real);
	bool drawMarker = !!args[4].integer;
	RW_UNUSED(drawMarker);
	RW_UNIMPLEMENTED("Draw marker in game_character_near_car_2D");

	auto charVehicle = character->getCurrentVehicle();
	if( charVehicle ) {
		auto dist = charVehicle->getPosition() - vehicle->getPosition();
		if( dist.x <= radius.x && dist.y <= radius.y ) {
			return true;
		}
	}
	
	return false;
}
コード例 #14
0
ファイル: CharacterObject.cpp プロジェクト: SamStudio8/openrw
bool CharacterObject::isStopped() const
{
	RW_UNIMPLEMENTED("Checking if character is stopped");
	return true;
}
コード例 #15
0
ファイル: ObjectModule.cpp プロジェクト: aap/openrw
void game_create_pickup(const ScriptArguments& args)
{
	glm::vec3 pos (args[2].real, args[3].real, args[4].real);
	int id;
	int type = args[1].integer;
	
	switch(args[0].type) {
		case TInt8:
			id = (std::int8_t)args[0].integer;
			break;
		case TInt16:
			id = (std::int16_t)args[0].integer;
			break;
		default:
			RW_ERROR("Unhandled integer type");
			*args[5].globalInteger = 0;
			return;
	}
	
	if ( id < 0 )
	{
		id = -id;
		
		auto model = args.getVM()->getFile()->getModels()[id];
		std::transform(model.begin(), model.end(), model.begin(), ::tolower);
	
		id = args.getWorld()->data->findModelObject(model);
		args.getWorld()->data->loadDFF(model+".dff");
		args.getWorld()->data->loadTXD("icons.txd");
	}
	else
	{
		auto data = args.getWorld()->data->findObjectType<ObjectData>(id);
		
		if ( ! ( id >= 170 && id <= 184 ) )
		{
			args.getWorld()->data->loadDFF(data->modelName+".dff");
		}
		args.getWorld()->data->loadTXD(data->textureName+".txd");
	}
	
	PickupObject* pickup = nullptr;

	if ( id >= 170 && id <= 184 )
	{
		// Find the item for this model ID
		auto world = args.getWorld();
		InventoryItem *item = nullptr;
		for (auto i = 0; i < maxInventorySlots; ++i)
		{
			item = world->getInventoryItem(i);
			if (item->getModelID() == id) {
				auto pickuptype = (PickupObject::PickupType)type;
				pickup = new ItemPickup(args.getWorld(), pos, pickuptype, item);
				world->pickupPool.insert( pickup );
				world->allObjects.push_back(pickup);
				*args[5].globalInteger = pickup->getGameObjectID();
			}
		}
	}
	else
	{
		RW_UNIMPLEMENTED("non-item pickups");
		*args[5].globalInteger = 0;
	}
	
}
コード例 #16
0
ファイル: ObjectModule.cpp プロジェクト: CyberSys/openrw
bool game_character_in_range(const ScriptArguments& args)
{
	RW_UNUSED(args);
	RW_UNIMPLEMENTED("game_character_in_range()");
	return true;
}
コード例 #17
0
ファイル: ObjectModule.cpp プロジェクト: CyberSys/openrw
bool game_character_in_area_9(const ScriptArguments& args)
{
	RW_UNUSED(args);
	RW_UNIMPLEMENTED("game_character_in_area_9");
	return false;
}