def createCtfVehicle(data, vehicleType):
    """creates a generic vehicle for ctf plug-in"""

    global steerVehicles
    maxForce = 1.0
    maxSpeed = 5.0
    # set vehicle's type == ctf_enemy
    typeStr = "ctf_enemy"
    speed = 1.0
    if vehicleType == OSSteerVehicle.CTF_SEEKER:
        typeStr = "ctf_seeker"
        speed = 0.0
    OSSteerManager.get_global_ptr().set_parameter_value(
        OSSteerManager.STEERVEHICLE, "vehicle_type", typeStr)

    oldPlayerNum = len(steerVehicles)
    # handle vehicle
    handleVehicles(data)
    if len(steerVehicles) > oldPlayerNum:
        # set vehicle's parameters
        steerVehicles[-1].set_max_force(maxForce)
        steerVehicles[-1].set_max_speed(maxSpeed)
        steerVehicles[-1].set_speed(speed)
        steerVehicles[-1].set_up_axis_fixed(True)
        return True
    return False
Exemple #2
0
def createSoccerVehicle(data, vehicleType):
    """creates a generic vehicle for soccer plug-in"""

    global steerVehicles
    # set vehicle's type == player
    typeStr = "player"
    maxForce = 3000.7
    maxSpeed = 10.0
    speed = 0.0
    if vehicleType == OSSteerVehicle.BALL:
        typeStr = "ball"
        maxForce = 9.0
        maxSpeed = 9.0
        speed = 1.0
    OSSteerManager.get_global_ptr().set_parameter_value(
        OSSteerManager.STEERVEHICLE, "vehicle_type", typeStr)

    oldPlayerNum = len(steerVehicles)
    # handle vehicle
    handleVehicles(data)
    if len(steerVehicles) > oldPlayerNum:
        # set vehicle's parameters
        steerVehicles[-1].set_max_force(maxForce)
        steerVehicles[-1].set_max_speed(maxSpeed)
        steerVehicles[-1].set_speed(speed)
        steerVehicles[-1].set_up_axis_fixed(True)
        return True
    return False
Exemple #3
0
def writeToBamFileAndExitBoid(fileName):
    """override writeToBamFileAndExit"""

    for i in range(OSSteerManager.get_global_ptr().get_num_steer_vehicles()):
        vehicle = OSSteerManager.get_global_ptr().get_steer_vehicle(i)
        print(str(i) + "th OSSteerVehicle's settings: ")
        print(vehicle.get_settings())
        print(vehicle.get_flock_settings())
    #
    writeToBamFileAndExit(fileName)
def addPursuer(data=None):
    """adds a pursuer"""

    if data == None:
        return

    # set vehicle's type == mp_pursuer
    OSSteerManager.get_global_ptr().set_parameter_value(
        OSSteerManager.STEERVEHICLE, "vehicle_type", "mp_pursuer")
    # handle vehicle
    handleVehicles(data)
Exemple #5
0
def setParametersBeforeCreation():
    """set parameters as strings before plug-ins/vehicles creation"""

    steerMgr = OSSteerManager.get_global_ptr()
    valueList = ValueList_string()
    # set plug-in type
    steerMgr.set_parameter_value(OSSteerManager.STEERPLUGIN, "plugin_type",
                                 "map_drive")

    # set vehicle's type, mass, speed
    steerMgr.set_parameter_value(OSSteerManager.STEERVEHICLE, "vehicle_type",
                                 "map_driver")
    steerMgr.set_parameter_value(OSSteerManager.STEERVEHICLE, "max_speed",
                                 "20.0")
    steerMgr.set_parameter_value(OSSteerManager.STEERVEHICLE, "max_force",
                                 "8.0")
    steerMgr.set_parameter_value(OSSteerManager.STEERVEHICLE, "up_axis_fixed",
                                 "true")

    # set vehicle throwing events
    valueList.clear()
    valueList.add_value(
        "avoid_obstacle@[email protected]:path_following@[email protected]")
    steerMgr.set_parameter_values(OSSteerManager.STEERVEHICLE, "thrown_events",
                                  valueList)
    #
    printCreationParameters()
