Move all root .py files into playscii/ package directory. Rename playscii.py to app.py, add __main__.py entry point. Convert bare imports to relative (within package) and absolute (in formats/ and games/). Data dirs stay at root.
87 lines
3.2 KiB
Python
87 lines
3.2 KiB
Python
from playscii.game_util_objects import GameObject, WorldGlobalsObject
|
|
from playscii.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(f"Exported {self.flower.export_filename}.png")
|
|
|
|
|
|
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)
|