gmdkit 0.7.0__tar.gz → 0.7.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {gmdkit-0.7.0 → gmdkit-0.7.1}/PKG-INFO +9 -25
- {gmdkit-0.7.0 → gmdkit-0.7.1}/README.md +8 -24
- gmdkit-0.7.1/scripts/compile_defaults.py +45 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/grab_official_levels.py +5 -9
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/__init__.py +0 -2
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/casting/level_loader.py +225 -1
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/extensions/globed.py +10 -7
- gmdkit-0.7.1/src/gmdkit/functions/color.py +113 -0
- gmdkit-0.7.1/src/gmdkit/functions/merging.py +193 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/functions/misc.py +8 -13
- gmdkit-0.7.1/src/gmdkit/functions/object.py +120 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/functions/object_list.py +182 -224
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/functions/spawn_tracking.py +10 -10
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/__init__.py +2 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/audio.py +2 -2
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/base.py +77 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/collectibles.py +2 -2
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/enter.py +1 -1
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/shaders.py +25 -18
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/visual.py +50 -2
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/level.py +0 -37
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/color.py +5 -2
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/plist.py +0 -2
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/template.py +96 -127
- gmdkit-0.7.1/src/gmdkit/remapping/base.py +674 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/remapping/classes.py +141 -97
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/remapping/functions.py +5 -5
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/remapping/rules.py +15 -11
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/remapping/utils.py +6 -5
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/serialization/classes.py +32 -67
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/serialization/functions.py +31 -0
- gmdkit-0.7.1/src/gmdkit/templates/generators/id_remapper.py +139 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/utils/enums.py +268 -25
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/utils/types.py +15 -17
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit.egg-info/PKG-INFO +9 -25
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit.egg-info/SOURCES.txt +1 -123
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit.egg-info/scm_file_list.json +1 -123
- gmdkit-0.7.1/src/gmdkit.egg-info/scm_version.json +8 -0
- gmdkit-0.7.1/tests/interface_test.py +6 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/tests/test_round_trip.py +16 -15
- {gmdkit-0.7.0 → gmdkit-0.7.1}/tests/utils.py +19 -15
- gmdkit-0.7.0/scripts/build_scripts/build_id_rules.py +0 -162
- gmdkit-0.7.0/scripts/build_scripts/build_obj_props.py +0 -482
- gmdkit-0.7.0/scripts/compile_defaults.py +0 -50
- gmdkit-0.7.0/src/gmdkit/functions/color.py +0 -221
- gmdkit-0.7.0/src/gmdkit/functions/level.py +0 -139
- gmdkit-0.7.0/src/gmdkit/functions/merging.py +0 -239
- gmdkit-0.7.0/src/gmdkit/functions/object.py +0 -370
- gmdkit-0.7.0/src/gmdkit/mappings/__init__.py +0 -13
- gmdkit-0.7.0/src/gmdkit/mappings/color_id/__init__.py +0 -15
- gmdkit-0.7.0/src/gmdkit/mappings/color_id_set.py +0 -21
- gmdkit-0.7.0/src/gmdkit/mappings/list_prop/__init__.py +0 -28
- gmdkit-0.7.0/src/gmdkit/mappings/lvl_prop/__init__.py +0 -98
- gmdkit-0.7.0/src/gmdkit/mappings/lvl_prop/editor/__init__.py +0 -7
- gmdkit-0.7.0/src/gmdkit/mappings/obj_id/__init__.py +0 -11
- gmdkit-0.7.0/src/gmdkit/mappings/obj_id/collectible/__init__.py +0 -4
- gmdkit-0.7.0/src/gmdkit/mappings/obj_id/modifier/__init__.py +0 -5
- gmdkit-0.7.0/src/gmdkit/mappings/obj_id/orb/__init__.py +0 -11
- gmdkit-0.7.0/src/gmdkit/mappings/obj_id/pad/__init__.py +0 -5
- gmdkit-0.7.0/src/gmdkit/mappings/obj_id/portal/__init__.py +0 -18
- gmdkit-0.7.0/src/gmdkit/mappings/obj_id/portal/teleport/__init__.py +0 -3
- gmdkit-0.7.0/src/gmdkit/mappings/obj_id/speed/__init__.py +0 -5
- gmdkit-0.7.0/src/gmdkit/mappings/obj_id/trigger/__init__.py +0 -96
- gmdkit-0.7.0/src/gmdkit/mappings/obj_id/trigger/enter/__init__.py +0 -6
- gmdkit-0.7.0/src/gmdkit/mappings/obj_id/trigger/enter_preset/__init__.py +0 -13
- gmdkit-0.7.0/src/gmdkit/mappings/obj_id/trigger/shader/__init__.py +0 -18
- gmdkit-0.7.0/src/gmdkit/mappings/obj_id_alias.py +0 -186
- gmdkit-0.7.0/src/gmdkit/mappings/obj_id_set.py +0 -375
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/__init__.py +0 -63
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/animated/__init__.py +0 -9
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/animated/explosion/__init__.py +0 -1
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/item_label/__init__.py +0 -6
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/level/__init__.py +0 -46
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/level/color_1_7/__init__.py +0 -5
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/level/color_1_7/background/__init__.py +0 -4
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/level/color_1_7/ground/__init__.py +0 -4
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/level/color_1_7/line/__init__.py +0 -4
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/level/color_1_7/object/__init__.py +0 -4
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/level/color_1_7/object_2/__init__.py +0 -4
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/level/color_1_9/__init__.py +0 -9
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/particle/__init__.py +0 -4
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/saw/__init__.py +0 -2
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/start_pos/__init__.py +0 -27
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/template/__init__.py +0 -1
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/text/__init__.py +0 -2
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/timewarp/__init__.py +0 -1
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/__init__.py +0 -92
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/adv_follow/__init__.py +0 -68
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/adv_random/__init__.py +0 -2
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/alpha/__init__.py +0 -3
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/animate/__init__.py +0 -2
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/animate_keyframe/__init__.py +0 -9
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/arrow/__init__.py +0 -11
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/bg_speed/__init__.py +0 -2
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/bpm/__init__.py +0 -5
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/camera_edge/__init__.py +0 -2
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/camera_guide/__init__.py +0 -4
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/camera_mode/__init__.py +0 -4
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/change_bg/__init__.py +0 -1
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/change_gr/__init__.py +0 -1
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/change_mg/__init__.py +0 -1
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/checkpoint/__init__.py +0 -4
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/collectible/__init__.py +0 -9
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/collectible/coin/__init__.py +0 -1
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/collision/__init__.py +0 -9
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/collision_block/__init__.py +0 -2
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/color/__init__.py +0 -14
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/count/__init__.py +0 -5
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/dash/__init__.py +0 -5
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/edit_adv_follow/__init__.py +0 -74
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/effect/__init__.py +0 -57
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/end/__init__.py +0 -5
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/end_wall/__init__.py +0 -3
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/enter_preset/__init__.py +0 -2
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/event/__init__.py +0 -5
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/follow/__init__.py +0 -5
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/follow_player_y/__init__.py +0 -6
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/force_block/__init__.py +0 -6
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/gamemode_portal/__init__.py +0 -4
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/gameplay_offset/__init__.py +0 -4
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/gradient/__init__.py +0 -15
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/gravity/__init__.py +0 -4
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/instant_collision/__init__.py +0 -8
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/instant_count/__init__.py +0 -5
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/item_compare/__init__.py +0 -16
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/item_edit/__init__.py +0 -14
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/item_persist/__init__.py +0 -5
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/keyframe/__init__.py +0 -18
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/link_visible/__init__.py +0 -1
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/mg_edit/__init__.py +0 -4
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/mg_speed/__init__.py +0 -2
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/move/__init__.py +0 -27
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/object_control/__init__.py +0 -1
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/offset_camera/__init__.py +0 -5
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/offset_gameplay/__init__.py +0 -1
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/on_death/__init__.py +0 -2
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/options/__init__.py +0 -14
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/orb_saw/__init__.py +0 -2
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/pickup/__init__.py +0 -5
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/player_control/__init__.py +0 -9
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/pulse/__init__.py +0 -15
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/random/__init__.py +0 -3
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/reset/__init__.py +0 -1
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/rotate/__init__.py +0 -20
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/rotate_camera/__init__.py +0 -6
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/scale/__init__.py +0 -12
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/sequence/__init__.py +0 -6
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/sfx/__init__.py +0 -44
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/shader/__init__.py +0 -156
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/shake/__init__.py +0 -3
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/song/__init__.py +0 -47
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/spawn/__init__.py +0 -7
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/spawn_particle/__init__.py +0 -11
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/state_block/__init__.py +0 -2
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/static_camera/__init__.py +0 -11
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/stop/__init__.py +0 -3
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/teleport/__init__.py +0 -18
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/teleport/exit_portal/__init__.py +0 -1
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/teleport/portal/__init__.py +0 -1
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/time/__init__.py +0 -9
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/time_control/__init__.py +0 -2
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/time_event/__init__.py +0 -4
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/toggle/__init__.py +0 -2
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/toggle_block/__init__.py +0 -4
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/touch/__init__.py +0 -5
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/ui/__init__.py +0 -6
- gmdkit-0.7.0/src/gmdkit/mappings/obj_prop/trigger/zoom_camera/__init__.py +0 -4
- gmdkit-0.7.0/src/gmdkit/remapping/base.py +0 -1220
- gmdkit-0.7.0/src/gmdkit/templates/generators/id_remapper.py +0 -153
- gmdkit-0.7.0/src/gmdkit.egg-info/scm_version.json +0 -8
- gmdkit-0.7.0/tests/temp_ai_tests.py +0 -448
- {gmdkit-0.7.0 → gmdkit-0.7.1}/.gitattributes +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/.github/workflows/pypi.yml +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/.github/workflows/pytest.yml +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/.github/workflows/sheets.yml +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/.gitignore +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/LICENSE +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/csv/class_table.csv +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/csv/hitbox_table.csv +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/csv/level_table.csv +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/csv/list_table.csv +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/csv/member_table.csv +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/csv/obj_default_color_table.csv +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/csv/object_table.csv +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/csv/prop_table.csv +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/csv/remap_table.csv +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/dat/main/CCGameManager.dat +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/dat/meltdown/CCGameManager.dat +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/dat/subzero/CCGameManager.dat +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Airborne Robots.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Back On Track.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Base After Base.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Blast Processing.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Cant Let Go.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Clubstep.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Clutterfunk.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Cycles.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Dash.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Deadlocked.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Dry Out.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Electrodynamix.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Electroman Adventures.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Fingerdash.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Geometrical Dominator.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Hexagon Force.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Jumper.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Nock Em.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Polargeist.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Power Trip.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Press Start.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Stereo Madness.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/The Cellar.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/The Challenge.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/The Secret Hollow.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/The Seven Seas.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/The Sewers.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/The Tower.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Theory of Everything 2.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Theory of Everything.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Time Machine.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/Viking Arena.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/official/xStep.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/offline/example_level.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/online/ORBIT.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/online/Skeletal Shenanigans.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmd/online/test.gmd +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmdl/Difficulty Soup.gmdl +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmdl/Easiest Demon Main List.gmdl +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmdl/Elijo Creer.gmdl +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmdl/Probably The Worst List.gmdl +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmdt/Flappy Bouncy.gmdt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmdt/Flappy Grass.gmdt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmdt/Flappy Sticky.gmdt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/gmdt/Nodes.gmdt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/json/animated_obj.json +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/json/obj_ids.json +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/json/tabs.json +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/default.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/0.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/1.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/10.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/11.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/12.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/13.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/14.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/15.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/16.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/17.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/18.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/19.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/2.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/20.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/23.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/3.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/4.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/5.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/6.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/7.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/8.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/guideline_string/9.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/1.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/10.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/11.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/12.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/13.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/14.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/15.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/16.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/17.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/18.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/19.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/2.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/20.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/21.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/22.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/3.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/3001.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/4.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/5.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/5001.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/5002.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/5003.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/5004.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/6.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/7.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/8.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/main/9.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/meltdown/1001.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/meltdown/1002.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/meltdown/1003.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/subzero/4001.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/subzero/4002.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/object_string/official/subzero/4003.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/data/txt/triggers/start_pos_delayer.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/examples/load_test.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/pyproject.toml +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/__init__.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/build_files.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/build_scripts/__init__.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/build_scripts/build_obj_ids.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/build_scripts/templates/casting_id_rules.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/build_scripts/templates/casting_obj_props.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/build_scripts/templates/object_fields.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/build_scripts/utils.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/compile_colors.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/data_collection/__init__.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/data_collection/evaluate_obj_keys.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/data_collection/generate_key_test.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/data_collection/obj_sets.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/data_collection/search_level_keys.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/scripts/download_sheets.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/setup.cfg +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/casting/__init__.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/casting/game_save_loader.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/casting/level_save_loader.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/casting/list_loader.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/casting/object_loader.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/constants/__init__.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/constants/game/__init__.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/constants/game/guideline/__init__.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/constants/game/speed/__init__.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/constants/paths/__init__.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/constants/paths/save/__init__.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/defaults/__init__.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/defaults/color_default.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/defaults/color_ids.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/defaults/level.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/defaults/objects.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/extensions/__init__.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/extensions/live_editor.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/extensions/text.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/functions/__init__.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/functions/guideline.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/__init__.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/animated.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/area.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/camera.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/collisions.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/follows.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/gameplay.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/items.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/misc.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/player.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/teleport.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/interfaces/transforms.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/level_pack.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/object.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/__init__.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/checkpoint.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/dpad.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/events.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/groups.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/guideline.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/gzip.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/hsv.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/likes.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/list.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/particle.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/persistent.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/pos_list.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/random.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/remaps.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/replay.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/sequence.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/song_info.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/prop/timer.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/save/__init__.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/save/game_manager.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/save/level_manager.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/save/music_library.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/models/save/sfx_library.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/remapping/__init__.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/remapping/base_func.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/remapping/types.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/serialization/__init__.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/serialization/mixins.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/serialization/type_cast.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/templates/__init__.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/templates/generators/__init__.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/utils/__init__.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/utils/classes.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/utils/functions.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit/utils/typing.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit.egg-info/dependency_links.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit.egg-info/requires.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/src/gmdkit.egg-info/top_level.txt +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/tests/__init__.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/tests/id_load_test.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/tests/object_test.py +0 -0
- {gmdkit-0.7.0 → gmdkit-0.7.1}/tests/time_orbit.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gmdkit
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.1
|
|
4
4
|
Summary: A toolkit for handling Geometry Dash level data.
|
|
5
5
|
Author: HDanke
|
|
6
6
|
License: MIT
|
|
@@ -70,11 +70,8 @@ from gmdkit import Level
|
|
|
70
70
|
# import object
|
|
71
71
|
from gmdkit import Object
|
|
72
72
|
|
|
73
|
-
# import
|
|
74
|
-
from gmdkit.
|
|
75
|
-
|
|
76
|
-
# import object functions
|
|
77
|
-
import gmdkit.functions.object as obj_func
|
|
73
|
+
# import interfaces
|
|
74
|
+
from gmdkit.models import interfaces
|
|
78
75
|
|
|
79
76
|
# open file
|
|
80
77
|
level = Level.from_file("example.gmd")
|
|
@@ -84,31 +81,18 @@ start = level.start
|
|
|
84
81
|
|
|
85
82
|
# get level objects as an ObjectList()
|
|
86
83
|
# object lists subclass list() so they can use all list methods alongside the ones defined by ListClass
|
|
87
|
-
# level.objects WILL throw an error if the level lacks an object string,
|
|
88
|
-
# or if you passed load = False to Level.from_file(), which skips loading objects
|
|
89
|
-
# LevelSave by default does not load the objects of levels
|
|
90
|
-
# so for any level you want to edit the objects of you must call level.load() first
|
|
91
84
|
obj_list = level.objects
|
|
92
85
|
|
|
93
86
|
# filter by condition
|
|
94
|
-
after_origin = obj_list.where(lambda obj: obj.
|
|
95
|
-
|
|
96
|
-
# apply functions, kwargs are filtered for each called function
|
|
97
|
-
# ex: obj_func.fix_lighter has 'replacement' as a key argument
|
|
98
|
-
after_origin.apply(obj_func.clean_duplicate_groups, obj_func.fix_lighter, replacement=0)
|
|
87
|
+
after_origin = obj_list.where(lambda obj: obj.interface.x > 0)
|
|
99
88
|
|
|
100
89
|
# create new object
|
|
101
90
|
new_obj = Object.default(1)
|
|
102
|
-
# set properties of object
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
obj_prop.Y: 200,
|
|
108
|
-
obj_prop.SCALE_X: 2,
|
|
109
|
-
obj_prop.SCALE_Y: 2
|
|
110
|
-
}
|
|
111
|
-
)
|
|
91
|
+
# set properties of object using the typed interface
|
|
92
|
+
intf = new_obj.require_interface(interfaces.BaseObject)
|
|
93
|
+
intf.x = 100
|
|
94
|
+
intf.y = 200
|
|
95
|
+
intf.scale = 2
|
|
112
96
|
|
|
113
97
|
# append object to the level's object list
|
|
114
98
|
# can also be done directly to level.objects or level['k4'].objects (which level.objects references)
|
|
@@ -47,11 +47,8 @@ from gmdkit import Level
|
|
|
47
47
|
# import object
|
|
48
48
|
from gmdkit import Object
|
|
49
49
|
|
|
50
|
-
# import
|
|
51
|
-
from gmdkit.
|
|
52
|
-
|
|
53
|
-
# import object functions
|
|
54
|
-
import gmdkit.functions.object as obj_func
|
|
50
|
+
# import interfaces
|
|
51
|
+
from gmdkit.models import interfaces
|
|
55
52
|
|
|
56
53
|
# open file
|
|
57
54
|
level = Level.from_file("example.gmd")
|
|
@@ -61,31 +58,18 @@ start = level.start
|
|
|
61
58
|
|
|
62
59
|
# get level objects as an ObjectList()
|
|
63
60
|
# object lists subclass list() so they can use all list methods alongside the ones defined by ListClass
|
|
64
|
-
# level.objects WILL throw an error if the level lacks an object string,
|
|
65
|
-
# or if you passed load = False to Level.from_file(), which skips loading objects
|
|
66
|
-
# LevelSave by default does not load the objects of levels
|
|
67
|
-
# so for any level you want to edit the objects of you must call level.load() first
|
|
68
61
|
obj_list = level.objects
|
|
69
62
|
|
|
70
63
|
# filter by condition
|
|
71
|
-
after_origin = obj_list.where(lambda obj: obj.
|
|
72
|
-
|
|
73
|
-
# apply functions, kwargs are filtered for each called function
|
|
74
|
-
# ex: obj_func.fix_lighter has 'replacement' as a key argument
|
|
75
|
-
after_origin.apply(obj_func.clean_duplicate_groups, obj_func.fix_lighter, replacement=0)
|
|
64
|
+
after_origin = obj_list.where(lambda obj: obj.interface.x > 0)
|
|
76
65
|
|
|
77
66
|
# create new object
|
|
78
67
|
new_obj = Object.default(1)
|
|
79
|
-
# set properties of object
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
obj_prop.Y: 200,
|
|
85
|
-
obj_prop.SCALE_X: 2,
|
|
86
|
-
obj_prop.SCALE_Y: 2
|
|
87
|
-
}
|
|
88
|
-
)
|
|
68
|
+
# set properties of object using the typed interface
|
|
69
|
+
intf = new_obj.require_interface(interfaces.BaseObject)
|
|
70
|
+
intf.x = 100
|
|
71
|
+
intf.y = 200
|
|
72
|
+
intf.scale = 2
|
|
89
73
|
|
|
90
74
|
# append object to the level's object list
|
|
91
75
|
# can also be done directly to level.objects or level['k4'].objects (which level.objects references)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
from gmdkit import Object, ObjectList
|
|
2
|
+
from gmdkit.models import interfaces
|
|
3
|
+
|
|
4
|
+
pool = ObjectList.from_file("data/txt/default.txt")
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def clean_obj(obj:Object):
|
|
8
|
+
intf = obj.require_interface(interfaces.BaseObject)
|
|
9
|
+
del intf.color_1_index
|
|
10
|
+
del intf.color_2_index
|
|
11
|
+
intf.x = 0
|
|
12
|
+
intf.y = 0
|
|
13
|
+
|
|
14
|
+
intf = obj.require_interface(interfaces.ParticleObject,None)
|
|
15
|
+
if intf:
|
|
16
|
+
intf.data = "30a-1a1a0.3a30a90a90a29a0a11a0a0a0a0a0a0a0a2a1a0a0a1a0a1a0a1a0a1a0a1a1a0a0a1a0a1a0a1a0a1a0a0a0a0a0a0a0a0a0a0a0a0a2a1a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0"
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
pool.apply(clean_obj)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
default = dict()
|
|
23
|
+
|
|
24
|
+
for obj in pool:
|
|
25
|
+
intf = obj.require_interface(interfaces.BaseObject)
|
|
26
|
+
object_id = intf.obj_id
|
|
27
|
+
default.setdefault(object_id, dict())
|
|
28
|
+
default[object_id].update(obj)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
lines = list()
|
|
32
|
+
|
|
33
|
+
for key, value in default.items():
|
|
34
|
+
lines.append(f" {repr(key)}: {repr(value)}")
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
with open("../src/gmdkit/defaults/objects.py","w") as file:
|
|
38
|
+
|
|
39
|
+
file.write("Default = {\n")
|
|
40
|
+
|
|
41
|
+
file.write(',\n'.join(lines))
|
|
42
|
+
|
|
43
|
+
file.write('\n')
|
|
44
|
+
|
|
45
|
+
file.write(' }')
|
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
from pathlib import Path
|
|
3
3
|
|
|
4
4
|
# Package Imports
|
|
5
|
-
from gmdkit import GameSave, ObjectString
|
|
6
|
-
from gmdkit.mappings import lvl_prop
|
|
5
|
+
from gmdkit import Level, GameSave, ObjectString
|
|
7
6
|
from gmdkit.functions.object import to_user_coins
|
|
8
7
|
|
|
9
8
|
save_path = Path("data/dat/")
|
|
@@ -30,16 +29,13 @@ for folder in common:
|
|
|
30
29
|
print(f"Processing level with ID {data['k1']}...")
|
|
31
30
|
|
|
32
31
|
try:
|
|
33
|
-
|
|
34
|
-
data
|
|
35
|
-
|
|
32
|
+
data: Level
|
|
33
|
+
data.object_string = ObjectString.from_file(level_file,encoding="latin-1")
|
|
36
34
|
data.objects.apply(to_user_coins)
|
|
37
|
-
|
|
38
|
-
data[lvl_prop.TYPE] = 2
|
|
39
|
-
|
|
35
|
+
data.level_type = 2
|
|
40
36
|
data.to_file(output_path)
|
|
41
37
|
except FileNotFoundError:
|
|
42
38
|
print("No object string file found, skipping.")
|
|
43
39
|
continue
|
|
44
40
|
|
|
45
|
-
print(f"Saved {data
|
|
41
|
+
print(f"Saved {data.name}.gmd")
|
|
@@ -2,7 +2,6 @@ __all__ = [
|
|
|
2
2
|
"constants",
|
|
3
3
|
"extensions",
|
|
4
4
|
"functions",
|
|
5
|
-
"mappings",
|
|
6
5
|
"models",
|
|
7
6
|
"remapping",
|
|
8
7
|
"typing",
|
|
@@ -23,7 +22,6 @@ __all__ = [
|
|
|
23
22
|
from . import constants
|
|
24
23
|
from . import extensions
|
|
25
24
|
from . import functions
|
|
26
|
-
from . import mappings
|
|
27
25
|
from . import models
|
|
28
26
|
from . import remapping
|
|
29
27
|
from .utils import typing, enums
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Package Imports
|
|
2
2
|
from gmdkit.utils import enums
|
|
3
3
|
from gmdkit.serialization.type_cast import decode_text, encode_text, get_string
|
|
4
|
+
from gmdkit.models.object import Object, ObjectList
|
|
4
5
|
from gmdkit.models.prop.list import IntList
|
|
5
6
|
from gmdkit.models.prop.pos_list import PositionList
|
|
6
7
|
from gmdkit.models.prop.gzip import ObjectString, ReplayString
|
|
@@ -72,7 +73,7 @@ class FieldLoaderMixin(PlistLoaderMixin, metaclass=FieldMetaclass):
|
|
|
72
73
|
|
|
73
74
|
practice_mode_best: int = DictField(key="k20", default=0)
|
|
74
75
|
|
|
75
|
-
|
|
76
|
+
level_type: enums.LevelType = DictField(
|
|
76
77
|
key="k21",
|
|
77
78
|
decoder=enums.LevelType,
|
|
78
79
|
default=enums.LevelType.LOCAL,
|
|
@@ -304,6 +305,229 @@ class FieldLoaderMixin(PlistLoaderMixin, metaclass=FieldMetaclass):
|
|
|
304
305
|
editor_build_tab_pages: dict = DictField(key="kI6", default_factory=dict, is_node=True)
|
|
305
306
|
|
|
306
307
|
editor_layer: int = DictField(key="kI7", default=0)
|
|
308
|
+
|
|
309
|
+
@property
|
|
310
|
+
def start(self) -> Object:
|
|
311
|
+
objstr = self.object_string
|
|
312
|
+
|
|
313
|
+
if not hasattr(objstr, "start"):
|
|
314
|
+
objstr.load()
|
|
315
|
+
|
|
316
|
+
return getattr(objstr, "start")
|
|
317
|
+
|
|
318
|
+
@start.setter
|
|
319
|
+
def start(self, value: Object):
|
|
320
|
+
objstr = self.object_string
|
|
321
|
+
|
|
322
|
+
if not hasattr(objstr, "start"):
|
|
323
|
+
objstr.load()
|
|
324
|
+
|
|
325
|
+
setattr(objstr, "start", value)
|
|
326
|
+
|
|
327
|
+
@property
|
|
328
|
+
def objects(self) -> ObjectList:
|
|
329
|
+
objstr = self.object_string
|
|
330
|
+
|
|
331
|
+
if not hasattr(objstr, "objects"):
|
|
332
|
+
objstr.load()
|
|
333
|
+
|
|
334
|
+
return getattr(objstr, "objects")
|
|
335
|
+
|
|
336
|
+
@objects.setter
|
|
337
|
+
def objects(self, value: ObjectList):
|
|
338
|
+
objstr = self.object_string
|
|
339
|
+
|
|
340
|
+
if not hasattr(objstr, "objects"):
|
|
341
|
+
objstr.load()
|
|
342
|
+
|
|
343
|
+
setattr(objstr, "objects", value)
|
|
344
|
+
|
|
345
|
+
@property
|
|
346
|
+
def difficulty(self) -> enums.LevelDifficulty:
|
|
347
|
+
"""
|
|
348
|
+
Gets the difficulty rating of a level.
|
|
349
|
+
|
|
350
|
+
Returns
|
|
351
|
+
-------
|
|
352
|
+
enums.LevelDifficulty
|
|
353
|
+
An enum specifying the level's difficulty.
|
|
354
|
+
"""
|
|
355
|
+
if self.rating == 0:
|
|
356
|
+
return enums.LevelDifficulty.NA
|
|
357
|
+
|
|
358
|
+
match self.rating_sum:
|
|
359
|
+
case enums.LevelRating.NONE:
|
|
360
|
+
return enums.LevelDifficulty.NA
|
|
361
|
+
case enums.LevelRating.EASY:
|
|
362
|
+
if self.is_auto:
|
|
363
|
+
return enums.LevelDifficulty.AUTO
|
|
364
|
+
else:
|
|
365
|
+
return enums.LevelDifficulty.EASY
|
|
366
|
+
case enums.LevelRating.NORMAL:
|
|
367
|
+
return enums.LevelDifficulty.NORMAL
|
|
368
|
+
case enums.LevelRating.HARD:
|
|
369
|
+
return enums.LevelDifficulty.HARD
|
|
370
|
+
|
|
371
|
+
case enums.LevelRating.HARDER:
|
|
372
|
+
return enums.LevelDifficulty.HARDER
|
|
373
|
+
|
|
374
|
+
case enums.LevelRating.INSANE:
|
|
375
|
+
if self.is_demon:
|
|
376
|
+
|
|
377
|
+
match self.demon_type:
|
|
378
|
+
|
|
379
|
+
case enums.DemonRating.EASY:
|
|
380
|
+
return enums.LevelDifficulty.EASY_DEMON
|
|
381
|
+
|
|
382
|
+
case enums.DemonRating.MEDIUM:
|
|
383
|
+
return enums.LevelDifficulty.MEDIUM_DEMON
|
|
384
|
+
|
|
385
|
+
case enums.DemonRating.HARD:
|
|
386
|
+
return enums.LevelDifficulty.HARD_DEMON
|
|
387
|
+
|
|
388
|
+
case enums.DemonRating.INSANE:
|
|
389
|
+
return enums.LevelDifficulty.INSANE_DEMON
|
|
390
|
+
|
|
391
|
+
case enums.DemonRating.EXTREME:
|
|
392
|
+
return enums.LevelDifficulty.EXTREME_DEMON
|
|
393
|
+
|
|
394
|
+
case _:
|
|
395
|
+
return enums.LevelDifficulty.HARD_DEMON
|
|
396
|
+
else:
|
|
397
|
+
return enums.LevelDifficulty.INSANE
|
|
398
|
+
|
|
399
|
+
case _:
|
|
400
|
+
return enums.LevelDifficulty.NA
|
|
401
|
+
|
|
402
|
+
@difficulty.setter
|
|
403
|
+
def difficulty(self, value: enums.LevelDifficulty):
|
|
404
|
+
del self.is_auto
|
|
405
|
+
del self.is_demon
|
|
406
|
+
self.rating = 10
|
|
407
|
+
|
|
408
|
+
match value:
|
|
409
|
+
case enums.LevelDifficulty.NA:
|
|
410
|
+
del self.rating
|
|
411
|
+
self.rating_sum = enums.LevelRating.NONE
|
|
412
|
+
|
|
413
|
+
case enums.LevelDifficulty.AUTO:
|
|
414
|
+
self.rating_sum = enums.LevelRating.EASY
|
|
415
|
+
self.is_auto = True
|
|
416
|
+
|
|
417
|
+
case enums.LevelDifficulty.EASY:
|
|
418
|
+
self.rating_sum = enums.LevelRating.EASY
|
|
419
|
+
|
|
420
|
+
case enums.LevelDifficulty.NORMAL:
|
|
421
|
+
self.rating_sum = enums.LevelRating.NORMAL
|
|
422
|
+
|
|
423
|
+
case enums.LevelDifficulty.HARD:
|
|
424
|
+
self.rating_sum = enums.LevelRating.HARD
|
|
425
|
+
|
|
426
|
+
case enums.LevelDifficulty.HARDER:
|
|
427
|
+
self.rating_sum = enums.LevelRating.HARDER
|
|
428
|
+
|
|
429
|
+
case enums.LevelDifficulty.INSANE:
|
|
430
|
+
self.rating_sum = enums.LevelRating.INSANE
|
|
431
|
+
|
|
432
|
+
case (
|
|
433
|
+
enums.LevelDifficulty.EASY_DEMON
|
|
434
|
+
| enums.LevelDifficulty.MEDIUM_DEMON
|
|
435
|
+
| enums.LevelDifficulty.HARD_DEMON
|
|
436
|
+
| enums.LevelDifficulty.INSANE_DEMON
|
|
437
|
+
| enums.LevelDifficulty.EXTREME_DEMON
|
|
438
|
+
):
|
|
439
|
+
self.rating_sum = enums.LevelRating.INSANE
|
|
440
|
+
self.is_demon = True
|
|
441
|
+
|
|
442
|
+
match value:
|
|
443
|
+
case enums.LevelDifficulty.EASY_DEMON:
|
|
444
|
+
self.demon_type = enums.DemonRating.EASY,
|
|
445
|
+
case enums.LevelDifficulty.MEDIUM_DEMON:
|
|
446
|
+
self.demon_type = enums.DemonRating.MEDIUM,
|
|
447
|
+
case enums.LevelDifficulty.HARD_DEMON:
|
|
448
|
+
self.demon_type = enums.DemonRating.HARD,
|
|
449
|
+
case enums.LevelDifficulty.INSANE_DEMON:
|
|
450
|
+
self.demon_type = enums.DemonRating.INSANE,
|
|
451
|
+
case enums.LevelDifficulty.EXTREME_DEMON:
|
|
452
|
+
self.demon_type = enums.DemonRating.EXTREME,
|
|
453
|
+
|
|
454
|
+
case _:
|
|
455
|
+
raise ValueError(f"Unsupported level difficulty: {value!r}")
|
|
456
|
+
|
|
457
|
+
@property
|
|
458
|
+
def feature_rating(self) -> enums.FeatureRating:
|
|
459
|
+
match self.epic_rating:
|
|
460
|
+
|
|
461
|
+
case enums.EpicRating.EPIC:
|
|
462
|
+
return enums.FeatureRating.EPIC
|
|
463
|
+
|
|
464
|
+
case enums.EpicRating.LEGENDARY:
|
|
465
|
+
return enums.FeatureRating.LEGENDARY
|
|
466
|
+
|
|
467
|
+
case enums.EpicRating.MYTHIC:
|
|
468
|
+
return enums.FeatureRating.MYTHIC
|
|
469
|
+
|
|
470
|
+
case _:
|
|
471
|
+
if self.feature_score:
|
|
472
|
+
return enums.FeatureRating.FEATURED
|
|
473
|
+
|
|
474
|
+
elif self.stars:
|
|
475
|
+
return enums.FeatureRating.RATED
|
|
476
|
+
|
|
477
|
+
else:
|
|
478
|
+
return enums.FeatureRating.UNRATED
|
|
479
|
+
|
|
480
|
+
@feature_rating.setter
|
|
481
|
+
def feature_rating(self, value: enums.FeatureRating) -> None:
|
|
482
|
+
match value:
|
|
483
|
+
case enums.FeatureRating.UNRATED:
|
|
484
|
+
self.epic_rating = enums.EpicRating.NONE
|
|
485
|
+
self.feature_score = 0
|
|
486
|
+
self.stars = 0
|
|
487
|
+
|
|
488
|
+
case enums.FeatureRating.RATED:
|
|
489
|
+
self.epic_rating = enums.EpicRating.NONE
|
|
490
|
+
self.feature_score = 0
|
|
491
|
+
|
|
492
|
+
case enums.FeatureRating.FEATURED:
|
|
493
|
+
self.epic_rating = enums.EpicRating.NONE
|
|
494
|
+
self.feature_score = self.feature_score or 1
|
|
495
|
+
|
|
496
|
+
case enums.FeatureRating.EPIC:
|
|
497
|
+
self.epic_rating = enums.EpicRating.EPIC
|
|
498
|
+
|
|
499
|
+
case enums.FeatureRating.LEGENDARY:
|
|
500
|
+
self.epic_rating = enums.EpicRating.LEGENDARY
|
|
501
|
+
|
|
502
|
+
case enums.FeatureRating.MYTHIC:
|
|
503
|
+
self.epic_rating = enums.EpicRating.MYTHIC
|
|
504
|
+
|
|
505
|
+
case _:
|
|
506
|
+
raise ValueError(f"Unsupported feature rating: {value!r}")
|
|
507
|
+
|
|
508
|
+
@property
|
|
509
|
+
def timely_type(self) -> enums.TimelyType:
|
|
510
|
+
"""
|
|
511
|
+
Gets the timely (daily, weekly, event) type of a level.
|
|
512
|
+
|
|
513
|
+
Returns
|
|
514
|
+
-------
|
|
515
|
+
enums.TimelyType
|
|
516
|
+
An enum specifying the level's timely type.
|
|
517
|
+
"""
|
|
518
|
+
tid = self.timely_id
|
|
519
|
+
|
|
520
|
+
if tid is None:
|
|
521
|
+
return enums.TimelyType.NONE
|
|
522
|
+
elif (0<tid<=10000):
|
|
523
|
+
return enums.TimelyType.DAILY
|
|
524
|
+
elif (10000<tid<=20000):
|
|
525
|
+
return enums.TimelyType.WEEKLY
|
|
526
|
+
elif (20000<tid<=30000):
|
|
527
|
+
return enums.TimelyType.EVENT
|
|
528
|
+
else:
|
|
529
|
+
return enums.TimelyType.NONE
|
|
530
|
+
|
|
307
531
|
|
|
308
532
|
FieldLoaderMixin.add_field(key="k24") # dislikes, unused
|
|
309
533
|
FieldLoaderMixin.add_field(key="k106") # unknown
|
|
@@ -6,8 +6,8 @@ from os import PathLike
|
|
|
6
6
|
|
|
7
7
|
# Package Imports
|
|
8
8
|
from gmdkit.models.object import Object, ObjectList
|
|
9
|
-
from gmdkit.
|
|
10
|
-
|
|
9
|
+
from gmdkit.models import interfaces
|
|
10
|
+
from gmdkit.utils import enums
|
|
11
11
|
|
|
12
12
|
MAGIC = b'\xc4\x19\x7b\xfa'
|
|
13
13
|
PREFIX = "GLOBED_SCRIPT"
|
|
@@ -147,7 +147,7 @@ class GlobedScript:
|
|
|
147
147
|
tail:bytes|None=None
|
|
148
148
|
):
|
|
149
149
|
|
|
150
|
-
self.object = text_object or Object.default(
|
|
150
|
+
self.object = text_object or Object.default(enums.ObjectID.OBJECT_TEXT)
|
|
151
151
|
self.prefix = prefix
|
|
152
152
|
self.main = main
|
|
153
153
|
self.filename = filename
|
|
@@ -163,7 +163,8 @@ class GlobedScript:
|
|
|
163
163
|
|
|
164
164
|
def load(self):
|
|
165
165
|
try:
|
|
166
|
-
|
|
166
|
+
intf = self.object.require_interface(interfaces.Text)
|
|
167
|
+
string = intf.data
|
|
167
168
|
string_bytes = string.encode("utf-8", errors="surrogateescape")
|
|
168
169
|
pre, main, fn, content, sig, tail = decode_script(string_bytes)
|
|
169
170
|
self.prefix = pre
|
|
@@ -189,7 +190,8 @@ class GlobedScript:
|
|
|
189
190
|
)
|
|
190
191
|
|
|
191
192
|
string = string_bytes.decode("utf-8", errors="surrogateescape")
|
|
192
|
-
self.object
|
|
193
|
+
intf = self.object.require_interface(interfaces.Text)
|
|
194
|
+
intf.data = string
|
|
193
195
|
|
|
194
196
|
except Exception as e:
|
|
195
197
|
raise RuntimeError(f"Error while saving script data to object: {e}") from e
|
|
@@ -225,11 +227,12 @@ class GlobedScript:
|
|
|
225
227
|
result = []
|
|
226
228
|
|
|
227
229
|
for obj in obj_list:
|
|
230
|
+
intf = obj.require_interface(interfaces.Text, fallback=None)
|
|
228
231
|
|
|
229
|
-
if
|
|
232
|
+
if intf is None:
|
|
230
233
|
continue
|
|
231
234
|
|
|
232
|
-
string =
|
|
235
|
+
string = intf.data
|
|
233
236
|
|
|
234
237
|
if string is None:
|
|
235
238
|
continue
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# Package Imports
|
|
2
|
+
from gmdkit.models.level import Level
|
|
3
|
+
from gmdkit.models.object import ObjectList
|
|
4
|
+
from gmdkit.models.prop.color import Color, ColorList
|
|
5
|
+
from gmdkit import remapping
|
|
6
|
+
from gmdkit.models import interfaces
|
|
7
|
+
|
|
8
|
+
RGBA = tuple[int,int,int,float]
|
|
9
|
+
|
|
10
|
+
def color_fade(color_1:Color, color_2:Color, percent:float) -> RGBA:
|
|
11
|
+
"""
|
|
12
|
+
Calculates an intermediary color between two colors.
|
|
13
|
+
|
|
14
|
+
Parameters
|
|
15
|
+
----------
|
|
16
|
+
color_1 : Color
|
|
17
|
+
The original color.
|
|
18
|
+
color_2 : Color
|
|
19
|
+
The new color.
|
|
20
|
+
percent : float
|
|
21
|
+
How much of the new color will be mixed in with the original one.
|
|
22
|
+
|
|
23
|
+
Returns
|
|
24
|
+
-------
|
|
25
|
+
RGBA
|
|
26
|
+
DESCRIPTION.
|
|
27
|
+
|
|
28
|
+
"""
|
|
29
|
+
r1, g1, b1, a1 = color_1.get_rgba()
|
|
30
|
+
r2, g2, b2, a2 = color_2.get_rgba()
|
|
31
|
+
|
|
32
|
+
r = round(r1 + (r2 - r1) * percent)
|
|
33
|
+
g = round(g1 + (g2 - g1) * percent)
|
|
34
|
+
b = round(b1 + (b2 - b1) * percent)
|
|
35
|
+
a = a1 + (a2 - a1) * percent
|
|
36
|
+
|
|
37
|
+
return (r,g,b,a)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def create_color_triggers(
|
|
41
|
+
color_list:ColorList,
|
|
42
|
+
ignore_default:bool=True,
|
|
43
|
+
ignore_ids:None=None,
|
|
44
|
+
pos_x:float=0,
|
|
45
|
+
pos_y:float=0
|
|
46
|
+
) -> ObjectList:
|
|
47
|
+
"""
|
|
48
|
+
Converts a list of colors into color triggers.
|
|
49
|
+
|
|
50
|
+
Parameters
|
|
51
|
+
----------
|
|
52
|
+
color_list :
|
|
53
|
+
A list to retrieve colors from.
|
|
54
|
+
offset_x : float, optional
|
|
55
|
+
Horizontal offset between triggers. The default is 0.
|
|
56
|
+
offset_y : float, optional
|
|
57
|
+
Vertical offset between triggers. The default is -30.
|
|
58
|
+
|
|
59
|
+
Returns
|
|
60
|
+
-------
|
|
61
|
+
ObjectListx
|
|
62
|
+
An ObjectList containing the generated color triggers.
|
|
63
|
+
"""
|
|
64
|
+
obj_list = ObjectList()
|
|
65
|
+
|
|
66
|
+
y = pos_y
|
|
67
|
+
x = pos_x
|
|
68
|
+
|
|
69
|
+
for color in color_list:
|
|
70
|
+
|
|
71
|
+
if ignore_ids is not None and color.channel in ignore_ids:
|
|
72
|
+
continue
|
|
73
|
+
|
|
74
|
+
if ignore_default and color.is_default():
|
|
75
|
+
continue
|
|
76
|
+
|
|
77
|
+
intf = interfaces.ColorTrigger.from_color(color)
|
|
78
|
+
intf.x = x
|
|
79
|
+
intf.y = y
|
|
80
|
+
y += -30
|
|
81
|
+
obj_list.append(intf.obj)
|
|
82
|
+
|
|
83
|
+
return obj_list
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def create_lvl_color_triggers(
|
|
87
|
+
lvl:Level,
|
|
88
|
+
ignore_default:bool=True,
|
|
89
|
+
pos_x:float=0,
|
|
90
|
+
pos_y:float=0
|
|
91
|
+
) -> ObjectList:
|
|
92
|
+
intf = lvl.start.require_interface(interfaces.LevelSettings)
|
|
93
|
+
lvl.objects += create_color_triggers(intf.colors,ignore_default,pos_x,pos_y)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def set_used_colors(lvl:Level):
|
|
97
|
+
used = remapping.rules.COLOR_ID_HANDLER.compile_ids(lvl).filter_values(reference=True).get_ids()
|
|
98
|
+
intf = lvl.start.require_interface(interfaces.LevelSettings)
|
|
99
|
+
intf.colors.set_defaults(*used)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def free_unused_colors(lvl:Level, ignore_ids:dict):
|
|
103
|
+
ignore_ids = ignore_ids or {}
|
|
104
|
+
|
|
105
|
+
rules = remapping.rules.BASE_ID_HANDLER.compile_rules(id_types=(remapping.IDType.COLOR_ID,))
|
|
106
|
+
|
|
107
|
+
ids = rules.compile_ids(lvl.objects, by_type=False).filter_values(fixed=False)
|
|
108
|
+
id_base = ids.filter_values(reference=False).get_ids()
|
|
109
|
+
id_ref = ids.filter_values(reference=True).get_ids()
|
|
110
|
+
unused = id_base - id_ref - ignore_ids
|
|
111
|
+
|
|
112
|
+
intf = lvl.start.require_interface(interfaces.LevelSettings)
|
|
113
|
+
intf.colors.exclude(lambda color: color.channel in unused)
|