Exemple #6
0
def setParametersBeforeCreation():
    """set parameters as strings before plug-ins/vehicles creation"""

    steerMgr = OSSteerManager.get_global_ptr()
    valueList = ValueList_string()
    # set plug-in type
    steerMgr.set_parameter_value(OSSteerManager.STEERPLUGIN, "plugin_type",
                                 "boid")

    # set vehicle's type, max force, max speed, speed
    steerMgr.set_parameter_value(OSSteerManager.STEERVEHICLE, "vehicle_type",
                                 "boid")
    steerMgr.set_parameter_value(OSSteerManager.STEERVEHICLE, "max_force",
                                 "5.0")
    steerMgr.set_parameter_value(OSSteerManager.STEERVEHICLE, "max_speed",
                                 "10.0")
    steerMgr.set_parameter_value(OSSteerManager.STEERVEHICLE, "speed", "3.0")

    # set vehicle throwing events
    valueList.clear()
    valueList.add_value("avoid_obstacle@avoid_obstacle@")
    steerMgr.set_parameter_values(OSSteerManager.STEERVEHICLE, "thrown_events",
                                  valueList)
    #
    printCreationParameters()
Exemple #7
0
def getCollisionEntryFromCamera():
    """throws a ray and returns the first collision entry or nullptr"""    
    
    global app
    # get steer manager
    steerMgr = OSSteerManager.get_global_ptr()
    # get the mouse watcher
    mwatcher = app.mouseWatcherNode
    if mwatcher.has_mouse():
        # Get to and from pos in camera coordinates
        pMouse = mwatcher.get_mouse()
        #
        pFrom, pTo = (LPoint3f(), LPoint3f())
        if app.camLens.extrude(pMouse, pFrom, pTo):
            # Transform to global coordinates
            pFrom = app.render.get_relative_point(app.cam, pFrom)
            pTo = app.render.get_relative_point(app.cam, pTo)
            direction = (pTo - pFrom).normalized()
            steerMgr.get_collision_ray().set_origin(pFrom)
            steerMgr.get_collision_ray().set_direction(direction)
            steerMgr.get_collision_traverser().traverse(app.render)
            # check collisions
            if steerMgr.get_collision_handler().get_num_entries() > 0:
                # Get the closest entry
                steerMgr.get_collision_handler().sort_entries()
                return steerMgr.get_collision_handler().get_entry(0)
    return None
