Esempio n. 1
0
bool game_player_in_taxi(const ScriptArguments& args)
{
    auto character = static_cast<CharacterObject*>(args.getPlayerCharacter(0));
	
	auto vehicle = character->getCurrentVehicle();
	return (vehicle && (vehicle->vehicle->classType & VehicleData::TAXI) == VehicleData::TAXI);
}
Esempio n. 2
0
bool game_locate_player_stopped_in_vehicle_2d(const ScriptArguments& args)
{
  auto character = static_cast<CharacterObject*>(args.getPlayerCharacter(0));
	glm::vec2 position(args[1].real, args[2].real);
	glm::vec2 radius(args[3].real, args[4].real);
	
	bool drawCylinder = args[5].integer;
	
	if( character->getCurrentVehicle() == nullptr )
	{
		return false;
	}
	
	auto vp = character->getCurrentVehicle()->getPosition();
	glm::vec2 distance = glm::abs(position - glm::vec2(vp));
	
	if(distance.x <= radius.x && distance.y <= radius.y && character->isStopped())
	{
		return true;
	}
	
	if( drawCylinder )
	{
		auto ground = args.getWorld()->getGroundAtPosition(glm::vec3(position, 100.f));
		args.getWorld()->drawAreaIndicator(AreaIndicatorInfo::Cylinder, ground, glm::vec3(radius, 5.f));
	}
	
	return false;
}
Esempio n. 3
0
bool game_player_in_any_vehicle(const ScriptArguments& args)
{
    auto character = static_cast<CharacterObject*>(args.getPlayerCharacter(0));

    auto vehicle = character->getCurrentVehicle();
    return vehicle != nullptr;
}
Esempio n. 4
0
bool game_player_in_area_2d(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);
	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;
}
Esempio n. 5
0
bool game_player_pressing_horn(const ScriptArguments& args)
{
	auto character = static_cast<CharacterObject*>(args.getPlayerCharacter(0));
	if ( character->getCurrentVehicle() != nullptr )
	{
		/// @todo Respect actual horn key.
		return true;
	}

	return false;
}
Esempio n. 6
0
bool game_player_in_model(const ScriptArguments& args)
{
    auto vdata = args.getWorld()->data->findObjectType<VehicleData>(args[1].integer);
    if( vdata )
    {
        auto character = static_cast<CharacterObject*>(args.getPlayerCharacter(0));
        auto vehicle = character->getCurrentVehicle();
        if ( vehicle ) {

            return vehicle->model && vdata->modelName == vehicle->model->name;
        }
    }
    return false;
}
Esempio n. 7
0
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;
}
Esempio n. 8
0
bool game_player_near_point_in_vehicle_3D(const ScriptArguments& args)
{
    auto character = static_cast<CharacterObject*>(args.getPlayerCharacter(0));
    glm::vec3 center(args[1].real, args[2].real, args[3].real);
    glm::vec3 size(args[4].real, args[5].real, args[6].real);
    bool unkown	= !!args[7].integer;
	RW_UNUSED(unkown);

    auto vehicle = character->getCurrentVehicle();
    if( vehicle ) {
        auto distance = center - character->getPosition();
        distance /= size;
        if( glm::length( distance ) < 1.f ) return true;
    }

    return false;
}
Esempio n. 9
0
bool game_player_near_point_on_foot_3D(const ScriptArguments& args)
{
    auto character = static_cast<CharacterObject*>(args.getPlayerCharacter(0));
    glm::vec3 center(args[1].real, args[2].real, args[3].real);
    glm::vec3 size(args[4].real, args[5].real, args[6].real);
    bool drawCylinder = !!args[7].integer;

    auto vehicle = character->getCurrentVehicle();
    if( ! vehicle ) {
        auto distance = center - character->getPosition();
        distance /= size;
        if( glm::length( distance ) < 1.f ) return true;
    }

    if( drawCylinder )
    {
        args.getWorld()->drawAreaIndicator(AreaIndicatorInfo::Cylinder, center, size);
    }

    return false;
}
Esempio n. 10
0
void game_set_player_heading(const ScriptArguments& args)
{
    auto object = args.getPlayerCharacter(0);
	object->setHeading(args[1].real);
}