Exemple #1
0
def _attachBg(targetObj, col, sceneName, visible=True):
    from objproperties import ObjProperties
    from scene_helper import Scene

    scene = Scene(sceneName).getscene()
    bg = ObjProperties().getPropObjGroup('background_view', scene, 0)[0]
    bg['target_obj'] = str(targetObj)
    bg.visible = visible
    bg.color = col
    scene.addObject(bg)
    bg = ObjProperties().getObjByPropVal('target_obj', str(targetObj),
                                         scene.objects)
    bg.position = targetObj.position
    # push it back alittle
    bg.position[2] -= 0.4
    bg.setParent(targetObj)
Exemple #2
0
def clearPositionNodes(scene):
    canvasList = ObjProperties().getPropObjGroup('canvas_id', scene)

    for canvasObj in canvasList:
        if 'main_canvas' in canvasObj:
            continue
        canvasObj.endObject()
Exemple #3
0
def _addObjResource(name):
    from objproperties import ObjProperties
    
    scene = getHudScene().getscene()
    obj = ObjProperties().getPropObjGroup(name, scene, 0)

    if str(obj) not in scene.objects:
        scene.addObject(str(obj[0]))
Exemple #4
0
def showChallengeList(scene, challenges, positionNodes):
    clearPositionNodes(scene)
    for index, challenge in enumerate(challenges):
        # get a position node object by it's index assigned to it
        positionNode = ObjProperties().getObjByPropVal('position_node', index,
                                                       positionNodes)
        canvas = ChallengeCanvas(challenge['id'])
        canvas.add(positionNode, False)
        setChallengeMenu(canvas, challenge)
Exemple #5
0
 def load(self):
     instance = logic.globalDict['timer_instances'][self.id]
     self.sceneId = instance['scene_id']
     self.callback = instance['callback']
     self.scene = Scene(self.sceneId).getscene()
     self.timerLimit = instance['time_limit']
     self.instanceObj = ObjProperties().getObjByPropVal(
         'instance_id', self.id, self.scene.objects)
     Clock.__init__(self, self.instanceObj)
Exemple #6
0
 def _loadVsBlocks(self, staticBlocks):
     for staticBlock in staticBlocks:
         vsBlock = ObjProperties().getObjByPropVal(
             'visual_block', staticBlock['block_number'],
             self.scene.objectsInactive)
         self.scene.addObject(vsBlock)
         vsBlock = self.scene.objects[str(vsBlock)]
         vsBlock.visible = False
         vsBlock.position = staticBlock.position
         vsBlock.setParent(staticBlock, False, False)
Exemple #7
0
 def _addInstance(self):
     log.debug("Creating timer instance %s", self.id)
     obj = ObjProperties()
     idleInstanceList = obj.getPropObjGroup('timer_instance', self.scene, 0)
     idleInstanceObj = idleInstanceList[0]
     idleInstanceObj['instance_id'] = self.id
     self.scene.addObject(idleInstanceObj)
     timerObj = obj.getObjByPropVal('instance_id', self.id,
                                    self.scene.objects)
     return timerObj
Exemple #8
0
    def refreshVsBlocks(self):
        vsBlocks = self.getVisualBlocks()
        lgBlocks = self.getLogicalBlocks()
        obj = ObjProperties()

        for vsBlock in vsBlocks:
            vsBlock.removeParent()
            lgBlock = obj.getObjByPropVal('block_number',
                                          vsBlock['visual_block'], lgBlocks)
            vsBlock.position = lgBlock.position
            vsBlock.setParent(lgBlock, 0, 0)
            lgBlock['_visual_block'] = str(vsBlock)