Exemple #8
0
def getVehicleModelAnims(meanScale, vehicleFileIdx, moveType, sceneNP, steerPlugIn, 
                           steerVehicles, vehicleAnimCtls, pos = None):
    """get a vehicle, model and animations"""
    
    global app, vehicleAnimFiles
    # get some models, with animations, to attach to vehicles
    # get the model
    vehicleNP = app.loader.load_model(vehicleFile[vehicleFileIdx])
    # set random scale
    scale = meanScale * (1 + 0.2 * (2 * random.uniform(0.0, 1.0) - 1))
    vehicleNP.set_scale(scale)
    # associate an anim with a given anim control
    tmpAnims = AnimControlCollection()
    vehicleAnimNP = [None, None]
    vehicleAnimCtls.append([None, None])
    if(len(vehicleAnimFiles[vehicleFileIdx][0]) != 0) and \
            (len(vehicleAnimFiles[vehicleFileIdx][1]) != 0):
        # first anim -> modelAnimCtls[i][0]
        vehicleAnimNP[0] = app.loader.load_model(vehicleAnimFiles[vehicleFileIdx][0])
        vehicleAnimNP[0].reparent_to(vehicleNP)
        auto_bind(vehicleNP.node(), tmpAnims, 
                  PartGroup.HMF_ok_part_extra |
                  PartGroup.HMF_ok_anim_extra |
                  PartGroup.HMF_ok_wrong_root_name)
        vehicleAnimCtls[-1][0] = tmpAnims.get_anim(0)
        tmpAnims.clear_anims()
        vehicleAnimNP[0].detach_node()
        # second anim -> modelAnimCtls[i][1]
        vehicleAnimNP[1] = app.loader.load_model(vehicleAnimFiles[vehicleFileIdx][1])
        vehicleAnimNP[1].reparent_to(vehicleNP)
        auto_bind(vehicleNP.node(), tmpAnims, 
                  PartGroup.HMF_ok_part_extra |
                  PartGroup.HMF_ok_anim_extra |
                  PartGroup.HMF_ok_wrong_root_name)
        vehicleAnimCtls[-1][1] = tmpAnims.get_anim(0)
        tmpAnims.clear_anims()
        vehicleAnimNP[1].detach_node()
        # reparent all node paths
        vehicleAnimNP[0].reparent_to(vehicleNP)
        vehicleAnimNP[1].reparent_to(vehicleNP)
    # set parameter for vehicle's move type (OPENSTEER or OPENSTEER_KINEMATIC)
    steerMgr = OSSteerManager.get_global_ptr()
    steerMgr.set_parameter_value(OSSteerManager.STEERVEHICLE, "mov_type",
            moveType)
    # create the steer vehicle (attached to the reference node)
    steerVehicleNP = steerMgr.create_steer_vehicle("vehicle" + str(len(steerVehicles)))
    steerVehicles.append(steerVehicleNP.node())
    randPos = pos
    if randPos == None:
        # set the position randomly
        randPos = getRandomPos(sceneNP)
    steerVehicleNP.set_pos(randPos)
    # attach some geometry (a model) to steer vehicle
    vehicleNP.reparent_to(steerVehicleNP)
    # add the steer vehicle to the plug-in
    steerPlugIn.add_steer_vehicle(steerVehicleNP)
def getPlayerModelAnims(name, scale, vehicleFileIdx, steerPlugIn, 
                           steerVehicles, vehicleAnimCtls, pos):
    """get the player, model and animations"""
    
    global app, vehicleAnimFiles
    # get some models, with animations, to attach to vehicles
    # get the model
    vehicleNP = app.loader.load_model(vehicleFile[vehicleFileIdx])
    # associate an anim with a given anim control
    tmpAnims = AnimControlCollection()
    vehicleAnimNP = [None, None]
    vehicleAnimCtls.append([None, None])
    if(len(vehicleAnimFiles[vehicleFileIdx][0]) != 0) and \
            (len(vehicleAnimFiles[vehicleFileIdx][1]) != 0):
        # first anim -> modelAnimCtls[i][0]
        vehicleAnimNP[0] = app.loader.load_model(vehicleAnimFiles[vehicleFileIdx][0])
        vehicleAnimNP[0].reparent_to(vehicleNP)
        auto_bind(vehicleNP.node(), tmpAnims, 
                  PartGroup.HMF_ok_part_extra |
                  PartGroup.HMF_ok_anim_extra |
                  PartGroup.HMF_ok_wrong_root_name)
        vehicleAnimCtls[-1][0] = tmpAnims.get_anim(0)
        tmpAnims.clear_anims()
        vehicleAnimNP[0].detach_node()
        # second anim -> modelAnimCtls[i][1]
        vehicleAnimNP[1] = app.loader.load_model(vehicleAnimFiles[vehicleFileIdx][1])
        vehicleAnimNP[1].reparent_to(vehicleNP)
        auto_bind(vehicleNP.node(), tmpAnims, 
                  PartGroup.HMF_ok_part_extra |
                  PartGroup.HMF_ok_anim_extra |
                  PartGroup.HMF_ok_wrong_root_name)
        vehicleAnimCtls[-1][1] = tmpAnims.get_anim(0)
        tmpAnims.clear_anims()
        vehicleAnimNP[1].detach_node()
        # reparent all node paths
        vehicleAnimNP[0].reparent_to(vehicleNP)
        vehicleAnimNP[1].reparent_to(vehicleNP)
    #
    steerMgr = OSSteerManager.get_global_ptr()
    # create the steer vehicle (attached to the reference node)
    # note: vehicle's move type is ignored
    steerVehicleNP = steerMgr.create_steer_vehicle("PlayerVehicle")
    steerVehicles.append(steerVehicleNP.node())
    # set the name
    steerVehicleNP.set_name(name)
    # set scale
    steerVehicleNP.set_scale(scale)
    # set the position
    steerVehicleNP.set_pos(pos)
    # attach some geometry (a model) to steer vehicle
    vehicleNP.reparent_to(steerVehicleNP)
    # add the steer vehicle to the plug-in
    steerPlugIn.add_steer_vehicle(steerVehicleNP)
    # return the steerVehicleNP
    return steerVehicleNP
