Add plant generations
parent
2786a46397
commit
e0432f149f
29
botany.py
29
botany.py
|
@ -119,7 +119,7 @@ class Plant(object):
|
|||
39: 'colossal',
|
||||
}
|
||||
|
||||
def __init__(self, this_filename):
|
||||
def __init__(self, this_filename, generation=1):
|
||||
# Constructor
|
||||
self.plant_id = str(uuid.uuid4())
|
||||
self.life_stages = (3600*24, (3600*24)*3, (3600*24)*10, (3600*24)*20, (3600*24)*30)
|
||||
|
@ -130,6 +130,7 @@ class Plant(object):
|
|||
self.rarity = self.rarity_check()
|
||||
self.ticks = 0
|
||||
self.age_formatted = "0"
|
||||
self.generation = generation
|
||||
self.dead = False
|
||||
self.write_lock = False
|
||||
self.owner = getpass.getuser()
|
||||
|
@ -140,6 +141,11 @@ class Plant(object):
|
|||
self.watered_timestamp = int(time.time())-(24*3600)-1
|
||||
self.watered_24h = False
|
||||
|
||||
def migrate_properties(self):
|
||||
# Migrates old data files to new
|
||||
if not hasattr(self, 'generation'):
|
||||
self.generation = 1
|
||||
|
||||
def parse_plant(self):
|
||||
# Converts plant data to human-readable format
|
||||
output = ""
|
||||
|
@ -213,10 +219,6 @@ class Plant(object):
|
|||
else:
|
||||
return False
|
||||
|
||||
def new_seed(self,this_filename):
|
||||
# Creates life after death
|
||||
self.__init__(this_filename)
|
||||
|
||||
def growth(self):
|
||||
# Increase plant growth stage
|
||||
if self.stage < (len(self.stage_dict)-1):
|
||||
|
@ -230,6 +232,13 @@ class Plant(object):
|
|||
|
||||
def start_over(self):
|
||||
# After plant reaches final stage, given option to restart
|
||||
# increment generation only if previous stage is final stage and plant
|
||||
# is alive
|
||||
if not self.dead:
|
||||
next_generation = self.generation + 1
|
||||
else:
|
||||
next_generation = 1
|
||||
|
||||
self.write_lock = True
|
||||
self.kill_plant()
|
||||
while self.write_lock:
|
||||
|
@ -237,7 +246,7 @@ class Plant(object):
|
|||
# garden db needs to update before allowing the user to reset
|
||||
pass
|
||||
if not self.write_lock:
|
||||
self.new_seed(self.file_name)
|
||||
self.__init__(self.file_name, next_generation)
|
||||
|
||||
def kill_plant(self):
|
||||
self.dead = True
|
||||
|
@ -346,6 +355,10 @@ class DataManager(object):
|
|||
with open(self.savefile_path, 'rb') as f:
|
||||
this_plant = pickle.load(f)
|
||||
|
||||
# migrate data structure to create data for empty/nonexistent plant
|
||||
# properties
|
||||
this_plant.migrate_properties()
|
||||
|
||||
# get status since last login
|
||||
is_dead = this_plant.dead_check()
|
||||
is_watered = this_plant.water_check()
|
||||
|
@ -474,7 +487,7 @@ class DataManager(object):
|
|||
plant_info["color"] = this_plant.color_dict[this_plant.color]
|
||||
if this_plant.stage >= 2:
|
||||
plant_info["species"] = this_plant.species_dict[this_plant.species]
|
||||
|
||||
|
||||
with open(json_file, 'w') as outfile:
|
||||
json.dump(plant_info, outfile)
|
||||
|
||||
|
@ -520,9 +533,9 @@ if __name__ == '__main__':
|
|||
else:
|
||||
my_plant = Plant(my_data.savefile_path)
|
||||
my_data.data_write_json(my_plant)
|
||||
# my_plant is either a fresh plant or an existing plant at this point
|
||||
my_plant.start_life()
|
||||
my_data.start_threads(my_plant)
|
||||
# TODO: curses wrapper
|
||||
botany_menu = CursedMenu(my_plant,my_data)
|
||||
my_data.save_plant(my_plant)
|
||||
my_data.data_write_json(my_plant)
|
||||
|
|
|
@ -26,7 +26,7 @@ class CursedMenu(object):
|
|||
self.infotoggle = 0
|
||||
self.maxy, self.maxx = self.screen.getmaxyx()
|
||||
# Highlighted and Normal line definitions
|
||||
curses.init_pair(1, curses.COLOR_BLACK, curses.COLOR_WHITE)
|
||||
self.define_colors()
|
||||
self.highlighted = curses.color_pair(1)
|
||||
self.normal = curses.A_NORMAL
|
||||
# Threaded screen update for live changes
|
||||
|
@ -36,6 +36,17 @@ class CursedMenu(object):
|
|||
self.screen.clear()
|
||||
self.show(["water","look","garden","instructions"], title=' botany ', subtitle='options')
|
||||
|
||||
def define_colors(self):
|
||||
# set curses color pairs manually
|
||||
curses.init_pair(1, curses.COLOR_BLACK, curses.COLOR_WHITE)
|
||||
curses.init_pair(2, curses.COLOR_WHITE, curses.COLOR_BLACK)
|
||||
curses.init_pair(3, curses.COLOR_GREEN, curses.COLOR_BLACK)
|
||||
curses.init_pair(4, curses.COLOR_BLUE, curses.COLOR_BLACK)
|
||||
curses.init_pair(5, curses.COLOR_MAGENTA, curses.COLOR_BLACK)
|
||||
curses.init_pair(6, curses.COLOR_YELLOW, curses.COLOR_BLACK)
|
||||
curses.init_pair(7, curses.COLOR_RED, curses.COLOR_BLACK)
|
||||
curses.init_pair(8, curses.COLOR_CYAN, curses.COLOR_BLACK)
|
||||
|
||||
def show(self, options, title, subtitle):
|
||||
# Draws a menu with parameters
|
||||
self.set_options(options)
|
||||
|
@ -465,6 +476,7 @@ class CursedMenu(object):
|
|||
self.screen.refresh()
|
||||
|
||||
def draw_info_text(self, info_text):
|
||||
# print lines of text to info pane at bottom of screen
|
||||
if type(info_text) is str:
|
||||
info_text = info_text.splitlines()
|
||||
|
||||
|
@ -475,7 +487,13 @@ class CursedMenu(object):
|
|||
def harvest_confirmation(self):
|
||||
self.clear_info_pane()
|
||||
# get plant description before printing
|
||||
harvest_text = "If you harvest your plant you'll start over from a seed.\nContinue? (Y/n)"
|
||||
max_stage = len(self.plant.stage_dict) - 1
|
||||
harvest_text = ""
|
||||
if not self.plant.dead:
|
||||
if self.plant.stage == max_stage:
|
||||
harvest_text += "Congratulations! You raised your plant to its final stage of growth.\n"
|
||||
harvest_text += "Generation: {}\n".format(str(self.plant.generation))
|
||||
harvest_text += "If you harvest your plant you'll start over from a seed.\nContinue? (Y/n)"
|
||||
self.draw_info_text(harvest_text)
|
||||
try:
|
||||
user_in = self.screen.getch() # Gets user input
|
||||
|
|
Loading…
Reference in New Issue