Exemple #9
0
    def setStaticBlockNumbers(self, numberStructure, staticBlocks=[]):
        '''
        Assign static block numbers that will be used when matching logical_blocks 
        to static_blocks. The numbers assigned to static_blocks is
        based on the order and pattern in the numberStructure. 

        The method expects a number structure such as :
            {
                1 : [1, 2, 3, 4],
                2 : [5, 6, 7, 8],
                3 : [9, 10, 11, 12],
                4 : [13, 14, 15],
            }
        The dictionary key / index numbers represent static block rows. The list values of these
        index numbers represents the order in which numbers must be assigned to static blocks.. 

        Required static_block properties:
            @property row <int>
            @property index <int>
    
        In summary, the numberStructure represents the pattern in which the puzzle needs to be solved..
        '''

        self.log.debug(
            'Using numberStructure %s to assign block_numbers to static blocks',
            numberStructure)

        if not staticBlocks:
            staticBlocks = self.getStaticBlocks()

        for staticBlock in staticBlocks:
            staticBlocProp = ObjProperties(staticBlock)
            staticBlocIndex = staticBlocProp.getProp('index')
            staticBlocRow = staticBlocProp.getProp('row')

            if staticBlocRow in numberStructure:
                numStructRow = numberStructure[staticBlocRow]
                numStructIndexVal = numStructRow[staticBlocIndex]
                staticBlocProp.setProp('block_number', numStructIndexVal)
                self.log.debug(
                    '''
                    Static block %s has been assigned block_number %s 
                ''', staticBlock, numStructIndexVal)
            else:
                error = '''
                        Static obj %s's row %s not found in number structure!
                        ''', staticBlock, staticBlockRow
                self.log.error(error)
                raise PuzzleBlockLoaderError(error)
Exemple #10
0
    def addInstance(self, action):
        '''
        Add object in the scene with an always 
        sensor(with PosPulse mode == True) set in logic bricks
        '''

        if self.getInstance():
            return

        instance = ObjProperties().getPropObjGroup(
            'always_instance', self.scene, 0
        )[0]
        instance['instance_id'] = self.id
        self.scene.addObject(instance)
        self.setAction(action)
 def markVisualBlocks():
     data = logic.globalDict[id]
     data['index'] += 1
     if data['index'] <= data['total']:
         vsBlock = ObjProperties().getObjByPropVal('visual_block',
                                                   data['index'],
                                                   scene.objects)
         if vsBlock:
             timer = Timer(id, 'HUD')
             timer.setTimer(
                 timerDelay, lambda: clickAnimation(
                     vsBlock, lambda: animate_match_color(
                         vsBlock, onfinishAction=markVisualBlocks)))
             timer.start()
     else:
         logic.globalDict[id]['index'] = 0
Exemple #12
0
    def _addCanvasObj(self, isVisible):
        log.debug('setting inactive canvas object')
        scene = self.__getScene()
        canvas = scene.objectsInactive[self._canvasName]

        log.debug('assigning identity %s to canvas %s', self.getId(),
                  self._canvasName)
        canvas['canvas_id'] = self.getId()
        self._tagWidgets(canvas)
        self._setvisibility(isVisible, canvas)

        log.debug('adding canvas %s into the scene on node %s',
                  self._canvasName, self.getNode())
        scene.addObject(canvas, self.getNode(), 0)
        self.setObj(ObjProperties().getObjByPropVal('canvas_id', self.getId(),
                                                    scene.objects))
Exemple #13
0
def loadCursorObjs():
    '''
    Loads all cursor objects from hidden layer into active layer.
    Cursors are parented to an empty cursor object and 
    visibility set to False.
    '''

    from objproperties import ObjProperties

    scene = Scene('HUD').getscene()
    parentCursor = getCursorObj()
    cursorList = ObjProperties().getPropObjGroup('mouse_pointer', scene, 0)

    for cursor in cursorList:
        cursor.visible = False
        scene.addObject(cursor, parentCursor)
        scene.objects[str(cursor)].setParent(parentCursor)
Exemple #14
0
def init():
    scene = logic.getCurrentScene()
    # Detect if program is in scene preload mode
    # and jump back to PRELOAD scene
    if '_preload_scene' in logic.globalDict:
        scene.replace('PRELOAD')
        return

    sceneInitObj = ObjProperties().getPropObjGroup(
        '_SCENE_CONTROLLER_', scene, 0
    )

    if not sceneInitObj:
        return

    if sceneInitObj not in scene.objects:
        scene.addObject(str(sceneInitObj[0]))