Exemple #10
0
def handleObstacles(data):
    """handle add/remove obstacles"""
    
    global app
    if data == None:
        return

    obstacleData = data
    addObstacle = obstacleData.addObstacle
    sceneNP = obstacleData.sceneNP
    steerPlugIn = obstacleData.steerPlugIn
    scale = obstacleData.scale
    # get the collision entry, if any
    entry0 = getCollisionEntryFromCamera()
    if entry0:
        # get the hit object
        hitObject = entry0.get_into_node_path()
        print("hit " + str(hitObject) + " object")

        # check if we want add obstacle and
        # if sceneNP is the hitObject or an ancestor thereof
        if addObstacle and ((sceneNP == hitObject) or sceneNP.is_ancestor_of(hitObject)):
            # the hit object is the scene: add an obstacle to the scene
            # get a model as obstacle
            obstacleNP = app.loader.load_model(obstacleFile)
            obstacleNP.set_collide_mask(mask)
            # set random scale
            scale = scale * (1 + 0.2 * (2 * random.uniform(0.0, 1.0) - 1))
            obstacleNP.set_scale(scale)
            # set obstacle position
            pos = entry0.get_surface_point(sceneNP)
            obstacleNP.set_pos(sceneNP, pos)
            # try to add to plug-in
            if steerPlugIn.add_obstacle(obstacleNP, "box") < 0:
                # something went wrong remove from scene
                obstacleNP.remove_node()
                return
            print("added " + str(obstacleNP) + " obstacle at " + 
                  str(obstacleNP.get_pos()))
        # check if we want remove obstacle
        elif not addObstacle:
            # cycle through the local obstacle list
            for index in range(steerPlugIn.get_num_obstacles()):
                # get the obstacle's NodePath
                ref = steerPlugIn.get_obstacle(index)
                obstacleNP = OSSteerManager.get_global_ptr().get_obstacle_by_ref(ref)
                # check if obstacleNP is the hitObject or an ancestor thereof
                if (obstacleNP == hitObject) or obstacleNP.is_ancestor_of(hitObject):
                    # try to remove from plug-in
                    if not steerPlugIn.remove_obstacle(ref).is_empty():
                        # all ok remove from scene
                        print("removed " + str(obstacleNP) + " obstacle.")
                        obstacleNP.remove_node()
                        break
Exemple #11
0
def writeToBamFileAndExit(fileName):
    """write scene to a file (and exit)"""
    
    OSSteerManager.get_global_ptr().write_to_bam_file(fileName)
    # # this is for testing explicit removal and destruction of all elements
    steerMgr = OSSteerManager.get_global_ptr()
    # remove steer vehicles from steer plug-ins
    for plugInTmp in steerMgr.get_steer_plug_ins():
        for vehicleTmp in plugInTmp:
            # remove vehicleTmp
            plugInTmp.remove_steer_vehicle(NodePath.any_path(vehicleTmp))
    # destroy steer vehicles
    for vehicleTmp in steerMgr.get_steer_vehicles():
        # destroy vehicleTmp
        steerMgr.destroy_steer_vehicle(NodePath.any_path(vehicleTmp))
    # destroy steer plug-ins
    for plugInTmp in steerMgr.get_steer_plug_ins():
        # destroy vehicleTmp
        steerMgr.destroy_steer_plug_in(NodePath.any_path(plugInTmp))
    # #
    #
    sys.exit(0)
