pf.set_destination(dest_row, dest_col) blocker = NPC(model=Sprites.SKULL) g.current_board().place_item(blocker, 20, 1) wall = Wall(model=Sprites.WALL) wall.animation = Animation(animated_object=wall) wall.animation.add_frame(Sprites.BANKNOTE_DOLLARS) wall.animation.add_frame(Sprites.BANKNOTE_EUROS) wall.animation.add_frame(Sprites.BANKNOTE_WINGS) g.current_board().place_item(wall, 5, 25) # 43,28 43,34 39,34 39,40 44,40 44,28 patroller = NPC(model=Sprites.ALIEN, name='patroller') patroller.actuator = PathFinder(game=g, actuated_object=patroller) g.add_npc(1, patroller, 42, 28) patroller.actuator.set_destination(43, 29) patroller.actuator.add_waypoint(43, 29) patroller.actuator.add_waypoint(43, 34) patroller.actuator.add_waypoint(39, 34) patroller.actuator.add_waypoint(39, 40) patroller.actuator.add_waypoint(44, 40) patroller.actuator.add_waypoint(44, 28) patroller.animation = Animation( animated_object=patroller, refresh_screen=redraw, display_time=0.5, ) # patroller.animation.add_frame('--') # patroller.animation.add_frame(' |') patroller.animation.add_frame(Sprites.ALIEN)
def create_wizard(): global game key = '' while True: game.clear_screen() print(Utils.green_bright("\t\tObject creation wizard")) print('What do you want to create: a NPC or a structure?') print('1 - NPC (Non Playable Character)') print('2 - Structure (Wall, Door, Treasure, Portal, Trees, etc.)') key = Utils.get_key() if key == '1' or key == '2': break if key == '1': game.clear_screen() print( Utils.green_bright("\t\tObject creation wizard: ") + Utils.cyan_bright("NPC")) new_object = NPC() print("First give a name to your NPC. Default value: " + new_object.name) r = str(input('(Enter name)> ')) if len(r) > 0: new_object.name = r print( "Then give it a type. A type is important as it allows grouping.\nType is a string. Default value: " + new_object.type) r = str(input('(Enter type)> ')) if len(r) > 0: new_object.type = r print("Now we need a model. Default value: " + new_object.model) input('Hit "Enter" when you are ready to choose a model.') new_object.model = model_picker() game.clear_screen() print( Utils.green_bright("\t\tObject creation wizard: ") + Utils.cyan_bright("NPC") + f' - {new_object.model}') print( 'We now needs to go through some basic statistics. You can decide to go with default by simply hitting the "Enter" key.' ) r = input_digit( f'Number of cell crossed in one turn. Default: {new_object.step}(type: int) > ' ) if len(r) > 0: new_object.step = int(r) else: # If it's 0 it means it's going to be a static NPC so to prevent python to pass some random pre-initialized default, we explicitly set the Actuator to a static one new_object.actuator = SimpleActuators.RandomActuator(moveset=[]) r = input_digit( f'Max HP (Health Points). Default: {new_object.max_hp}(type: int) > ' ) if len(r) > 0: new_object.max_hp = int(r) new_object.hp = new_object.max_hp r = input_digit( f'Max MP (Mana Points). Default: {new_object.max_mp}(type: int) > ' ) if len(r) > 0: new_object.max_mp = int(r) new_object.mp = new_object.max_mp r = input_digit( f'Remaining lives (it is advised to set that to 1 for a standard NPC). Default: {new_object.remaining_lives}(type: int) > ' ) if len(r) > 0: new_object.remaining_lives = int(r) r = input_digit( f'AP (Attack Power). Default: {new_object.attack_power}(type: int) > ' ) if len(r) > 0: new_object.attack_power = int(r) r = input_digit( f'DP (Defense Power). Default: {new_object.defense_power}(type: int) > ' ) if len(r) > 0: new_object.defense_power = int(r) r = input_digit( f'Strength. Default: {new_object.strength}(type: int) > ') if len(r) > 0: new_object.strength = int(r) r = input_digit( f'Intelligence. Default: {new_object.intelligence}(type: int) > ') if len(r) > 0: new_object.intelligence = int(r) r = input_digit( f'Agility. Default: {new_object.agility}(type: int) > ') if len(r) > 0: new_object.agility = int(r) game.clear_screen() print( "We now need to give some life to that NPC. What kind of movement should it have:" ) print("1 - Randomly chosen from a preset of directions") print("2 - Following a predetermined path") r = Utils.get_key() if r == '1': new_object.actuator = SimpleActuators.RandomActuator(moveset=[]) print( 'Random it is! Now choose from which preset of movements should we give it:' ) print('1 - UP,DOWN,LEFT, RIGHT') print('2 - UP,DOWN') print('3 - LEFT, RIGHT') print('4 - UP,DOWN,LEFT, RIGHT + all DIAGONALES') print( '5 - DIAGONALES (DIAG UP LEFT, DIAG UP RIGHT, etc.) but NO straight UP, DOWN, LEFT and RIGHT' ) print('6 - No movement') r = Utils.get_key() if r == '1': new_object.actuator.moveset = [ Constants.UP, Constants.DOWN, Constants.LEFT, Constants.RIGHT ] elif r == '2': new_object.actuator.moveset = [Constants.UP, Constants.DOWN] elif r == '3': new_object.actuator.moveset = [Constants.RIGHT, Constants.LEFT] elif r == '4': new_object.actuator.moveset = [ Constants.UP, Constants.DOWN, Constants.LEFT, Constants.RIGHT, Constants.DLDOWN, Constants.DLUP, Constants.DRDOWN, Constants.DRUP ] elif r == '5': new_object.actuator.moveset = [ Constants.DLDOWN, Constants.DLUP, Constants.DRDOWN, Constants.DRUP ] elif r == '6': new_object.actuator.moveset = [] else: Utils.warn( f'"{r}" is not a valid choice. Movement set is now empty.') new_object.actuator.moveset = [] elif r == '2': new_object.actuator = SimpleActuators.PathActuator(path=[]) print("Great, so what path this NPC should take:") print('1 - UP/DOWN patrol') print('2 - DOWN/UP patrol') print('3 - LEFT/RIGHT patrol') print('4 - RIGHT/LEFT patrol') print('5 - Circle patrol: LEFT, DOWN, RIGHT, UP') print('6 - Circle patrol: LEFT, UP, RIGHT, DOWN') print('7 - Circle patrol: RIGHT, DOWN, LEFT, UP') print('8 - Circle patrol: RIGHT, UP, LEFT, DOWN') print('9 - Write your own path') r = Utils.get_key() if r == '1': print( "How many steps should the NPC go in one direction before turning back ?" ) r = int(input_digit("(please enter an integer)> ")) new_object.actuator.path += [ Constants.UP for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.DOWN for i in range(0, r, 1) ] elif r == '2': print( "How many steps should the NPC go in one direction before turning back ?" ) r = int(input_digit("(please enter an integer)> ")) new_object.actuator.path += [ Constants.DOWN for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.UP for i in range(0, r, 1) ] elif r == '3': print( "How many steps should the NPC go in one direction before turning back ?" ) r = int(input_digit("(please enter an integer)> ")) new_object.actuator.path += [ Constants.LEFT for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.RIGHT for i in range(0, r, 1) ] elif r == '3': print( "How many steps should the NPC go in one direction before turning back ?" ) r = int(input_digit("(please enter an integer)> ")) new_object.actuator.path += [ Constants.RIGHT for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.LEFT for i in range(0, r, 1) ] elif r == '4': print( "How many steps should the NPC go in one direction before turning back ?" ) r = int(input_digit("(please enter an integer)> ")) new_object.actuator.path += [ Constants.DOWN for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.UP for i in range(0, r, 1) ] elif r == '5': print( "How many steps should the NPC go in EACH direction before changing ?" ) r = int(input_digit("(please enter an integer)> ")) new_object.actuator.path += [ Constants.LEFT for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.DOWN for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.RIGHT for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.UP for i in range(0, r, 1) ] elif r == '6': print( "How many steps should the NPC go in EACH direction before changing ?" ) r = int(input_digit("(please enter an integer)> ")) new_object.actuator.path += [ Constants.LEFT for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.UP for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.RIGHT for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.DOWN for i in range(0, r, 1) ] elif r == '7': print( "How many steps should the NPC go in EACH direction before changing ?" ) r = int(input_digit("(please enter an integer)> ")) new_object.actuator.path += [ Constants.RIGHT for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.DOWN for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.LEFT for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.UP for i in range(0, r, 1) ] elif r == '8': print( "How many steps should the NPC go in EACH direction before changing ?" ) r = int(input_digit("(please enter an integer)> ")) new_object.actuator.path += [ Constants.RIGHT for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.UP for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.LEFT for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.DOWN for i in range(0, r, 1) ] elif r == '9': print( "Write your own path using only words from this list: UP, DOWN, LEFT, RIGHT, DLDOWN, DLUP, DRDOWN, DRUP." ) print('Each direction has to be separated by a coma.') r = str(input('Write your path: ')).upper() new_object.actuator.path = r.split(',') else: Utils.warn(f'"{r}" is not a valid choice. Path is now empty.') new_object.actuator.path = [] return new_object elif key == '2': while True: game.clear_screen() print( Utils.green_bright("\t\tObject creation wizard: ") + Utils.magenta_bright("Structure")) print("What kind of structure do you want to create:") print( '1 - A wall like structure (an object that cannot be picked-up and is not overlappable). Ex: walls, trees, non moving elephant (try to go through an elephant or to pick it up in your backpack...)' ) print('2 - A door (player and/or NPC can go through)') print( '3 - A treasure (can be picked up, take space in the inventory, give points to the player)' ) print( '4 - A generic object (you can set the properties to make it pickable or overlappable)' ) print( '5 - A generic actionable object (to make portals, heart to replenish life, etc.)' ) key = Utils.get_key() new_object = None if key == '1': new_object = Structures.Wall() new_object.name = str(uuid.uuid1()) new_object.model = model_picker() break elif key == '2': new_object = Structures.Door() new_object.name = str(uuid.uuid1()) new_object.model = model_picker() break elif key == '3': new_object = Structures.Treasure() print("First give a name to your Treasure. Default value: " + new_object.name) r = str(input('(Enter name)> ')) if len(r) > 0: new_object.name = r print( "Then give it a type. A type is important as it allows grouping (in this case probably in the inventory).\nType is a string. Default value: " + new_object.type) r = str(input('(Enter type)> ')) if len(r) > 0: new_object.type = r print("Now we need a model. Default value: " + new_object.model) input('Hit "Enter" when you are ready to choose a model.') new_object.model = model_picker() break elif key == '4' or key == '5': if key == '4': new_object = Structures.GenericStructure() else: new_object = Structures.GenericActionableStructure() new_object.set_overlappable(False) new_object.set_pickable(False) print("First give a name to your structure. Default value: " + new_object.name) r = str(input('(Enter name)> ')) if len(r) > 0: new_object.name = r print( "Then give it a type. \nType is a string. Default value: " + new_object.type) r = str(input('(Enter type)> ')) if len(r) > 0: new_object.type = r print("Now we need a model. Default value: " + new_object.model) input('Hit "Enter" when you are ready to choose a model.') new_object.model = model_picker() print( 'Is this object pickable? (can it be picked up by the player)?' ) print('0 - No') print('1 - Yes') r = Utils.get_key() if r == '1': new_object.set_pickable(True) print( 'Is this object overlappable? (can it be walked over by player?' ) print('0 - No') print('1 - Yes') r = Utils.get_key() if r == '1': new_object.set_overlappable(True) break return new_object #Placeholder return BoardItemVoid()
pf.set_destination(dest_row, dest_col) blocker = NPC(model=Sprites.SKULL) g.current_board().place_item(blocker, 20, 1) wall = Wall(model=Sprites.WALL) wall.animation = Animation(animated_object=wall) wall.animation.add_frame(Sprites.BANKNOTE_DOLLARS) wall.animation.add_frame(Sprites.BANKNOTE_EUROS) wall.animation.add_frame(Sprites.BANKNOTE_WINGS) g.current_board().place_item(wall, 5, 25) # 43,28 43,34 39,34 39,40 44,40 44,28 patroller = NPC(model=Sprites.ALIEN, name="patroller") patroller.actuator = PathFinder(game=g, actuated_object=patroller, circle_waypoints=True) g.add_npc(1, patroller, 43, 29) patroller.actuator.set_destination(43, 29) patroller.actuator.add_waypoint(43, 29) patroller.actuator.add_waypoint(43, 34) patroller.actuator.add_waypoint(39, 34) patroller.actuator.add_waypoint(39, 40) patroller.actuator.add_waypoint(44, 40) patroller.actuator.add_waypoint(44, 28) patroller.animation = Animation(animated_object=patroller, refresh_screen=redraw, display_time=0.5) # patroller.animation.add_frame('--') # patroller.animation.add_frame(' |')
size=[40, 20], ui_border_left=Utils.WHITE_SQUARE, ui_border_right=Utils.WHITE_SQUARE, ui_border_top=Utils.WHITE_SQUARE, ui_border_bottom=Utils.WHITE_SQUARE, ui_board_void_cell=Utils.BLACK_SQUARE, player_starting_position=[0, 0], ) game = Game(name='HAC Game') p = Player(model=sprite_player['right'], name='Nazbrok') npc1 = NPC(model=sprite_npc, name='Bad guy 1', step=1) # Test of the PathActuator npc1.actuator = PathActuator(path=[ cst.UP, cst.UP, cst.UP, cst.UP, cst.UP, cst.UP, cst.UP, cst.UP, cst.RIGHT, cst.RIGHT, cst.RIGHT, cst.RIGHT, cst.DOWN, cst.DOWN, cst.DOWN, cst.DOWN, cst.DOWN, cst.DOWN, cst.DOWN, cst.DOWN, cst.LEFT, cst.LEFT, cst.LEFT, cst.LEFT ]) game.add_board(1, lvl1) game.add_board(2, lvl2) t = Treasure(model=sprite_treasure, name='Cool treasure', type='gem') money_bag = Treasure(model=sprite_treasure2, name='money', value=20) tree = GenericStructure(model=sprite_tree) tree.set_overlappable(False) tree.set_pickable(False) portal2 = GenericActionableStructure(model=sprite_portal) portal2.set_overlappable(False)
def create_wizard(): global game key = "" while True: game.clear_screen() print(Utils.green_bright("\t\tObject creation wizard")) print("What do you want to create: a NPC or a structure?") print("1 - NPC (Non Playable Character)") print("2 - Structure (Wall, Door, Treasure, Portal, Trees, etc.)") key = Utils.get_key() if key == "1" or key == "2": break if key == "1": game.clear_screen() print( Utils.green_bright("\t\tObject creation wizard: ") + Utils.cyan_bright("NPC")) new_object = NPC() print("First give a name to your NPC. Default value: " + new_object.name) r = str(input("(Enter name)> ")) if len(r) > 0: new_object.name = r print( "Then give it a type. A type is important as it allows grouping.\n" "Type is a string. Default value: " + new_object.type) r = str(input("(Enter type)> ")) if len(r) > 0: new_object.type = r print("Now we need a model. Default value: " + new_object.model) input('Hit "Enter" when you are ready to choose a model.') new_object.model = model_picker() game.clear_screen() print( Utils.green_bright("\t\tObject creation wizard: ") + Utils.cyan_bright("NPC") + f" - {new_object.model}") print("We now needs to go through some basic statistics. " "You can decide to go with default by simply hitting " 'the "Enter" key.') r = input_digit(f"Number of cell crossed in one turn. " f"Default: {new_object.step}(type: int) > ") if len(r) > 0: new_object.step = int(r) else: # If it's 0 it means it's going to be a static NPC so to prevent # python to pass some random pre-initialized default, we explicitly # set the Actuator to a static one new_object.actuator = SimpleActuators.RandomActuator(moveset=[]) r = input_digit(f"Max HP (Health Points). " f"Default: {new_object.max_hp}(type: int) > ") if len(r) > 0: new_object.max_hp = int(r) new_object.hp = new_object.max_hp r = input_digit(f"Max MP (Mana Points). " f"Default: {new_object.max_mp}(type: int) > ") if len(r) > 0: new_object.max_mp = int(r) new_object.mp = new_object.max_mp r = input_digit( f"Remaining lives (it is advised to set that to 1 for a " f"standard NPC). " f"Default: {new_object.remaining_lives}(type: int) > ") if len(r) > 0: new_object.remaining_lives = int(r) r = input_digit(f"AP (Attack Power). " f"Default: {new_object.attack_power}(type: int) > ") if len(r) > 0: new_object.attack_power = int(r) r = input_digit(f"DP (Defense Power). " f"Default: {new_object.defense_power}(type: int) > ") if len(r) > 0: new_object.defense_power = int(r) r = input_digit( f"Strength. Default: {new_object.strength}(type: int) > ") if len(r) > 0: new_object.strength = int(r) r = input_digit( f"Intelligence. Default: {new_object.intelligence}(type: int) > ") if len(r) > 0: new_object.intelligence = int(r) r = input_digit( f"Agility. Default: {new_object.agility}(type: int) > ") if len(r) > 0: new_object.agility = int(r) game.clear_screen() print("We now need to give some life to that NPC. " "What kind of movement should it have:") print("1 - Randomly chosen from a preset of directions") print("2 - Following a predetermined path") print("3 - Following a predetermined path back and forth") print( "4 - Automatically finding it's way from one point to another (no" " pre-determined path, you will set the points on the map).") r = Utils.get_key() if r == "1": new_object.actuator = SimpleActuators.RandomActuator(moveset=[]) print("Random it is! Now choose from which preset " "of movements should we give it:") print("1 - UP,DOWN,LEFT, RIGHT") print("2 - UP,DOWN") print("3 - LEFT, RIGHT") print("4 - UP,DOWN,LEFT, RIGHT + all DIAGONALES") print("5 - DIAGONALES (DIAG UP LEFT, DIAG UP RIGHT, etc.) " "but NO straight UP, DOWN, LEFT and RIGHT") print("6 - No movement") r = Utils.get_key() if r == "1": new_object.actuator.moveset = [ Constants.UP, Constants.DOWN, Constants.LEFT, Constants.RIGHT, ] elif r == "2": new_object.actuator.moveset = [Constants.UP, Constants.DOWN] elif r == "3": new_object.actuator.moveset = [Constants.RIGHT, Constants.LEFT] elif r == "4": new_object.actuator.moveset = [ Constants.UP, Constants.DOWN, Constants.LEFT, Constants.RIGHT, Constants.DLDOWN, Constants.DLUP, Constants.DRDOWN, Constants.DRUP, ] elif r == "5": new_object.actuator.moveset = [ Constants.DLDOWN, Constants.DLUP, Constants.DRDOWN, Constants.DRUP, ] elif r == "6": new_object.actuator.moveset = [] else: Utils.warn( f'"{r}" is not a valid choice. Movement set is now empty.') new_object.actuator.moveset = [] elif r == "2" or r == "3": if r == "2": new_object.actuator = SimpleActuators.PathActuator(path=[]) elif r == "3": new_object.actuator = SimpleActuators.PatrolActuator(path=[]) print("Great, so what path this NPC should take:") print("1 - UP/DOWN patrol") print("2 - DOWN/UP patrol") print("3 - LEFT/RIGHT patrol") print("4 - RIGHT/LEFT patrol") print("5 - Circle patrol: LEFT, DOWN, RIGHT, UP") print("6 - Circle patrol: LEFT, UP, RIGHT, DOWN") print("7 - Circle patrol: RIGHT, DOWN, LEFT, UP") print("8 - Circle patrol: RIGHT, UP, LEFT, DOWN") print("9 - Write your own path") r = Utils.get_key() if r == "1": print("How many steps should the NPC go in one direction " "before turning back ?") r = int(input_digit("(please enter an integer)> ")) new_object.actuator.path += ([ Constants.UP for i in range(0, r, 1) ], ) new_object.actuator.path += [ Constants.DOWN for i in range(0, r, 1) ] elif r == "2": print("How many steps should the NPC go in one " "direction before turning back ?") r = int(input_digit("(please enter an integer)> ")) new_object.actuator.path += [ Constants.DOWN for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.UP for i in range(0, r, 1) ] elif r == "3": print("How many steps should the NPC go in one " "direction before turning back ?") r = int(input_digit("(please enter an integer)> ")) new_object.actuator.path += [ Constants.LEFT for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.RIGHT for i in range(0, r, 1) ] elif r == "3": print("How many steps should the NPC go in one direction " "before turning back ?") r = int(input_digit("(please enter an integer)> ")) new_object.actuator.path += [ Constants.RIGHT for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.LEFT for i in range(0, r, 1) ] elif r == "4": print("How many steps should the NPC go in one " "direction before turning back ?") r = int(input_digit("(please enter an integer)> ")) new_object.actuator.path += [ Constants.DOWN for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.UP for i in range(0, r, 1) ] elif r == "5": print("How many steps should the NPC go in EACH " "direction before changing ?") r = int(input_digit("(please enter an integer)> ")) new_object.actuator.path += [ Constants.LEFT for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.DOWN for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.RIGHT for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.UP for i in range(0, r, 1) ] elif r == "6": print("How many steps should the NPC go in EACH " "direction before changing ?") r = int(input_digit("(please enter an integer)> ")) new_object.actuator.path += [ Constants.LEFT for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.UP for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.RIGHT for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.DOWN for i in range(0, r, 1) ] elif r == "7": print("How many steps should the NPC go in EACH " "direction before changing ?") r = int(input_digit("(please enter an integer)> ")) new_object.actuator.path += [ Constants.RIGHT for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.DOWN for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.LEFT for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.UP for i in range(0, r, 1) ] elif r == "8": print("How many steps should the NPC go in EACH direction " "before changing ?") r = int(input_digit("(please enter an integer)> ")) new_object.actuator.path += [ Constants.RIGHT for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.UP for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.LEFT for i in range(0, r, 1) ] new_object.actuator.path += [ Constants.DOWN for i in range(0, r, 1) ] elif r == "9": print("Write your own path using only words from this list: " "UP, DOWN, LEFT, RIGHT, DLDOWN, DLUP, DRDOWN, DRUP.") print("Each direction has to be separated by a coma.") r = str(input("Write your path: ")).upper() new_object.actuator.path = r.split(",") else: Utils.warn(f'"{r}" is not a valid choice. Path is now empty.') new_object.actuator.path = [] elif r == "4": new_object.actuator = AdvancedActuators.PathFinder( parent=new_object, circle_waypoints=True) print( "Do you want the NPC to go through your way points once and stop or" " to cycle through all of them infinitely ?") print("1 - Cycle once") print("2 - Cycle infinitely (default value)") r = Utils.get_key() if r == "1": new_object.actuator.circle_waypoints = False return new_object elif key == "2": while True: game.clear_screen() print( Utils.green_bright("\t\tObject creation wizard: ") + Utils.magenta_bright("Structure")) print("What kind of structure do you want to create:") print( "1 - A wall like structure (an object that cannot be picked-up " "and is not overlappable). Ex: walls, trees, non moving " "elephant (try to go through an elephant or to pick it up " "in your backpack...)") print("2 - A door (player and/or NPC can go through)") print("3 - A treasure (can be picked up, take space in the " "inventory, give points to the player)") print("4 - A generic object (you can set the properties to " "make it pickable or overlappable)") print("5 - A generic actionable object (to make portals, heart " "to replenish life, etc.)") key = Utils.get_key() new_object = None if key == "1": new_object = Structures.Wall() new_object.name = str(uuid.uuid1()) new_object.model = model_picker() break elif key == "2": new_object = Structures.Door() new_object.name = str(uuid.uuid1()) new_object.model = model_picker() break elif key == "3": new_object = Structures.Treasure() print("First give a name to your Treasure. Default value: " + new_object.name) r = str(input("(Enter name)> ")) if len(r) > 0: new_object.name = r print("Then give it a type. A type is important as it allows " "grouping (in this case probably in the inventory).\n" "Type is a string. Default value: " + new_object.type) r = str(input("(Enter type)> ")) if len(r) > 0: new_object.type = r print("Now we need a model. Default value: " + new_object.model) input('Hit "Enter" when you are ready to choose a model.') new_object.model = model_picker() break elif key == "4" or key == "5": if key == "4": new_object = Structures.GenericStructure() else: new_object = Structures.GenericActionableStructure() new_object.set_overlappable(False) new_object.set_pickable(False) print("First give a name to your structure. Default value: " + new_object.name) r = str(input("(Enter name)> ")) if len(r) > 0: new_object.name = r print( "Then give it a type. \nType is a string. Default value: " + new_object.type) r = str(input("(Enter type)> ")) if len(r) > 0: new_object.type = r print("Now we need a model. Default value: " + new_object.model) input('Hit "Enter" when you are ready to choose a model.') new_object.model = model_picker() print("Is this object pickable? (can it be picked up " "by the player)?") print("0 - No") print("1 - Yes") r = Utils.get_key() if r == "1": new_object.set_pickable(True) print("Is this object overlappable? (can it be walked " "over by player?") print("0 - No") print("1 - Yes") r = Utils.get_key() if r == "1": new_object.set_overlappable(True) break return new_object # Placeholder return BoardItemVoid()