Exemple #15
0
    def setLogicalBlockNumbers(self):
        '''
        Assigns random block_numbers to logical_blocks in the active scene.
        
        Note: By default, a logical block does not have a block_number
        '''

        logicalBlocks = self.getLogicalBlocks()
        lbCount = len(logicalBlocks)
        generatedNums = []

        for logicalBlock in logicalBlocks:
            lbProp = ObjProperties(logicalBlock)
            randomNum = 0

            # Skip random number 0 because blocks are counted from 1 to 15
            # for example..
            while (randomNum in generatedNums or randomNum == 0):
                randomNum = randint(0, lbCount)

            generatedNums.append(randomNum)
            lbProp.setProp('block_number', randomNum)
            self.log.debug('%s assigned to logic_block', randomNum)
Exemple #16
0
    def addVisualBlocks(self):
        '''
        This methods loads a visual_block, which is a puzzle block a player will
        see as they interact with the game. The visual blocks are added and parented to
        logical blocks that share the same block_number.
        '''

        logicalBlockObjs = self.getLogicalBlocks()
        inactvObjs = self.scene.objectsInactive

        for logicalBlockObj in logicalBlockObjs:
            obj = ObjProperties()
            logicalBlock = LogicalBlock(logicalBlockObj)
            inactVsBlock = obj.getObjByPropVal('visual_block',
                                               logicalBlock.blockID,
                                               inactvObjs)

            self.scene.addObject(inactVsBlock, logicalBlockObj, 0)
            actVsBlock = obj.getObjByPropVal('visual_block',
                                             logicalBlock.blockID,
                                             self.scene.objects)
            actVsBlock.position = logicalBlockObj.position
            actVsBlock.setParent(logicalBlockObj, 0, 0)
            logicalBlock.setVsBlock(str(actVsBlock))
def animateVisualBlocks(challengeName, timerDelay=0.3):
    from button_effects import clickAnimation
    from block_effects import animate_match_color
    from objproperties import ObjProperties
    from timer import Timer

    id = 'pattern_visualiser_data'
    scene = Scene('HUD').getscene()

    if id not in logic.globalDict:
        logic.globalDict[id] = {
            'total':
            len(ObjProperties().getPropObjGroup('visual_block', scene)),
            'index': 0
        }
    else:
        logic.globalDict[id]['index'] = 0

    def markVisualBlocks():
        data = logic.globalDict[id]
        data['index'] += 1
        if data['index'] <= data['total']:
            vsBlock = ObjProperties().getObjByPropVal('visual_block',
                                                      data['index'],
                                                      scene.objects)
            if vsBlock:
                timer = Timer(id, 'HUD')
                timer.setTimer(
                    timerDelay, lambda: clickAnimation(
                        vsBlock, lambda: animate_match_color(
                            vsBlock, onfinishAction=markVisualBlocks)))
                timer.start()
        else:
            logic.globalDict[id]['index'] = 0

    markVisualBlocks()
Exemple #18
0
 def getBlocks(self, title, layer=1):
     blocks = ObjProperties().getPropObjGroup(title, self.scene, layer)
     return blocks
Exemple #19
0
 def __init__(self, timerObj):
     self.timerObj = ObjProperties(timerObj)
Exemple #20
0
 def isset(self):
     return ObjProperties().getObjByPropVal(
         'canvas_id', self.getId(),
         self.__getScene().objects) is not None
Exemple #21
0
 def getInstance(self):
     instance = ObjProperties().getObjByPropVal(
         'instance_id', self.getId(), self.scene.objects
     )
     return instance
Exemple #22
0
 def load(self):
     staticBlocks = ObjProperties().getPropObjGroup('static_block',
                                                    self.scene)
     puzzleLoader = PuzzleLoader(self.scene)
     puzzleLoader.setStaticBlockNumbers(self.pattern, staticBlocks)
     self._loadVsBlocks(staticBlocks)
Exemple #23
0
def getPositionNodes(scene):
    return ObjProperties().getPropObjGroup('position_node', scene)