Exemple #12
0
def loadTerrain(name, widthScale = 0.5, heightScale = 10.0):
    """load terrain stuff"""

    global app, terrain, terrainRootNetPos
        
    steerMgr = OSSteerManager.get_global_ptr()

    terrain = GeoMipTerrain("terrain")
    heightField = PNMImage(Filename(dataDir + "/heightfield.png"))
    terrain.set_heightfield(heightField)
    # sizing
    environmentWidthX = (heightField.get_x_size() - 1) * widthScale
    environmentWidthY = (heightField.get_y_size() - 1) * widthScale
    environmentWidth = (environmentWidthX + environmentWidthY) / 2.0
    terrain.get_root().set_sx(widthScale)
    terrain.get_root().set_sy(widthScale)
    terrain.get_root().set_sz(heightScale)
    # set other terrain's properties
    blockSize, minimumLevel = (64, 0)
    nearPercent, farPercent = (0.1, 0.7)
    terrainLODmin = min(minimumLevel, terrain.get_max_level())
    flattenMode = GeoMipTerrain.AFM_off
    terrain.set_block_size(blockSize)
    terrain.set_near(nearPercent * environmentWidth)
    terrain.set_far(farPercent * environmentWidth)
    terrain.set_min_level(terrainLODmin)
    terrain.set_auto_flatten(flattenMode)
    # terrain texturing
    textureStage0 = TextureStage("TextureStage0")
    textureImage = TexturePool.load_texture(Filename("terrain.png"))
    terrain.get_root().set_tex_scale(textureStage0, 1.0, 1.0)
    terrain.get_root().set_texture(textureStage0, textureImage, 1)
    # reparent this Terrain node path to the object node path
    terrain.get_root().reparent_to(steerMgr.get_reference_node_path())
    terrain.get_root().set_collide_mask(mask)
    terrain.get_root().set_name(name)
    # brute force generation
    bruteForce = True
    terrain.set_bruteforce(bruteForce)
    # Generate the terrain
    terrain.generate()
    # check if terrain needs update or not
    if not bruteForce:
        # save the net pos of terrain root
        terrainRootNetPos = terrain.get_root().get_net_transform().get_pos()
        # Add a task to keep updating the terrain
        app.taskMgr.add(terrainUpdate, "terrainUpdate", appendTask=True)
    #
    return terrain.get_root()
def getFlag(name):
    """load the flag"""

    global app

    flag = app.loader.load_model("flag_oga.egg")
    flag.set_two_sided(True)
    flag.set_scale(1.5)
    flag.set_name(name)
    flag.reparent_to(OSSteerManager.get_global_ptr().get_reference_node_path())
    flagWave = app.loader.load_model("flag_oga-wave.egg")
    flagWave.reparent_to(flag)
    auto_bind(flag.node(), flagAnims)
    flagAnims.get_anim(0).loop(True)
    return flag
Exemple #14
0
def setParametersBeforeCreation():
    """set parameters as strings before plug-ins/vehicles creation"""

    steerMgr = OSSteerManager.get_global_ptr()
    valueList = ValueList_string()
    # set plug-in type
    steerMgr.set_parameter_value(OSSteerManager.STEERPLUGIN, "plugin_type",
                                 "soccer")

    # set vehicle throwing events
    valueList.clear()
    valueList.add_value("avoid_neighbor@avoid_neighbor@")
    steerMgr.set_parameter_values(OSSteerManager.STEERVEHICLE, "thrown_events",
                                  valueList)
    #
    printCreationParameters()
