playscii/games/wildflowers/scripts/wildflowers.py

87 lines
3.2 KiB
Python

from game_util_objects import GameObject, WorldGlobalsObject
from image_export import export_still_image
"""
overall approach:
grow multiple "petals" (shapes) and "fronds" (lines) from ~center of top left
quadrant, mirror these in the other three quadrants.
last commit of first gen approach (before rewrite & petals): commit a476248
frond style ideas:
- frond draws each growth dir from a deck, reshuffling when empty to avoid repetition?
- frond weights growth dirs differently depending on its remaining life?
maybe weight frond start locations in a radius, ie likely to start from center, but rarely can start further and further away.
character ramps based on direction changes, visual density, something else?
"""
class FlowerGlobals(WorldGlobalsObject):
# if True, generate a 4x4 grid instead of just one
test_gen = False
handle_key_events = True
def __init__(self, world, obj_data=None):
WorldGlobalsObject.__init__(self, world, obj_data)
def pre_first_update(self):
# self.app.can_edit = False
self.app.ui.set_game_edit_ui_visibility(False)
self.app.ui.message_line.post_line("")
if self.test_gen:
for x in range(4):
for y in range(4):
flower = self.world.spawn_object_of_class("FlowerObject")
flower.set_loc(x * flower.art.width, y * flower.art.height)
self.world.camera.set_loc(25, 25, 35)
else:
flower = self.world.spawn_object_of_class("FlowerObject")
self.world.camera.set_loc(0, 0, 10)
self.flower = flower
self.world.spawn_object_of_class("SeedDisplay")
def handle_key_down(self, key, shift_pressed, alt_pressed, ctrl_pressed):
if key != "e":
return
if not self.flower:
return
# save to .psci
# hold on last frame
self.flower.exportable_art.frame_delays[-1] = 6.0
self.flower.exportable_art.save_to_file()
# TODO: investigate why opening for edit puts art mode in a bad state
# self.app.load_art_for_edit(self.flower.exportable_art.filename)
# save to .gif - TODO investigate problem with frame deltas not clearing
# export_animation(self.app, self.flower.exportable_art,
# self.flower.export_filename + '.gif',
# bg_color=self.world.bg_color, loop=False)
# export to .png - works
export_still_image(
self.app,
self.flower.exportable_art,
self.flower.export_filename + ".png",
crt=self.app.fb.crt,
scale=4,
bg_color=self.world.bg_color,
)
self.app.log("Exported %s.png" % self.flower.export_filename)
class SeedDisplay(GameObject):
generate_art = True
art_width, art_height = 30, 1
art_charset = "ui"
art_palette = "c64_original"
def __init__(self, world, obj_data=None):
GameObject.__init__(self, world, obj_data)
self.art.clear_frame_layer(0, 0)
f = world.globals.flower
self.art.write_string(0, 0, 0, 0, str(f.seed), 12, 0)
self.set_scale(0.275, 0.275, 1)
self.set_loc(f.art_width, f.art_height / -2)