Best Python code snippet using yandex-tank
story_ant.py
Source:story_ant.py  
...136    # Outdoors137    #########################138    def create_outdoors_state_graph(self):139        s = self.rootState.create_successor("Init")140        s.add_action(bat.story.ActConstraintSet("Hand.L", "Copy Transforms", 1.0))141        s.add_action(bat.story.ActAction('Ant_Digging1', 1, 42, Ant.L_ANIM,142                play_mode=bge.logic.KX_ACTION_MODE_LOOP))143        sKnock = s.create_sub_step("Knock sound")144        sKnock.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 34.5, tap=True))145        sKnock.add_action(self.knock_sound_action)146        senter_start, _ = self.create_enter_states()147        senter_start.add_predecessor(s)148        sconv_start, sconv_end = self.create_conversation()149        sconv_start.add_predecessor(s)150        # Create a super state to catch when the player leaves. Can't have one151        # for canceling dialogue, because that would catch any dialogue152        # elsewhere in the level.153        self.super_state = bat.story.State('Super')154        s_leave = self.super_state.create_successor('Leave')155        s_leave.add_condition(bat.story.CondEvent('LeaveAnt', self))156        #157        # Loop back to start.158        #159        s = bat.story.State("Reset")160        s.add_predecessor(sconv_end)161        s.add_predecessor(s_leave)162        s.add_action(Scripts.story.ActResumeInput())163        s.add_action(Scripts.story.ActRemoveCamera('AntCloseCam'))164        s.add_action(Scripts.story.ActRemoveCamera('AntCrackCam'))165        s.add_action(Scripts.story.ActRemoveCamera('AntCrackCamIn'))166        s.add_action(Scripts.story.ActRemoveCamera('AntMidCam'))167        s.add_action(Scripts.story.ActRemoveFocalPoint('Ant'))168        s.add_action(bat.story.ActActionStop(Ant.L_IDLE))169        s.add_successor(self.rootState)170    def create_conversation(self):171        '''172        State graph that plays when Cargo approaches the ant at the tree door.173        '''174        s = sconv_start = bat.story.State("Talk")175        s.add_condition(Scripts.story.CondNotInShell())176        s.add_condition(bat.story.CondEvent("ApproachAnt", self))177        s.add_action(Scripts.story.ActSuspendInput())178        s.add_event("StartLoading", self)179        # Catch-many state for when the user cancels a dialogue. Should only be180        # allowed if the conversation has been played once already.181        scancel = bat.story.State("Cancel")182        scancel.add_condition(bat.story.CondEvent('DialogueCancelled', self))183        scancel.add_condition(bat.story.CondStore('/game/level/antConversation1', True, default=False))184        # Start conversation185        s = s.create_successor()186        s.add_condition(bat.story.CondNextFrame())187        s.add_condition(bat.story.CondWait(0.5))188        s.add_event("FinishLoading", self)189        s.add_action(Scripts.story.ActSetFocalPoint('Ant'))190        s.add_action(Scripts.story.ActSetCamera('AntCloseCam'))191        s.add_event("TeleportSnail", "HP_SnailTalkPos")192        # Reset camera pos193        s.add_action(bat.story.ActAction('HP_AntConverse_Cam', 1, 1, 0, ob='AntCloseCam'))194        s.add_action(bat.story.ActAction('HP_AntCrackCam', 1, 1, 0, ob='AntCrackCam'))195        sKnock = s.create_sub_step("Knock sound")196        sKnock.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 34.5, tap=True))197        sKnock.add_action(self.knock_sound_action)198        # Raises head, takes deep breath199        s = s.create_successor()200        s.add_condition(bat.story.CondWait(2))201        s.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 38))202        s.add_action(bat.story.ActAction('HP_AntConverse', 30, 70, Ant.L_IDLE,203                play_mode=bge.logic.KX_ACTION_MODE_LOOP))204        s.add_action(bat.story.ActAction('HP_AntConverse', 1, 30, Ant.L_ANIM))205        s = s.create_successor()206        s.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 20))207        s.add_event("ShowDialogue", "Mmmm, smell that?")208        s.add_action(bat.story.ActSound('//Sound/ant.question.ogg'))209        # Gestures fiercely at Cargo210        scancel.add_predecessor(s)211        s = s.create_successor()212        s.add_condition(bat.story.CondEvent("DialogueDismissed", self))213        s.add_action(bat.story.ActGeneric(self.drop_pick))214        s.add_event("ShowDialogue", "Doesn't it smell amazing? So sweet! So sugary!")215        s.add_action(bat.story.ActSound('//Sound/ant.outrage.ogg'))216        s.add_action(bat.story.ActAction('HP_AntConverse', 90, 93, Ant.L_IDLE,217                play_mode=bge.logic.KX_ACTION_MODE_LOOP, blendin=5.0))218        s.add_action(bat.story.ActAction('HP_AntConverse', 70, 90, Ant.L_ANIM, blendin=5.0))219        s.add_action(bat.story.ActAction('HP_AntConverse_Cam', 70, 90, 0, ob='AntCloseCam'))220        sdrop_pick = s.create_sub_step("Adjust influence")221        sdrop_pick.add_action(bat.story.ActConstraintFade("Hand.L", "Copy Transforms",222                1.0, 0.0, 70.0, 76.0, Ant.L_ANIM))223        # Step sounds224        sstep = s.create_sub_step()225        sstep.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 76, tap=True))226        sstep.add_action(self.step_sound_action)227        sstep = s.create_sub_step()228        sstep.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 82, tap=True))229        sstep.add_action(self.step_sound_action)230        # Holds fists tight; then, gestures towards the tree231        scancel.add_predecessor(s)232        s = s.create_successor()233        s.add_condition(bat.story.CondEvent("DialogueDismissed", self))234        s.add_action(bat.story.ActActionStop(Ant.L_IDLE))235        s.add_action(bat.story.ActAction('HP_AntConverse', 95, 160, Ant.L_ANIM, blendin=2.0))236        s.add_event("ShowDialogue", "I've got to have it! But this wood is just too strong,")237#         s.add_action(bat.story.ActSound('//Sound/ant.mutter3.ogg'))238        sswitch_cam = s.create_sub_step("Switch camera")239        sswitch_cam.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 126, tap=True))240        sswitch_cam.add_action(Scripts.story.ActSetCamera('AntCrackCam'))241        sswitch_cam.add_action(bat.story.ActAction('HP_AntCrackCam', 140, 360, 0,242                ob='AntCrackCam'))243        sloop = s.create_sub_step("Loop")244        sloop.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 160, tap=True))245        sloop.add_action(bat.story.ActAction('HP_AntConverse', 160, 230, Ant.L_IDLE,246                play_mode=bge.logic.KX_ACTION_MODE_LOOP, blendin=2.0))247        # Sizes up door with hands in front of his eyes248        scancel.add_predecessor(s)249        s = s.create_successor()250        s.add_condition(bat.story.CondEvent("DialogueDismissed", self))251        s.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 140))252        s.add_event("ShowDialogue", "... and this crack is too small, even for me.")253#         s.add_action(bat.story.ActSound('//Sound/ant.mutter2.ogg'))254        s.add_action(bat.story.ActAction('HP_AntConverse', 240, 255, Ant.L_ANIM, blendin=2.0))255        s.add_action(Scripts.story.ActRemoveCamera('AntCrackCam'))256        s.add_action(Scripts.story.ActSetCamera('AntCrackCamIn'))257        sloop = s.create_sub_step("Loop")258        sloop.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 255, tap=True))259        sloop.add_action(bat.story.ActAction('HP_AntConverse', 255, 283, Ant.L_IDLE,260                play_mode=bge.logic.KX_ACTION_MODE_LOOP, blendin=2.0))261        # Step sounds262        sstep = s.create_sub_step()263        sstep.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 245, tap=True))264        sstep.add_action(self.step_sound_action)265        sstep = s.create_sub_step()266        sstep.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 248, tap=True))267        sstep.add_action(self.step_sound_action)268        sstep = s.create_sub_step()269        sstep.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 267, tap=True))270        sstep.add_action(self.step_sound_action)271        sstep = s.create_sub_step()272        sstep.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 272, tap=True))273        sstep.add_action(self.step_sound_action)274        # Pauses to consider275        scancel.add_predecessor(s)276        s = s.create_successor()277        s.add_condition(bat.story.CondEvent("DialogueDismissed", self))278        s.add_event("ShowDialogue", "If only I had something stronger...")279        s.add_action(bat.story.ActSound('//Sound/ant.mutter1.ogg'))280        s.add_action(bat.story.ActAction('HP_AntConverse', 290, 300, Ant.L_ANIM, blendin=1.0))281        s.add_action(Scripts.story.ActRemoveCamera('AntCrackCamIn'))282        s.add_action(Scripts.story.ActSetCamera('AntCloseCam'))283        sloop = s.create_sub_step("Loop")284        sloop.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 300, tap=True))285        sloop.add_action(bat.story.ActAction('HP_AntConverse', 300, 347, Ant.L_IDLE,286                play_mode=bge.logic.KX_ACTION_MODE_LOOP, blendin=2.0))287        # Picks up mattock, and glares at the door288        scancel.add_predecessor(s)289        s = s.create_successor()290        s.add_condition(bat.story.CondEvent("DialogueDismissed", self))291        s.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 300))292        s.add_action(bat.story.ActActionStop(Ant.L_IDLE))293        s.add_action(bat.story.ActAction('HP_AntConverse', 360, 407, Ant.L_ANIM, blendin=1.0))294        s.add_event("ShowDialogue", "But I won't give up!")295#         s.add_action(bat.story.ActSound('//Sound/ant.surprise.ogg'))296        sgrab_pickR = s.create_sub_step("Grab pick - right hand")297        sgrab_pickR.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 370.5, tap=True))298        sgrab_pickR.add_action(bat.story.ActGeneric(self.pick_up))299        sgrab_pickL = s.create_sub_step("Grab pick - left hand")300        sgrab_pickL.add_action(bat.story.ActConstraintFade("Hand.L", "Copy Transforms",301                0.0, 1.0, 401.0, 403.0, Ant.L_ANIM))302        sloop = s.create_sub_step("Loop")303        sloop.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 407, tap=True))304        sloop.add_action(bat.story.ActAction('HP_AntConverse', 407, 440, Ant.L_IDLE,305                play_mode=bge.logic.KX_ACTION_MODE_LOOP, blendin=2.0))306        # Step sounds307        sstep = s.create_sub_step()308        sstep.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 367, tap=True))309        sstep.add_action(self.step_sound_action)310        sstep = s.create_sub_step()311        sstep.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 373, tap=True))312        sstep.add_action(self.step_sound_action)313        sstep = s.create_sub_step()314        sstep.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 392, tap=True))315        sstep.add_action(self.step_sound_action)316        # Play the first bit of the digging animation317        scancel.add_predecessor(s)318        s = s.create_successor()319        s.add_condition(bat.story.CondEvent("DialogueDismissed", self))320        s.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 407))321        s.add_action(bat.story.ActAction('HP_AntConverse', 440, 470, Ant.L_ANIM, blendin=1.0))322        s.add_action(bat.story.ActActionStop(Ant.L_IDLE))323        s.add_action(bat.story.ActConstraintSet("Hand.L", "Copy Transforms", 1.0))324        sKnock = s.create_sub_step("Knock sound")325        sKnock.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 466.5, tap=True))326        sKnock.add_action(self.knock_sound_action)327        # Step sounds328        sstep = s.create_sub_step()329        sstep.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 443, tap=True))330        sstep.add_action(self.step_sound_action)331        sstep = s.create_sub_step()332        sstep.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 446, tap=True))333        sstep.add_action(self.step_sound_action)334        s = s.create_successor()335        s.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 470))336        s.add_action(bat.story.ActStoreSet('/game/level/antConversation1', True))337        s = sconv_end = s.create_successor()338        s.add_predecessor(scancel)339        return sconv_start, sconv_end340    def create_enter_states(self):341        '''State graph that plays when the tree door is broken.'''342        s = senter_start = bat.story.State("Enter start")343        s.add_condition(bat.story.CondEvent("treeDoorBroken", self))344        s.add_action(Scripts.story.ActSetCamera('AntMidCam'))345        s.add_action(Scripts.story.ActSetFocalPoint('Ant'))346        s.add_action(Scripts.story.ActSuspendInput())347        s.add_action(bat.story.ActAction('HP_AntEnter', 1, 40,348                Ant.L_ANIM, blendin=1.0))349        s.add_action(bat.story.ActDestroy(target_descendant='Ant_Pick'))350        sdrop_pick = s.create_sub_step("Adjust influence")351        sdrop_pick.add_action(bat.story.ActConstraintFade("Hand.L",352                "Copy Transforms", 1.0, 0.0, 1.0, 4.0, Ant.L_ANIM))353        s = s.create_successor()354        s.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 25))355        s.add_action(Scripts.story.ActSetCamera('AntVictoryCam'))356        s.add_event("ShowDialogue", "Amazing! You've done it!")357        s.add_action(bat.story.ActSound('//Sound/ant.outrage.ogg'))358        s.add_event("TeleportSnail", "HP_SnailTalkPos")359        sbreathe = s.create_sub_step()360        sbreathe.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 40, tap=True))361        sbreathe.add_action(bat.story.ActAction('HP_AntEnter', 40, 80, Ant.L_ANIM,362                play_mode=bge.logic.KX_ACTION_MODE_LOOP))363        s = s.create_successor()364        s.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 40))365        s.add_condition(bat.story.CondEvent("DialogueDismissed", self))366        s.add_action(Scripts.story.ActSetCamera('AntSniffCam'))367        s.add_event("ShowDialogue", "And look, it's just as I suspected - sugary syrup!")368#         s.add_action(bat.story.ActSound('//Sound/ant.mutter1.ogg'))369        s.add_action(bat.story.ActAction('HP_AntEnter', 80, 100, Ant.L_ANIM,370                blendin=3.0))371        ssniff = s.create_sub_step("Sniff")372        ssniff.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 100, tap=True))373        ssniff.add_action(bat.story.ActAction('HP_AntEnter', 100, 132, Ant.L_ANIM,374                play_mode=bge.logic.KX_ACTION_MODE_LOOP))375        s = s.create_successor()376        s.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 100))377        s.add_condition(bat.story.CondEvent("DialogueDismissed", self))378        s.add_event("ShowDialogue", "Let's find the source. Last one up the tree is a rotten egg!")379        s.add_action(bat.story.ActSound('//Sound/ant.gratitude.ogg'))380        s.add_action(bat.story.ActAction('HP_AntEnter', 132, 153, Ant.L_ANIM,381                blendin=3.0))382        slook = s.create_sub_step("look")383        slook.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 153, tap=True))384        slook.add_action(bat.story.ActAction('HP_AntEnter', 153, 188, Ant.L_ANIM,385                play_mode=bge.logic.KX_ACTION_MODE_LOOP))386        s = s.create_successor()387        s.add_condition(bat.story.CondEvent("DialogueDismissed", self))388        s.add_action(bat.story.ActAction('HP_AntEnter', 188, 230, Ant.L_ANIM,389                blendin=3.0))390        s = senter_end = s.create_successor()391        s.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 230))392        s.add_action(Scripts.story.ActRemoveCamera('AntSniffCam'))393        s.add_action(Scripts.story.ActRemoveCamera('AntVictoryCam'))394        s.add_action(Scripts.story.ActRemoveCamera('AntMidCam'))395        s.add_action(Scripts.story.ActResumeInput())396        s.add_action(bat.story.ActDestroy(ob='Honeypot'))397        s.add_action(bat.story.ActDestroy())398        return senter_start, senter_end399    #########################400    # Dungeon401    #########################402    def create_dungeon_state_graph(self):403        s = self.rootState.create_successor("Init")404        # Hide ant first thing405        s.add_action(bat.story.ActAttrSet('visible', False, target_descendant="Ant_Body"))406        s.add_action(bat.story.ActAttrSet('visible', False, target_descendant="Ant_Pick"))407        # Pick was left outside.408        s.add_action(bat.story.ActConstraintSet("Hand.L", "Copy Transforms", 0))409        s.add_action(bat.story.ActAction('Ant_Idle', 1, 80, Ant.L_IDLE,410                play_mode=bge.logic.KX_ACTION_MODE_LOOP))411        srescue_start, srescue_end = self.create_rescue_states()412        srescue_start.add_predecessor(s)413        sstranded_start, sstranded_end = self.create_stranded_states()414        sstranded_start.add_predecessor(s)415        sgrab_start, sgrab_end = self.create_grab_states()416        sgrab_start.add_predecessor(s)417        # Create a super state to catch when the player leaves. Can't have one418        # for canceling dialogue, because that would catch any dialogue419        # elsewhere in the level.420        self.super_state = bat.story.State('Super')421        s_leave = self.super_state.create_successor('Leave')422        s_leave.add_condition(bat.story.CondEvent('LeaveAnt', self))423        #424        # Loop back to start.425        #426        s = self.s_reset = bat.story.State("Reset")427        s.add_predecessor(s_leave)428        s.add_predecessor(sgrab_end)429        s.add_predecessor(srescue_end)430        s.add_predecessor(sstranded_end)431        s.add_action(Scripts.story.ActResumeInput())432        s.add_action(Scripts.story.ActRemoveCamera('WindowCam'))433        s.add_action(Scripts.story.ActRemoveCamera('AntGrabCam'))434        s.add_action(Scripts.story.ActRemoveFocalPoint('Ant'))435        s.add_action(bat.story.ActActionStop(Ant.L_IDLE))436        s.add_successor(self.rootState)437    def create_grab_states(self):438        #439        # Non-interactive cut-scene: the camera dollys through a window to show440        # the machine room. A bucket rises from the lower level. It is grabbed441        # by the Ant, who pulls it away from the rubber band it is attached to.442        # The force knocks the ant off the ledge and out of view.443        #444        s = s_start = bat.story.State("Grab")445        s.add_condition(bat.story.CondStore('/game/level/AntStranded', False, False))446        s = s.create_successor()447        s.add_condition(bat.story.CondEvent("ApproachWindow", self))448        s.add_action(Scripts.story.ActSuspendInput())449        s.add_action(bat.story.ActAddObject('Thimble_ant'))450        s.add_event('ParkBuckets')451        s.add_event('ForceExitShell')452        s_fra = 855453        e_fra = 1020454        s = s.create_successor()455        s.add_action(Scripts.story.ActSetCamera('WindowCam'))456        s.add_action(Scripts.story.ActSetFocalPoint('Ant'))457        s.add_action(bat.story.ActAttrSet('visible', True, target_descendant="Ant_Body"))458        s.add_action(bat.story.ActAction('Ant_GetThimble', s_fra, e_fra, Ant.L_ANIM))459        s.add_action(bat.story.ActAction('WindowCam', s_fra, e_fra, ob='WindowCam'))460        s.add_action(bat.story.ActAction('AntGrabCam', s_fra, e_fra, ob='AntGrabCam'))461        s.add_action(bat.story.ActAction('RubberBandPluck', s_fra, e_fra, ob='RubberBand_upper'))462        s.add_action(bat.story.ActAction('Thimble_ant_grab', s_fra, e_fra, ob='Thimble_ant'))463        s = s.create_successor()464        s.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 935))465        s.add_action(Scripts.story.ActSetCamera('AntGrabCam'))466        s = s.create_successor()467        s.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 977))468        s.add_action(self.step_sound_action)469        s = s.create_successor()470        s.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 986))471        s.add_action(bat.story.ActSound('//Sound/cc-by/RubberBandTwang.ogg'))472        s = s.create_successor()473        s.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 1020))474        s = s.create_successor()475        s.add_condition(bat.story.CondWait(1))476        s.add_action(bat.story.ActDestroy(ob='Thimble_ant'))477        s.add_action(Scripts.story.ActRemoveCamera('WindowCam'))478        s.add_action(Scripts.story.ActRemoveCamera('WindowCam.001'))479        s.add_action(Scripts.story.ActRemoveCamera('AntGrabCam'))480        s.add_action(Scripts.story.ActRemoveFocalPoint('Ant'))481        # Start the buckets again, and set saved game state. When story state482        # loops, create_stranded_states will be executed instead.483        s = s_end = s.create_successor()484        s.add_event('StartBuckets')485        s.add_action(bat.story.ActStoreSet('/game/level/AntStranded', True))486        s.add_action(bat.story.ActStoreSet('/game/storySummary', 'AntStranded'))487        return s_start, s_end488    def create_stranded_states(self):489        s = s_start = bat.story.State("Stranded")490        s.add_condition(bat.story.CondStore('/game/level/AntStranded', True, False))491        s = s.create_successor('Strand ant')492        s.add_action(bat.story.ActAttrSet('visible', True, target_descendant="Ant_Body"))493        s.add_action(bat.story.ActAction('Ant_Stranded', 1, 1, Ant.L_ANIM))494        s.add_event('SpawnShell', 'Thimble')495        s = s.create_successor()496        s.add_condition(bat.story.CondEvent("ApproachAnt", self))497        s.add_action(Scripts.story.ActSuspendInput())498        s.add_event("StartLoading", self)499        s.add_action(bat.story.ActAction('AntStrandedCamLS_FrontAction', 1, 1, ob='AntStrandedCamLS_Front'))500        s = s.create_successor()501        s.add_condition(bat.story.CondWait(1))502        s.add_action(Scripts.story.ActSetFocalPoint('Ant'))503        s.add_event("TeleportSnail", "AntStranded_SnailTalkPos")504        s.add_action(Scripts.story.ActSetCamera('AntStrandedCamLS_Front'))505        s.add_event("FinishLoading", self)506        s = s.create_successor()507        s.add_condition(bat.story.CondWait(1))508        s.add_event("ShowDialogue", "Cargo! Am I glad to see you!")509        s.add_action(bat.story.ActSound('//Sound/ant.greeting.ogg'))510        s.add_action(bat.story.ActAction('Ant_Stranded', 1, 22, Ant.L_ANIM))511        s = s.create_successor()512        s.add_condition(bat.story.CondEvent("DialogueDismissed", self))513        s.add_event("ShowDialogue", "This is a bit embarrassing, but I fell down, and now I'm stuck.")514        s.add_action(bat.story.ActAction('Ant_Stranded', 30, 70, Ant.L_ANIM))515        s = s.create_successor()516        s.add_condition(bat.story.CondEvent("DialogueDismissed", self))517        s.add_event("ShowDialogue", "I was obsessed with the honey. I couldn't stop eating it.")518        s.add_action(bat.story.ActSound('//Sound/ant.mutter2.ogg'))519        s.add_action(bat.story.ActAction('Ant_Stranded', 90, 120, Ant.L_ANIM))520        s.add_action(bat.story.ActAction('AntStrandedCamLS_FrontAction', 90, 140, ob='AntStrandedCamLS_Front'))521        sub = s.create_sub_step()522        sub.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 103, tap=True))523        sub.add_action(self.step_sound_action)524        s = s.create_successor()525        s.add_condition(bat.story.CondEvent("DialogueDismissed", self))526        s.add_action(bat.story.ActAction('Ant_Stranded', 150, 180, Ant.L_ANIM))527        s.add_event("ShowDialogue", "Then I thought, I should take some home to my family, you know?")528        s = s.create_successor()529        s.add_condition(bat.story.CondEvent("DialogueDismissed", self))530        s.add_action(Scripts.story.ActSetFocalPoint('Thimble'))531        s.add_event("ShowDialogue", "I took this thimble to use as a bucket...")532        s.add_action(bat.story.ActSound('//Sound/ant.mutter1.ogg'))533        s.add_action(bat.story.ActAction('Ant_Stranded', 200, 225, Ant.L_ANIM))534        s.add_action(Scripts.story.ActSetCamera('AntStrandedCamLS_FrontZoom'))535        s.add_action(bat.story.ActAction('AntStrandedCamLS_FrontAction', 200, 250, ob='AntStrandedCamLS_Front'))536        sub = s.create_sub_step()537        sub.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 207, tap=True))538        sub.add_action(self.step_sound_action)539        sub = s.create_sub_step()540        sub.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 212, tap=True))541        sub.add_action(self.step_sound_action)542        sub = s.create_sub_step()543        sub.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 219, tap=True))544        sub.add_action(self.step_sound_action)545        s = s.create_successor()546        s.add_condition(bat.story.CondEvent("DialogueDismissed", self))547        s.add_action(Scripts.story.ActSetCamera('AntStrandedCamLS'))548        s.add_event("ShowDialogue", "... I feel like such a fool.")549        s = s.create_successor()550        s.add_condition(bat.story.CondEvent("DialogueDismissed", self))551        s.add_action(Scripts.story.ActRemoveFocalPoint('Thimble'))552        s.add_event("ShowDialogue", "I can't walk through the honey: it's too sticky.")553        s.add_action(bat.story.ActAction('AntStrandedCamLS_FrontAction', 90, 90, ob='AntStrandedCamLS_FrontZoom'))554        s = s.create_successor()555        s.add_condition(bat.story.CondEvent("DialogueDismissed", self))556        s.add_action(Scripts.story.ActRemoveCamera('AntStrandedCamLS'))557        s.add_event("ShowDialogue", "But I bet you could do it. Please, help me out!")558        s.add_action(bat.story.ActSound('//Sound/ant.outrage.ogg'))559        s.add_action(bat.story.ActAction('Ant_Stranded', 260, 300, Ant.L_ANIM))560        sub = s.create_sub_step()561        sub.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 283, tap=True))562        sub.add_action(self.step_sound_action)563        sub = s.create_sub_step()564        sub.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 292, tap=True))565        sub.add_action(self.step_sound_action)566        sub = s.create_sub_step()567        sub.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 298, tap=True))568        sub.add_action(self.step_sound_action)569        s = s.create_successor()570        s.add_condition(bat.story.CondEvent("DialogueDismissed", self))571        s.add_action(Scripts.story.ActRemoveCamera('AntStrandedCamLS_FrontZoom'))572        s.add_action(Scripts.story.ActRemoveCamera('AntStrandedCamLS_Front'))573        s.add_action(Scripts.story.ActRemoveCamera('AntStrandedCamLS'))574        s.add_action(Scripts.story.ActRemoveFocalPoint('Thimble'))575        s.add_action(Scripts.story.ActRemoveFocalPoint('Ant'))576        s.add_action(Scripts.story.ActResumeInput())577        # Player is free to move around now. If they go outside of the sensor,578        # the global state will notice and reset.579        s = s.create_successor("BeingRescued")580        s.add_condition(bat.story.CondEventEq("ShellFound", "Thimble", self))581        s = s.create_successor()582        s.add_condition(bat.story.CondWait(0.5))583        s.add_action(Scripts.story.ActSuspendInput())584        s.add_event("ShowDialogue", "You got the Thimble! It's impervious to sharp objects.")585        s = s.create_successor()586        s.add_condition(bat.story.CondEvent("DialogueDismissed", self))587        s.add_action(Scripts.story.ActSetCamera('AntStrandedCamLS_Front'))588        s.add_action(Scripts.story.ActSetFocalPoint('Ant'))589        s.add_event("ShowDialogue", "Hey, nice work! I'll jump on. Thanks a million!")590        s.add_action(bat.story.ActSound('//Sound/ant.graditude.ogg'))591        s.add_action(bat.story.ActAction('Ant_Stranded', 320, 340, Ant.L_ANIM))592        sub = s.create_sub_step()593        sub.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 325, tap=True))594        sub.add_action(self.step_sound_action)595        sub = s.create_sub_step()596        sub.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 329, tap=True))597        sub.add_action(self.step_sound_action)598        sub = s.create_sub_step()599        sub.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 333, tap=True))600        sub.add_action(self.step_sound_action)601        # No animation here; just show the loading screen and teleport ant on to602        # thimble.603        s = s.create_successor()604        s.add_condition(bat.story.CondEvent("DialogueDismissed", self))605        s.add_event("StartLoading", self)606        s = s.create_successor()607        s.add_condition(bat.story.CondWait(1))608        s.add_action(bat.story.ActAction('Ant_SitOnThimble', 1, 1, Ant.L_ANIM))609        s.add_action(bat.story.ActCopyTransform("Thimble"))610        s.add_action(bat.story.ActParentSet("Thimble"))611        s.add_action(Scripts.story.ActRemoveFocalPoint('Ant'))612        s = s.create_successor()613        s.add_condition(bat.story.CondNextFrame())614        s.add_event("FinishLoading", self)615        s.add_action(bat.story.ActStoreSet('/game/storySummary', 'gotThimble'))616        s.add_action(Scripts.story.ActRemoveCamera('AntStrandedCamLS_Front'))617        s.add_action(Scripts.story.ActResumeInput())618        s.add_action(bat.story.ActGeneric(self.prevent_shell_actions))619        # Player is free to move around now. Here, we override the super state620        # transition which watches for the LeaveAnt event.621        s = s.create_successor('Carried ant over honey')622        s.add_condition(bat.story.CondEvent('ReachShore', self))623        s.add_action(bat.story.ActGeneric(self.allow_shell_actions))624        s.add_action(Scripts.story.ActSuspendInput())625        s.add_event("StartLoading", self)626        s = s.create_successor()627        s.add_condition(bat.story.CondNextFrame())628        s.add_condition(bat.story.CondEvent("LoadingScreenShown", self))629        s.add_action(bat.story.ActAction('AntStrandedCam_RescueTopAction', 1, 150, ob='AntStrandedCam_RescueTop'))630        s.add_action(Scripts.story.ActSetCamera('AntStrandedCam_RescueTop'))631        s.add_action(Scripts.story.ActSetFocalPoint('Ant'))632        s.add_action(bat.story.ActParentRemove())633        s = s.create_successor()634        s.add_condition(bat.story.CondNextFrame())635        s.add_action(bat.story.ActCopyTransform("AntSpawnPoint"))636        s.add_event("TeleportSnail", "AntStranded_SnailTalkPos_rescue")637        s.add_action(bat.story.ActAction('Ant_Rescued', 1, 1, Ant.L_ANIM))638        s = s.create_successor()639        s.add_condition(bat.story.CondNextFrame())640        s.add_event("FinishLoading", self)641        s = s.create_successor()642        s.add_condition(bat.story.CondWait(1))643        s.add_action(bat.story.ActAction('Ant_Rescued', 1, 53, Ant.L_ANIM))644        s.add_event("ShowDialogue", "All right - we made it!")645        s.add_action(bat.story.ActSound('//Sound/ant.mutter1.ogg'))646        s = s.create_successor()647        s.add_condition(bat.story.CondEvent("DialogueDismissed", self))648        s.add_event('ParkBuckets')649        s.add_action(Scripts.story.ActSetCamera('AntStrandedCam_RescueFront'))650        s.add_action(bat.story.ActAction('Ant_Rescued', 78, 151, Ant.L_ANIM))651        s.add_event("ShowDialogue", "I bet that was the strangest delivery you ever made, eh? He-he.")652        s = s.create_successor()653        s.add_condition(bat.story.CondEvent("DialogueDismissed", self))654        s.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 150))655        s.add_action(bat.story.ActAction('Ant_Rescued', 175, 285, Ant.L_ANIM))656        s.add_event("ShowDialogue", "You know, with that thimble you should be able to sneak past the bees if you want to.")657        s = s.create_successor()658        s.add_condition(bat.story.CondEvent("DialogueDismissed", self))659        s.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 285))660        s.add_action(bat.story.ActAction('Ant_Rescued', 313, 373, Ant.L_ANIM))661        s.add_event("ShowDialogue", "There must be another entrance to the hive further up the tree.")662        s.add_action(bat.story.ActAction(663            'AntStrandedCam_RescueFrontAction', 313, 373,664            ob='AntStrandedCam_RescueFront'))665        s = s.create_successor()666        s.add_condition(bat.story.CondEvent("DialogueDismissed", self))667        s.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 370))668        s.add_action(bat.story.ActAction('Ant_Rescued', 398, 523, Ant.L_ANIM))669        s.add_event("ShowDialogue", "Well, I'm going to head outside. I'm looking forward to some fresh air after being stranded!")670        s.add_action(bat.story.ActSound('//Sound/ant.mutter3.ogg'))671        s.add_action(bat.story.ActAction(672            'AntStrandedCam_RescueFrontAction', 398, 555,673            ob='AntStrandedCam_RescueFront'))674        s = s.create_successor()675        s.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 520))676        s.add_condition(bat.story.CondEvent("DialogueDismissed", self))677        s.add_action(bat.story.ActAction('Ant_Rescued', 593, 660, Ant.L_ANIM))678        s.add_action(bat.story.ActStoreSet('/game/level/AntRescued', True))679        sub = s.create_sub_step()680        sub.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 605, tap=True))681        sub.add_action(self.step_sound_action)682        sub = s.create_sub_step()683        sub.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 607, tap=True))684        sub.add_action(self.step_sound_action)685        sub = s.create_sub_step()686        sub.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 611, tap=True))687        sub.add_action(self.step_sound_action)688        sub = s.create_sub_step()689        sub.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 615, tap=True))690        sub.add_action(self.step_sound_action)691        sub = s.create_sub_step()692        sub.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 618, tap=True))693        sub.add_action(self.step_sound_action)694        sub = s.create_sub_step()695        sub.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 621, tap=True))696        sub.add_action(self.step_sound_action)697        sub = s.create_sub_step()698        sub.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 623, tap=True))699        sub.add_action(self.step_sound_action)700        sub = s.create_sub_step()701        sub.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 626, tap=True))702        sub.add_action(self.step_sound_action)703        sub = s.create_sub_step()704        sub.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 103, tap=True))705        sub.add_action(self.step_sound_action)706        sub = s.create_sub_step()707        sub.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 630, tap=True))708        sub.add_action(self.step_sound_action)709        sub = s.create_sub_step()710        sub.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 632, tap=True))711        sub.add_action(self.step_sound_action)712        sub = s.create_sub_step()713        sub.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 636, tap=True))714        sub.add_action(self.step_sound_action)715        s = s.create_successor()716        s.add_condition(bat.story.CondActionGE(Ant.L_ANIM, 660))717        s.add_event('StartBuckets')718        s.add_action(Scripts.story.ActRemoveCamera('AntStrandedCam_RescueFront'))719        s.add_action(Scripts.story.ActRemoveCamera('AntStrandedCam_RescueTop'))720        s.add_action(Scripts.story.ActRemoveFocalPoint('Ant'))721        s.add_action(Scripts.story.ActResumeInput())722        s.add_action(bat.story.ActDestroy())723        s_end = s724        return s_start, s_end725    def create_rescue_states(self):726        # Just destroy the ant: already rescued!727        s = s_start = bat.story.State("Rescued")728        s.add_condition(Scripts.story.CondHasShell('Thimble'))729        s.add_action(bat.story.ActDestroy())730        s = s_end = s.create_successor()731        return s_start, s_end732def test_anim():733    sce = bge.logic.getCurrentScene()734    ant = sce.objects['Ant']735    ant = bat.bats.mutate(ant)...story_cargo_house.py
Source:story_cargo_house.py  
...81            o = c.sensors['sParticleHook'].owner82            o['nParticles'] = o['nParticles'] + number83            o['maxSpeed'] = maxSpeed84        s = self.rootState.create_successor("Init")85        s.add_action(Scripts.story.ActSuspendInput())86        s.add_event("ShowControlsInfo")87        s = s.create_successor("Init")88        s.add_condition(bat.story.CondWait(1))89        s.add_event("ForceEnterShell", False)90        s.add_action(Scripts.story.ActSetCamera('WormCamera_Enter'))91        s.add_action(Scripts.story.ActSetFocalPoint('CargoHoldAuto'))92        s.add_action(bat.story.ActAction('ParticleEmitMove', 1, 1, Worm.L_ANIM, "ParticleEmitterLoc"))93        s.add_action(bat.story.ActGenericContext(letter_manual))94        #95        # Peer out of ground96        #97        s = s.create_successor("Begin")98        s.add_condition(bat.story.CondEvent('ShellEntered', self))99        s.add_event('AnchorShell', 'CH_ShellAnchor')100        s.add_event("FinishLoading", self)101        s.add_action(bat.story.ActGenericContext(spray_dirt, 10, 15.0))102        s.add_action(bat.story.ActAction('BurstOut', 1, 75, Worm.L_ANIM))103        s.add_action(bat.story.ActAction('BurstOut_S', 1, 75, Worm.L_ANIM, 'WormBody'))104        s.add_action(Scripts.story.ActSleepParticles(start=True, scale=1, ob='Shell'))105        s = s.create_successor("Greet")106        s.add_condition(bat.story.CondActionGE(Worm.L_ANIM, 74.0))107        s.add_event("ShowDialogue", "Cargo?")108        s.add_action(bat.story.ActSound('//Sound/WormQuestion1.ogg', vol=1.5))109        #110        # Get out of the ground111        #112        s = s.create_successor("Get out of the ground")113        s.add_condition(bat.story.CondEvent('DialogueDismissed', self))114        s.add_action(Scripts.story.ActRemoveCamera('WormCamera_Enter'))115        s.add_action(Scripts.story.ActSetCamera('WormCamera_Converse'))116        s.add_action(bat.story.ActAction('BurstOut', 75, 186, Worm.L_ANIM))117        s.add_action(bat.story.ActAction('BurstOut_S', 75, 186, Worm.L_ANIM, 'WormBody'))118        s = s.create_successor()119        s.add_condition(bat.story.CondActionGE(Worm.L_ANIM, 115.0))120        s.add_action(bat.story.ActGenericContext(spray_dirt, 3, 10.0))121        s = s.create_successor()122        s.add_condition(bat.story.CondActionGE(Worm.L_ANIM, 147.0))123        s.add_action(bat.story.ActGenericContext(spray_dirt, 5, 10.0))124        s = s.create_successor()125        s.add_condition(bat.story.CondActionGE(Worm.L_ANIM, 153.0))126        s.add_action(bat.story.ActGenericContext(spray_dirt, 5, 10.0))127        #128        # Knock on shell129        #130        s = s.create_successor("Knock on shell")131        s.add_condition(bat.story.CondActionGE(Worm.L_ANIM, 185.0))132        s.add_action(Scripts.story.ActSetCamera('WormCamera_Knock'))133        s.add_event("ShowDialogue", "Wake up, Cargo!")134        s.add_action(bat.story.ActAction('BurstOut', 187, 200, Worm.L_ANIM,135                play_mode=bge.logic.KX_ACTION_MODE_LOOP))136        s.add_action(bat.story.ActAction('BurstOut_S', 187, 200, Worm.L_ANIM, 'WormBody'))137        sKnock = s.create_sub_step("Knock sound")138        sKnock.add_condition(bat.story.CondActionGE(Worm.L_ANIM, 189, tap=True))139        sKnock.add_action(bat.story.ActSound('//Sound/Knock.ogg', vol=0.6, pitchmin=0.8,140                pitchmax= 1.1))141        s = s.create_successor()142        s.add_condition(bat.story.CondEvent('DialogueDismissed', self))143        s.add_condition(bat.story.CondActionGE(Worm.L_ANIM, 199))144        s.add_action(bat.story.ActAction('BurstOut', 200, 220, Worm.L_ANIM))145        s.add_action(bat.story.ActAction('BurstOut_S', 200, 220, Worm.L_ANIM, 'WormBody'))146        s.add_action(bat.story.ActSound('//Sound/Knock.ogg', vol=0.6, pitchmin=0.8,147                pitchmax= 1.1))148        s = s.create_successor()149        s.add_condition(bat.story.CondActionGE(Worm.L_ANIM, 200.0))150        s.add_action(Scripts.story.ActRemoveCamera('WormCamera_Knock'))151        #152        # Wake / chastise153        #154        s = s.create_successor("Wake")155        s.add_condition(bat.story.CondActionGE(Worm.L_ANIM, 205.0))156        s.add_event("ForceExitShell", True)157        s.add_action(Scripts.story.ActSleepParticles(start=False, ob='Shell'))158        s = s.create_successor("Chastise")159        s.add_condition(bat.story.CondEvent('ShellExited', self))160        s.add_event("ShowDialogue", "Sleeping in, eh? Don't worry, I won't tell anyone.")161        s.add_action(bat.story.ActSound('//Sound/WormQuestion2.ogg', vol=1.5))162        s = s.create_successor()163        s.add_condition(bat.story.CondEvent('DialogueDismissed', self))164        s.add_event("ShowDialogue", "I have something for you!")165        #166        # Dig up letter167        #168        s = s.create_successor("Dig up letter")169        s.add_condition(bat.story.CondEvent('DialogueDismissed', self))170        s.add_action(bat.story.ActAction('ParticleEmitMove', 2, 2, Worm.L_ANIM, "ParticleEmitterLoc"))171        s.add_action(bat.story.ActAction('BurstOut', 220, 280, Worm.L_ANIM))172        s.add_action(bat.story.ActAction('BurstOut_S', 220, 280, Worm.L_ANIM, 'WormBody'))173        s = s.create_successor()174        s.add_condition(bat.story.CondActionGE(Worm.L_ANIM, 235))175        s.add_action(bat.story.ActGenericContext(spray_dirt, 3, 10.0))176        s = s.create_successor()177        s.add_condition(bat.story.CondActionGE(Worm.L_ANIM, 241))178        s.add_action(bat.story.ActGenericContext(spray_dirt, 3, 7.0))179        s = s.create_successor()180        s.add_condition(bat.story.CondActionGE(Worm.L_ANIM, 249))181        s.add_action(bat.story.ActGenericContext(spray_dirt, 3, 7.0))182        s = s.create_successor()183        s.add_condition(bat.story.CondActionGE(Worm.L_ANIM, 257))184        s.add_action(bat.story.ActGenericContext(spray_dirt, 3, 7.0))185        s = s.create_successor()186        s.add_condition(bat.story.CondActionGE(Worm.L_ANIM, 265))187        s.add_action(bat.story.ActGenericContext(spray_dirt, 3, 7.0))188        s.add_action(bat.story.ActGenericContext(letter_auto))189        s = s.create_successor()190        s.add_condition(bat.story.CondActionGE(Worm.L_ANIM, 275))191        s.add_action(Scripts.story.ActSetCamera('WormCamera_Envelope'))192        s = s.create_successor()193        s.add_condition(bat.story.CondActionGE(Worm.L_ANIM, 279))194        s.add_event("ShowDialogue",195                ("Ta-da! Please deliver this express \[envelope] for me.",196                        ("Of course!", "I'm too sleepy...")))197        s.add_action(bat.story.ActSound('//Sound/WormTaDa.ogg', vol=1.5))198        #199        # FORK - conversation splits.200        #201        syes = s.create_successor("Yes")202        # Use 'not equal' here, because it's safer than using two equals (in203        # case the dialogue returns a value other than 1 or 0).204        syes.add_condition(bat.story.CondEventNe("DialogueDismissed", 1, self))205        syes.add_event("ShowDialogue", "Great!")206        syes.add_action(bat.story.ActSound('//Sound/WormPleased.ogg', vol=1.5))207        sno = s.create_successor("No")208        sno.add_condition(bat.story.CondEventEq("DialogueDismissed", 1, self))209        sno.add_event("ShowDialogue", "Oh, come on! It's your job, after all.")210        sno.add_action(bat.story.ActSound('//Sound/WormFrown.ogg', vol=1.5))211        # Lots of text, so wait for a second.212        sno = sno.create_successor()213        sno.add_condition(bat.story.CondWait(1))214        #215        # Give letter - conversation merges.216        #217        s = bat.story.State("Give letter")218        syes.add_successor(s)219        sno.add_successor(s)220        s.add_action(Scripts.story.ActRemoveCamera('WormCamera_Envelope'))221        s.add_action(bat.story.ActAction('BurstOut', 290, 330, Worm.L_ANIM))222        s.add_action(bat.story.ActAction('BurstOut_S', 290, 330, Worm.L_ANIM, 'WormBody'))223        s = s.create_successor()224        s.add_condition(bat.story.CondActionGE(Worm.L_ANIM, 308))225        s.add_action(bat.story.ActGenericContext(letter_manual))226        s = s.create_successor()227        s.add_condition(bat.story.CondActionGE(Worm.L_ANIM, 315))228        s.add_action(bat.story.ActGenericContext(letter_hide))229        #230        # Point to lighthouse231        #232        s = s.create_successor("Point to lighthouse")233        s.add_condition(bat.story.CondActionGE(Worm.L_ANIM, 330))234        s.add_event("ShowDialogue", "Please take it to the lighthouse keeper as soon as possible. I have paid for express mail!")235        s.add_action(bat.story.ActAction('BurstOut', 360, 395, Worm.L_ANIM))236        s.add_action(bat.story.ActAction('BurstOut_S', 360, 395, Worm.L_ANIM, 'WormBody'))237        s = s.create_successor()238        s.add_condition(bat.story.CondActionGE(Worm.L_ANIM, 360))239        s.add_action(Scripts.story.ActSetCamera('WormCamera_Lighthouse'))240        s.add_action(Scripts.story.ActSetFocalPoint('Torch'))241        s.add_action(Scripts.story.ActShowMarker('Torch'))242        s = s.create_successor()243        s.add_action(Scripts.story.ActSetCamera('WormCamera_Lighthouse_zoom'))244        s = s.create_successor()245        s.add_condition(bat.story.CondActionGE(Worm.L_ANIM, 394))246        s.add_condition(bat.story.CondEvent("DialogueDismissed", self))247        s.add_action(Scripts.story.ActRemoveCamera('WormCamera_Lighthouse_zoom'))248        s.add_action(Scripts.story.ActRemoveCamera('WormCamera_Lighthouse'))249        s.add_action(Scripts.story.ActRemoveFocalPoint('Torch'))250        s.add_action(Scripts.story.ActShowMarker(None))251        s = s.create_successor()252        s.add_event("ShowDialogue", "The lighthouse is marked in red on your map.")253        s.add_action(bat.story.ActStoreSet('/game/level/mapGoal', 'Torch'))254        s.add_event("MapGoalChanged")255        s = s.create_successor()256        s.add_condition(bat.story.CondEvent("DialogueDismissed", self))257        s.add_event("ShowDialogue", "See you later!")258        s.add_action(bat.story.ActSound('//Sound/WormBye.ogg', vol=1.5))259        s.add_action(bat.story.ActAction('BurstOut', 395, 420, Worm.L_ANIM))260        s.add_action(bat.story.ActAction('BurstOut_S', 395, 420, Worm.L_ANIM, 'WormBody'))261        s = s.create_successor()262        s.add_condition(bat.story.CondActionGE(Worm.L_ANIM, 420))263        s.add_condition(bat.story.CondEvent("DialogueDismissed", self))264        s.add_action(bat.story.ActAction('BurstOut', 420, 540, Worm.L_ANIM))265        s.add_action(bat.story.ActAction('BurstOut_S', 420, 540, Worm.L_ANIM, 'WormBody'))266        s.add_action(bat.story.ActMusicStop(name='worm'))267        #268        # Return to game269        #270        s = s.create_successor("Return to game")271        s.add_condition(bat.story.CondActionGE(Worm.L_ANIM, 460))272        s.add_action(bat.story.ActAction('SodFade', 120, 200, 0, 'Sods'))273        s.add_action(Scripts.story.ActResumeInput())274        s.add_action(Scripts.story.ActRemoveCamera('WormCamera_Lighthouse_zoom'))275        s.add_action(Scripts.story.ActRemoveCamera('WormCamera_Converse'))276        s.add_action(Scripts.story.ActRemoveFocalPoint('CargoHoldAuto'))277        s.add_action(bat.story.ActStoreSet('/game/level/wormMissionStarted', True))278        s.add_action(bat.story.ActStoreSet('/game/storySummary', 'wormMissionStarted'))279        #280        # Clean up. At this point, the worm is completely hidden and the sods have faded.281        #282        s = s.create_successor("Clean up")283        s.add_condition(bat.story.CondActionGE(Worm.L_ANIM, 540))284        s.add_action(bat.story.ActDestroy())285    def isInsideWorld(self):...MainWindow.py
Source:MainWindow.py  
...60        self.addDockWidget(Qt.LeftDockWidgetArea, self._main_dock_widget)61        self.centralWidget()62        # -------------      actions       -----------------63        # Data64        self._load_file_action = self.add_action("Load", "load", "Load file", True, self.on_load_file, QKSec.Open)65        self._new_data_set = self.add_action("New data set", "new-data-set", "New data set", True, self.on_new_data_set, QKSec.Save)66        self._edit_data_set = self.add_action("Edit data set", "edit-data-set", "Edit data set", True, self.on_edit_data_set, QKSec.Copy)67        # Models68        self._models = self.add_action("Models", "models", "View models", True, self.on_models, QKSec.Paste)69        self._create_PCA = self.add_action("Create PCA", "models", "Create PCA", True, self.on_create_PCA, QKSec.Paste)70        # Explore71        self._line_plot = self.add_action("Line plot", "line_plot", "Line plot", True, self.on_line_plot, QKSec.Paste)72        self._obs_plot = self.add_action("Obs plot", "obs_plot", "Observations plot", True, self.on_obs_plot, QKSec.Paste)73        self._vars_plot = self.add_action("Vars plot", "vars_plot", "Observations plot", True, self.on_vars_plot, QKSec.Paste)74        self._scatter = self.add_action("Scatter", "scatter", "Scatter plot", True, self.on_scatter, QKSec.Paste)75        self._populations = self.add_action("Populations", "populations", "Populations plot", True, self.on_populations, QKSec.Paste)76        self._correlation_plot = self.add_action("Correlation", "correlation", "Plot correlation", True, self.on_correlation, QKSec.Paste)77        # Analyze78        self._variance_plot = self.add_action("Variance exp.", "variance_explained", "Variance explained plot", True, self.on_variance_explained, QKSec.Paste)79        self._scores = self.add_action("Score plot", "scores", "View scores", True, self.on_scores, QKSec.Paste)80        self._line_scores = self.add_action("Line scores", "line_scores", "View scores", True, self.on_line_scores, QKSec.Paste)81        self._loadings = self.add_action("Loadings", "loadings", "View loadings", True, self.on_loadings, QKSec.Paste)82        self._line_loadings = self.add_action("Line loadings", "line_loadings", "View loadings", True, self.on_line_loadings, QKSec.Paste)83        self._t2_hotelling = self.add_action("Hotelling's T2", "hotelling", "View Hotelling's T2", True, self.on_t2_hotelling, QKSec.Paste)84        self._SPE = self.add_action("SPE-X", "spe", "View SPE-X", True, self.on_spe, QKSec.Paste)85        # Selection86        self._exclude = self.add_action("Exclude", "exclude", "Create data set", True, self.on_exclude, QKSec.Paste)87        self._include = self.add_action("Include", "include", "Create data set", True, self.on_include, QKSec.Paste)88        self._paste_action = self.add_action("Paste", "paste", "Paste from clipboard", True, self.on_paste, QKSec.Paste)89        self._zoom_action = self.add_action("Zoom", "zoom", "Zoom in on document", True, self.on_zoom)90        self._about_action = self.add_action("About", "about", "About QupyRibbon", True, self.on_about)91        self._license_action = self.add_action("License", "license", "Licence for this software", True, self.on_license)92        # -------------      textboxes       -----------------93        self._text_box1 = RibbonTextbox("Text 1", self.on_text_box1_changed, 80)94        self._text_box2 = RibbonTextbox("Text 2", self.on_text_box1_changed, 80)95        self._text_box3 = RibbonTextbox("Text 3", self.on_text_box1_changed, 80)96        # Menu bar97        # Icons98        spacer = QtGui.QWidget()99        spacer.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)100        layout = QHBoxLayout(self)101        new_project_icon = QtGui.QPixmap("icons/save.png")102        self.new_project_button = QPushButton(self)103        self.new_project_button.setIcon(QIcon(new_project_icon))104        self.new_project_button.setObjectName('FromMenuBar')105        load_icon = QtGui.QPixmap("icons/load_project.png")106        self.load_button = QPushButton(self)107        self.load_button.setIcon(QIcon(load_icon))108        self.load_button.setObjectName('FromMenuBar')109        save_icon = QtGui.QPixmap("icons/save.png")110        self.save_button = QPushButton(self)111        self.save_button.setIcon(QIcon(save_icon))112        self.save_button.setObjectName('FromMenuBar')113        # Model selector114        label = QLabel(self)115        # TODO: Add a data set selector. By default, selected data set is the data set from the116        #  last selected model. Indicate when a selected data set doesn't correspond to selected model117        label.setText('Selected model: ')118        self.model_selector = QComboBox(self)119        self.model_selector.setMinimumWidth(300)120        # layout.addWidget(self.new_project_button)121        # layout.addWidget(self.load_button)122        # layout.addWidget(self.save_button)123        layout.addWidget(spacer)124        layout.addWidget(label)125        layout.addWidget(self.model_selector)126        self.menuBar().setMinimumHeight(45)127        # TODO: reduce margins. That doesn't seems to work128        self.menuBar().setContentsMargins(0, 0, 0, 0)129        self.menuBar().setLayout(layout)130        self.menuBar().setStyleSheet(get_style().get_stylesheet("main"))131        # Ribbon132        self._ribbon = RibbonWidget(self)133        self.addToolBar(self._ribbon)134        self.init_ribbon()135    def add_action(self, caption, icon_name, status_tip, icon_visible, connection, shortcut=None):136        action = QAction(get_icon(icon_name), caption, self)137        action.setStatusTip(status_tip)138        action.triggered.connect(connection)139        action.setIconVisibleInMenu(icon_visible)140        if shortcut is not None:141            action.setShortcuts(shortcut)142        self.addAction(action)143        return action144    def init_ribbon(self):145        # Data146        home_tab = self._ribbon.add_ribbon_tab("Data")147        file_pane = home_tab.add_ribbon_pane("File")148        file_pane.add_ribbon_widget(RibbonButton(self, self._load_file_action, True))149        edit_panel = home_tab.add_ribbon_pane("Data set")...scene_manager.py
Source:scene_manager.py  
...97        self._add_dialog(cast, ENTER_TO_START)98        self._add_initialize_script(script)99        self._add_load_script(script)100        script.clear_actions(INPUT)101        script.add_action(INPUT, ChangeSceneAction(self.KEYBOARD_SERVICE, NEXT_LEVEL))102        self._add_output_script(script)103        self._add_unload_script(script)104        self._add_release_script(script)105        106    def _prepare_next_level(self, cast, script):107        self._add_ball(cast)108        # self._add_bricks(cast)109        self._add_racket(cast)110        self._add_racket_2(cast) 111        self._add_dialog(cast, PREP_TO_LAUNCH)112        script.clear_actions(INPUT)113        script.add_action(INPUT, TimedChangeSceneAction(IN_PLAY, 2))114        self._add_output_script(script)115        script.add_action(OUTPUT, PlaySoundAction(self.AUDIO_SERVICE, WELCOME_SOUND))116        117    def _prepare_try_again(self, cast, script):118        self._add_ball(cast)119        self._add_racket(cast)120        self._add_racket_2(cast)121        self._add_dialog(cast, PREP_TO_LAUNCH)122        script.clear_actions(INPUT)123        script.add_action(INPUT, TimedChangeSceneAction(IN_PLAY, 2))124        self._add_update_script(script)125        self._add_output_script(script)126    def _prepare_in_play(self, cast, script):127        self._activate_ball(cast)128        cast.clear_actors(DIALOG_GROUP)129        script.clear_actions(INPUT)130        script.add_action(INPUT, self.CONTROL_RACKET_1_ACTION)131        script.add_action(INPUT, self.CONTROL_RACKET_2_ACTION)132        self._add_update_script(script)133        self._add_output_script(script)134    def _prepare_game_over(self, cast, script):135        self._add_ball(cast)136        self._add_racket(cast)137        self._add_racket_2(cast)138        self._add_dialog(cast, WAS_GOOD_GAME)139        script.clear_actions(INPUT)140        script.add_action(INPUT, TimedChangeSceneAction(NEW_GAME, 5))141        script.clear_actions(UPDATE)142        self._add_output_script(script)143    # ----------------------------------------------------------------------------------------------144    # casting methods145    # ----------------------------------------------------------------------------------------------146    147    def _activate_ball(self, cast):148        ball = cast.get_first_actor(BALL_GROUP)149        ball.release()150    def _add_ball(self, cast):151        cast.clear_actors(BALL_GROUP)152        x = CENTER_X - BALL_WIDTH / 2153        y = SCREEN_HEIGHT - RACKET_HEIGHT - BALL_HEIGHT  154        position = Point(x, y)155        size = Point(BALL_WIDTH, BALL_HEIGHT)156        velocity = Point(0, 0)157        body = Body(position, size, velocity)158        image = Image(BALL_IMAGE)159        ball = Ball(body, image, True)160        cast.add_actor(BALL_GROUP, ball)161    def _add_dialog(self, cast, message):162        cast.clear_actors(DIALOG_GROUP)163        text = Text(message, FONT_FILE, FONT_SMALL, ALIGN_CENTER)164        position = Point(CENTER_X, CENTER_Y)165        label = Label(text, position)166        cast.add_actor(DIALOG_GROUP, label)167    def _add_score1(self, cast):168        cast.clear_actors(P1_GROUP)169        text = Text(SCORE_FORMAT, FONT_FILE, FONT_SMALL, ALIGN_CENTER)170        position = Point(100, HUD_MARGIN)171        label = Label(text, position)172        cast.add_actor(P1_GROUP, label)173    def _add_score2(self, cast):174        cast.clear_actors(P2_GROUP)175        text = Text(SCORE_FORMAT, FONT_FILE, FONT_SMALL, ALIGN_CENTER)176        position = Point(SCREEN_WIDTH - 100, HUD_MARGIN)177        label = Label(text, position)178        cast.add_actor(P2_GROUP, label)179    def _add_stats(self, cast):180        cast.clear_actors(STATS_GROUP)181        stats = Stats()182        cast.add_actor(STATS_GROUP, stats)183    def _add_racket(self, cast):184        cast.clear_actors(RACKET_GROUP_1)185        x = 0 + 50 + RACKET_WIDTH / 2186        y = CENTER_Y - RACKET_HEIGHT / 2187        position = Point(x, y)188        size = Point(RACKET_WIDTH, RACKET_HEIGHT)189        velocity = Point(0, 0)190        body = Body(position, size, velocity)191        animation = Animation(RACKET_IMAGES_1, RACKET_RATE)192        racket = Racket(body, animation)193        cast.add_actor(RACKET_GROUP_1, racket)194    def _add_racket_2(self, cast):195        cast.clear_actors(RACKET_GROUP_2)196        x = SCREEN_WIDTH - 50 - RACKET_WIDTH / 2197        y = CENTER_Y - RACKET_HEIGHT / 2198        position = Point(x, y)199        size = Point(RACKET_WIDTH, RACKET_HEIGHT)200        velocity = Point(0, 0)201        body = Body(position, size, velocity)202        animation = Animation(RACKET_IMAGES_2, RACKET_RATE)203        racket = Racket(body, animation)204        cast.add_actor(RACKET_GROUP_2, racket)205    # ----------------------------------------------------------------------------------------------206    # scripting methods207    # ----------------------------------------------------------------------------------------------208    def _add_initialize_script(self, script):209        script.clear_actions(INITIALIZE)210        script.add_action(INITIALIZE, self.INITIALIZE_DEVICES_ACTION)211    def _add_load_script(self, script):212        script.clear_actions(LOAD)213        script.add_action(LOAD, self.LOAD_ASSETS_ACTION)214    215    def _add_output_script(self, script):216        script.clear_actions(OUTPUT)217        script.add_action(OUTPUT, self.START_DRAWING_ACTION)218        script.add_action(OUTPUT, self.DRAW_HUD_ACTION)219        script.add_action(OUTPUT, self.DRAW_BALL_ACTION)220        # script.add_action(OUTPUT, self.DRAW_BRICKS_ACTION)221        script.add_action(OUTPUT, self.DRAW_RACKET_1_ACTION)222        script.add_action(OUTPUT, self.DRAW_RACKET_2_ACTION)223        script.add_action(OUTPUT, self.DRAW_DIALOG_ACTION)224        script.add_action(OUTPUT, self.END_DRAWING_ACTION)225    def _add_release_script(self, script):226        script.clear_actions(RELEASE)227        script.add_action(RELEASE, self.RELEASE_DEVICES_ACTION)228    229    def _add_unload_script(self, script):230        script.clear_actions(UNLOAD)231        script.add_action(UNLOAD, self.UNLOAD_ASSETS_ACTION)232        233    def _add_update_script(self, script):234        script.clear_actions(UPDATE)235        script.add_action(UPDATE, self.MOVE_BALL_ACTION)236        script.add_action(UPDATE, self.MOVE_RACKET_1_ACTION)237        script.add_action(UPDATE, self.MOVE_RACKET_2_ACTION)238        script.add_action(UPDATE, self.COLLIDE_BORDERS_ACTION)239        # script.add_action(UPDATE, self.COLLIDE_BRICKS_ACTION)240        script.add_action(UPDATE, self.COLLIDE_RACKET_1_ACTION)241        script.add_action(UPDATE, self.COLLIDE_RACKET_2_ACTION)242        script.add_action(UPDATE, self.MOVE_RACKET_1_ACTION)243        script.add_action(UPDATE, self.MOVE_RACKET_2_ACTION)...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