Exemple #15
0
def printCreationParameters():
    """print creation parameters"""
    
    steerMgr = OSSteerManager.get_global_ptr()
    #
    valueList = steerMgr.get_parameter_name_list(OSSteerManager.STEERPLUGIN)
    print("\n" + "OSSteerPlugIn creation parameters:")
    for name in valueList:
        print ("\t" + name + " = " + 
               steerMgr.get_parameter_value(OSSteerManager.STEERPLUGIN, name))
    #
    valueList = steerMgr.get_parameter_name_list(OSSteerManager.STEERVEHICLE)
    print("\n" + "OSSteerVehicle creation parameters:")
    for name in valueList:
        print ("\t" + name + " = " + 
               steerMgr.get_parameter_value(OSSteerManager.STEERVEHICLE, name))
def setParametersBeforeCreation():
    """set parameters as strings before plug-ins/vehicles creation"""

    steerMgr = OSSteerManager.get_global_ptr()
    valueList = ValueList_string()
    # set plug-in type
    steerMgr.set_parameter_value(OSSteerManager.STEERPLUGIN, "plugin_type",
                                 "multiple_pursuit")

    # set vehicle's max force, max speed, up axis fixed
    steerMgr.set_parameter_value(OSSteerManager.STEERVEHICLE, "max_force",
                                 "1.0")
    steerMgr.set_parameter_value(OSSteerManager.STEERVEHICLE, "max_speed",
                                 "2.0")
    steerMgr.set_parameter_value(OSSteerManager.STEERVEHICLE, "up_axis_fixed",
                                 "true")
    #
    printCreationParameters()
def updatePlugIn(steerPlugIn, task):
    """custom update task for plug-ins"""
    
    global steerVehicles, vehicleAnimCtls
    # call update for plug-in
    dt = ClockObject.get_global_clock().get_dt()
    steerPlugIn.update(dt)
    # handle vehicle's animation
    for i in range(len(vehicleAnimCtls)):
        # get current velocity size
        currentVelSize = steerVehicles[i].get_speed()
        if currentVelSize > 0.0:
            if currentVelSize < 4.0: 
                animOnIdx = 0
            else:
                animOnIdx = 1
            animOffIdx = (animOnIdx + 1) % 2
            # Off anim (0:walk, 1:run)
            if vehicleAnimCtls[i][animOffIdx].is_playing():
                vehicleAnimCtls[i][animOffIdx].stop()
            # On amin (0:walk, 1:run)
            vehicleAnimCtls[i][animOnIdx].set_play_rate(currentVelSize / animRateFactor[animOnIdx])
            if not vehicleAnimCtls[i][animOnIdx].is_playing():
                vehicleAnimCtls[i][animOnIdx].loop(True)
        else:
            # stop any animation
            vehicleAnimCtls[i][0].stop()
            vehicleAnimCtls[i][1].stop()
    # make playerNP kinematic (ie stand on floor)
    if playerNP.node().get_speed() > 0.0:
        # get steer manager
        steerMgr = OSSteerManager.get_global_ptr()
        # correct panda's Z: set the collision ray origin wrt collision root
        pOrig = steerMgr.get_collision_root().get_relative_point(
                steerMgr.get_reference_node_path(), playerNP.get_pos()) + playerHeightRayCast * 2.0
        # get the collision height wrt the reference node path
        gotCollisionZ = steerMgr.get_collision_height(pOrig, steerMgr.get_reference_node_path())
        if gotCollisionZ.get_first():
            #updatedPos.z needs correction
            playerNP.set_z(gotCollisionZ.get_second())
    #
    return task.cont
