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()
def _ref2obj(ref): obj_keys = ref.keys() local_object = BoardItemVoid() if "Wall" in ref["object"]: local_object = Structures.Wall() elif "Treasure" in ref["object"]: local_object = Structures.Treasure() if "value" in obj_keys: local_object.value = ref["value"] if "size" in obj_keys: local_object._size = ref["size"] elif "GenericStructure" in ref["object"]: local_object = Structures.GenericStructure() if "value" in obj_keys: local_object.value = ref["value"] if "size" in obj_keys: local_object._size = ref["size"] if "pickable" in obj_keys: local_object.set_pickable(ref["pickable"]) if "overlappable" in obj_keys: local_object.set_overlappable(ref["overlappable"]) elif "Door" in ref["object"]: local_object = Structures.Door() if "value" in obj_keys: local_object.value = ref["value"] if "size" in obj_keys: local_object._size = ref["size"] if "pickable" in obj_keys: local_object.set_pickable(ref["pickable"]) if "overlappable" in obj_keys: local_object.set_overlappable(ref["overlappable"]) if "restorable" in obj_keys: local_object.set_restorable(ref["restorable"]) elif "GenericActionableStructure" in ref["object"]: local_object = Structures.GenericActionableStructure() if "value" in obj_keys: local_object.value = ref["value"] if "size" in obj_keys: local_object._size = ref["size"] if "pickable" in obj_keys: local_object.set_pickable(ref["pickable"]) if "overlappable" in obj_keys: local_object.set_overlappable(ref["overlappable"]) elif "NPC" in ref["object"]: local_object = NPC() if "value" in obj_keys: local_object.value = ref["value"] if "size" in obj_keys: local_object._size = ref["size"] if "hp" in obj_keys: local_object.hp = ref["hp"] if "max_hp" in obj_keys: local_object.max_hp = ref["max_hp"] if "step" in obj_keys: local_object.step = ref["step"] if "remaining_lives" in obj_keys: local_object.remaining_lives = ref["remaining_lives"] if "attack_power" in obj_keys: local_object.attack_power = ref["attack_power"] if "actuator" in obj_keys: if "RandomActuator" in ref["actuator"]["type"]: local_object.actuator = RandomActuator(moveset=[]) if "moveset" in ref["actuator"].keys(): for m in ref["actuator"]["moveset"]: local_object.actuator.moveset.append( _string_to_constant(m)) elif "PathActuator" in ref["actuator"]["type"]: local_object.actuator = PathActuator(path=[]) if "path" in ref["actuator"].keys(): for m in ref["actuator"]["path"]: local_object.actuator.path.append( _string_to_constant(m)) # Now what remains is what is common to all BoardItem if not isinstance(local_object, BoardItemVoid): if "name" in obj_keys: local_object.name = ref["name"] if "model" in obj_keys: local_object.model = ref["model"] if "type" in obj_keys: local_object.type = ref["type"] return local_object
def _ref2obj(ref): obj_keys = ref.keys() local_object = BoardItemVoid() if 'Wall' in ref['object']: local_object = Structures.Wall() elif 'Treasure' in ref['object']: local_object = Structures.Treasure() if 'value' in obj_keys: local_object.value = ref['value'] if 'size' in obj_keys: local_object._size = ref['size'] elif 'GenericStructure' in ref['object']: local_object = Structures.GenericStructure() if 'value' in obj_keys: local_object.value = ref['value'] if 'size' in obj_keys: local_object._size = ref['size'] if 'pickable' in obj_keys: local_object.set_pickable(ref['pickable']) if 'overlappable' in obj_keys: local_object.set_overlappable(ref['overlappable']) elif 'Door' in ref['object']: local_object = Structures.Door() if 'value' in obj_keys: local_object.value = ref['value'] if 'size' in obj_keys: local_object._size = ref['size'] if 'pickable' in obj_keys: local_object.set_pickable(ref['pickable']) if 'overlappable' in obj_keys: local_object.set_overlappable(ref['overlappable']) if 'restorable' in obj_keys: local_object.set_restorable(ref['restorable']) elif 'GenericActionableStructure' in ref['object']: local_object = Structures.GenericActionableStructure() if 'value' in obj_keys: local_object.value = ref['value'] if 'size' in obj_keys: local_object._size = ref['size'] if 'pickable' in obj_keys: local_object.set_pickable(ref['pickable']) if 'overlappable' in obj_keys: local_object.set_overlappable(ref['overlappable']) elif 'NPC' in ref['object']: local_object = NPC() if 'value' in obj_keys: local_object.value = ref['value'] if 'size' in obj_keys: local_object._size = ref['size'] if 'hp' in obj_keys: local_object.hp = ref['hp'] if 'max_hp' in obj_keys: local_object.max_hp = ref['max_hp'] if 'step' in obj_keys: local_object.step = ref['step'] if 'remaining_lives' in obj_keys: local_object.remaining_lives = ref['remaining_lives'] if 'attack_power' in obj_keys: local_object.attack_power = ref['attack_power'] if 'actuator' in obj_keys: if 'RandomActuator' in ref['actuator']['type']: local_object.actuator = RandomActuator(moveset=[]) if 'moveset' in ref['actuator'].keys(): for m in ref['actuator']['moveset']: local_object.actuator.moveset.append( _string_to_constant(m)) elif 'PathActuator' in ref['actuator']['type']: local_object.actuator = PathActuator(path=[]) if 'path' in ref['actuator'].keys(): for m in ref['actuator']['path']: local_object.actuator.path.append( _string_to_constant(m)) # Now what remains is what is common to all BoardItem if not isinstance(local_object, BoardItemVoid): if 'name' in obj_keys: local_object.name = ref['name'] if 'model' in obj_keys: local_object.model = ref['model'] if 'type' in obj_keys: local_object.type = ref['type'] return local_object
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()