Exemple #18
0
def getRandomPos(modelNP):
    """return a random point on the facing upwards surface of the model"""
    
    # collisions are made wrt render
    steerMgr = OSSteerManager.get_global_ptr()
    # get the bounding box of scene
    modelDims, modelDeltaCenter = (LVecBase3f(), LVector3f())
    # modelRadius not used
    steerMgr.get_bounding_dimensions(modelNP, modelDims, modelDeltaCenter)
    # throw a ray downward from a point with z = double scene's height
    # and x,y randomly within the scene's (x,y) plane
    # set the ray origin at double of maximum height of the model
    zOrig = ((-modelDeltaCenter.get_z() + modelDims.get_z() / 2.0) + modelNP.get_z()) * 2.0
    while True:
        x = modelDims.get_x() * (random.uniform(0.0, 1.0) - 0.5) - modelDeltaCenter.get_x() + modelNP.get_x()
        y = modelDims.get_y() * (random.uniform(0.0, 1.0) - 0.5) - modelDeltaCenter.get_y() + modelNP.get_y()
        gotCollisionZ = steerMgr.get_collision_height(LPoint3f(x, y, zOrig))
        if gotCollisionZ.get_first():
            break
    return LPoint3f(x, y, gotCollisionZ.get_second())
def setParametersBeforeCreation():
    """set parameters as strings before plug-ins/vehicles creation"""
    
    steerMgr = OSSteerManager.get_global_ptr()
    valueList = ValueList_string()
    # set vehicle's mass, speed
    steerMgr.set_parameter_value(OSSteerManager.STEERVEHICLE, "external_update", 
            "false")
    steerMgr.set_parameter_value(OSSteerManager.STEERVEHICLE, "mass",
            "2.0")
    steerMgr.set_parameter_value(OSSteerManager.STEERVEHICLE, "speed",
            "0.01")

    # set vehicle throwing events
    valueList.clear()
    valueList.add_value("avoid_obstacle@[email protected]:"
            "avoid_close_neighbor@[email protected]:"
            "avoid_neighbor@[email protected]")
    steerMgr.set_parameter_values(OSSteerManager.STEERVEHICLE,
            "thrown_events", valueList)
    #
    printCreationParameters()
def setParametersBeforeCreation():
    """set parameters as strings before plug-ins/vehicles creation"""

    steerMgr = OSSteerManager.get_global_ptr()
    valueList = ValueList_string()
    # set plug-in type
    steerMgr.set_parameter_value(OSSteerManager.STEERPLUGIN, "plugin_type",
                                 "low_speed_turn")

    # set vehicle type, mass, speed
    steerMgr.set_parameter_value(OSSteerManager.STEERVEHICLE, "vehicle_type",
                                 "low_speed_turn")
    steerMgr.set_parameter_value(OSSteerManager.STEERVEHICLE, "mass", "2.0")
    steerMgr.set_parameter_value(OSSteerManager.STEERVEHICLE, "speed", "0.01")

    # set vehicle throwing events
    valueList.clear()
    valueList.add_value("move@[email protected]")
    steerMgr.set_parameter_values(OSSteerManager.STEERVEHICLE, "thrown_events",
                                  valueList)
    #
    printCreationParameters()
Exemple #21
0
def setParametersBeforeCreation():
    """set parameters as strings before plug-ins/vehicles creation"""

    steerMgr = OSSteerManager.get_global_ptr()
    valueList = ValueList_string()
    # set plug-in type
    steerMgr.set_parameter_value(OSSteerManager.STEERPLUGIN, "plugin_type",
                                 "pedestrian")

    # set vehicle's type, mass, speed
    steerMgr.set_parameter_value(OSSteerManager.STEERVEHICLE, "vehicle_type",
                                 "pedestrian")
    steerMgr.set_parameter_value(OSSteerManager.STEERVEHICLE, "mass", "2.0")
    steerMgr.set_parameter_value(OSSteerManager.STEERVEHICLE, "speed", "0.01")

    # set vehicle throwing events
    valueList.clear()
    valueList.add_value(
        "avoid_obstacle@[email protected]:avoid_close_neighbor@avoid_close_neighbor@"
    )
    steerMgr.set_parameter_values(OSSteerManager.STEERVEHICLE, "thrown_events",
                                  valueList)
    #
    printCreationParameters()
    global globalClock
    print(plugIn.get_name() + " real time and dt: " +
          str(globalClock.get_real_time()) + str(globalClock.get_dt()))


if __name__ == '__main__':

    app = startFramework("'one turning'")

    # # here is room for your own code

    print(
        "create a steer manager; set root and mask to manage 'kinematic' vehicles"
    )
    steerMgr = OSSteerManager(app.render, mask)

    print("reparent the reference node to render")
    steerMgr.get_reference_node_path().reparent_to(app.render)

    print("get a sceneNP and reparent to the reference node")
    sceneNP = loadPlane("SceneNP")
    sceneNP.reparent_to(steerMgr.get_reference_node_path())

    print("set sceneNP's collide mask")
    sceneNP.set_collide_mask(mask)

    print(
        "create the default plug-in (attached to the reference node): 'one turning'"
    )
    plugInNP = steerMgr.create_steer_plug_in()
    # print some help to screen
    text = TextNode("Help")
    text.set_text(
        msg + "\n\n"
        "- press \"d\" to toggle debug drawing\n"
        "- press \"w\" to add 'wanderer' vehicle\n"
        "- press \"p\" to add 'pursuer' vehicle\n"
        "- press \"s\"/\"shift-s\" to increase/decrease last inserted vehicle's max speed\n"
        "- press \"f\"/\"shift-f\" to increase/decrease last inserted vehicle's max force\n"
    )
    textNodePath = app.aspect2d.attach_new_node(text)
    textNodePath.set_pos(-1.25, 0.0, -0.5)
    textNodePath.set_scale(0.035)

    # create a steer manager; set root and mask to manage 'kinematic' vehicles
    steerMgr = OSSteerManager(app.render, mask)

    # print creation parameters: defult values
    print("\n" + "Default creation parameters:")
    printCreationParameters()

    # load or restore all scene stuff: if passed an argument
    # try to read it from bam file
    if (not len(sys.argv) > 1) or (not readFromBamFile(sys.argv[1])):
        # no argument or no valid bamFile
        # reparent the reference node to render
        steerMgr.get_reference_node_path().reparent_to(app.render)

        # get a sceneNP, naming it with "SceneNP" to ease restoring from bam
        # file
        sceneNP = loadTerrain("SceneNP")
    text = TextNode("Help")
    text.set_text(
            msg + "\n\n"      
            "- press \"d\" to toggle debug drawing\n"
            "- press \"up\"/\"left\"/\"down\"/\"right\" arrows to move the player\n"
            "- press \"a\"/\"k\" to add 'opensteer'/'kinematic' vehicle\n"
            "- press \"s\"/\"shift-s\" to increase/decrease last inserted vehicle's max speed\n"
            "- press \"f\"/\"shift-f\" to increase/decrease last inserted vehicle's max force\n"
            "- press \"t\" to toggle last inserted vehicle's wander behavior\n"
            "- press \"o\"/\"shift-o\" to add/remove obstacle\n")
    textNodePath = app.aspect2d.attach_new_node(text)
    textNodePath.set_pos(-1.25, 0.0, 0.8)
    textNodePath.set_scale(0.035)
    
    # create a steer manager set root and mask to manage 'kinematic' vehicles
    steerMgr = OSSteerManager(app.render, mask)

    # print creation parameters: defult values
    print("\n" + "Default creation parameters:")
    printCreationParameters()

    # load or restore all scene stuff: if passed an argument
    # try to read it from bam file
    if (not len(sys.argv) > 1) or (not readFromBamFile(sys.argv[1])):
        # no argument or no valid bamFile
        # reparent the reference node to render
        steerMgr.get_reference_node_path().reparent_to(app.render)
    
        # get a sceneNP, naming it with "SceneNP" to ease restoring from bam 
        # file
        sceneNP = loadTerrain("SceneNP")
Exemple #25
0
def readFromBamFile(fileName):
    """read scene from a file"""
    
    return OSSteerManager.get_global_ptr().read_from_bam_file(fileName)