{"id":17011239,"url":"https://github.com/sysl-dev/deft","last_synced_at":"2026-04-28T21:03:54.220Z","repository":{"id":225066871,"uuid":"764974864","full_name":"sysl-dev/DEFT","owner":"sysl-dev","description":"Data, Examine, Filter, Task","archived":false,"fork":false,"pushed_at":"2024-02-29T21:26:57.000Z","size":11,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-27T12:48:33.629Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sysl-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-02-29T03:35:15.000Z","updated_at":"2024-02-29T03:35:52.000Z","dependencies_parsed_at":"2024-02-29T04:31:06.776Z","dependency_job_id":"a234b105-3edd-4f09-9edb-10f962e6df81","html_url":"https://github.com/sysl-dev/DEFT","commit_stats":null,"previous_names":["sysl-dev/deft"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sysl-dev%2FDEFT","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sysl-dev%2FDEFT/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sysl-dev%2FDEFT/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sysl-dev%2FDEFT/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sysl-dev","download_url":"https://codeload.github.com/sysl-dev/DEFT/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244960060,"owners_count":20538744,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-14T06:06:34.470Z","updated_at":"2026-04-28T21:03:49.180Z","avatar_url":"https://github.com/sysl-dev.png","language":"Lua","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DEFT\nData, Examine, Filter, Task\n\n# About\nDEFT (Data, Examine, Filter, Task) is the way that I look at all my games made in love, but in a more standarized library.\n\n## what?\nThings we want to do things with are just data in a table, we look at that table, filter and run tasks based on those filters.\n\n## Demo\nSimple demo is included that shows the names in a table once and plays a boom about every 1 second.\n\n# Functions\n## Create Deft Class\n```lua\nDEFT = require('DEFT')\n```\nThis creates the class so you can use ```DEFT.new()``` to make unique DEFT boxes.\n```lua\nConductor = DEFT.new()\n```\n\n## Create new Examine Queue\n```lua\nConductor.examine_new(\"actor_watch\")\n```\n\n## Remove new Examine Queue\n```lua\nConductor.examine_delete(\"actor_watch\")\n```\n\n## Run Examine Queue (under update, draw, etc)\n```lua\nfunction love.update(dt)\n  -- Conductor..examine_run(string_name, data, string_sort_method, ...)\n  Conductor.examine_run(\"actor_watch\", actors, \"standard\", dt)\nend\n```\nYou can also call \"reverse\" instead of standard to walk though the data in reverse order. Good if you're removing values from the table.\n\n## Add a Filter to Examine Queue\n```lua\nConductor.examine_add_filter(\"actor_watch\", \"data_has_name\")\n\nConductor.examine_add_filter(string_examine_name, string_filter_name)\n```\n\n## Create a new filter\n```lua\nlocal function data_has_name(data, data_value)\n  if data[data_value].name then return true end\nend\n\nConductor.filter_new(\"data_has_name\", data_has_name)\n\nConductor.filter_new(string_name, function_filter)\n```\n\n## Delete a filter (remember to remove it from any Examine queues first)\n```lua\nConductor.filter_delete(string_name)\n```\n\n## Add a task to a filter\n```lua\nConductor.filter_add_task(string_filter_name, string_task_name)\n```\n\n## Create a task\n```lua\nConductor.task_new(string_name, function_task)\n```\n\n## Delete a task\n```lua\nConductor.task_delete(string_name)\n```\n\n# Example\n```lua\nlocal actors = {\n{name = \"bob\", x=0, y=0, w=16, h=16, state=\"alive\", timer=0},\n{name = \"sally\", x=0, y=0, w=16, h=16, state=\"alive\", timer=0},\n{name = \"bomb\", x=0, y=0, w=16, h=16, state=\"alive\", timer=0, dieon=1},\n{type = \"point\", x=0, y=0},\n}\n\nlocal DEFT_SYSTEM = require('DEFT')\n\nConductor = DEFT_SYSTEM.new(true)\n\n\nlocal function data_has_name(data, data_value)\n  if data[data_value].name then return true end\nend\n\nlocal said_names = {}\nlocal function print_names_once(data, data_value, extra_data)\n  if not said_names[data[data_value].name] then\n    print(\"Name: \", data[data_value].name)\n    said_names[data[data_value].name] = true\n  end\nend\n\nlocal function data_has_timer_and_called_bomb(data, data_value)\n  local data_part = data[data_value]\n  if data_part.timer and data_part.name == \"bomb\" and data_part.dieon then return true end\nend\n\nlocal function bomb_counts_up(data, data_value, extra_data)\n  data[data_value].timer = data[data_value].timer + extra_data[1]\nend\n\nlocal function bomb_blows_up_and_resets(data, data_value, extra_data)\n  local data_part = data[data_value]\n  if data[data_value].timer \u003e data_part.dieon then\n    print(\"BOOOOOOM\")\n    data[data_value].timer = 0\n  end\nend\n\n\nConductor.examine_new(\"actor_watch\")\nConductor.filter_new(\"data_has_name\", data_has_name)\nConductor.task_new(\"print_names\", print_names_once)\nConductor.examine_add_filter(\"actor_watch\", \"data_has_name\")\nConductor.filter_add_task(\"data_has_name\", \"print_names\")\n\nConductor.filter_new(\"data_has_timer_and_called_bomb\", data_has_timer_and_called_bomb)\nConductor.examine_add_filter(\"actor_watch\", \"data_has_timer_and_called_bomb\")\nConductor.task_new(\"bomb_counts_up\", bomb_counts_up)\nConductor.task_new(\"bomb_blows_up_and_resets\", bomb_blows_up_and_resets)\n\nConductor.filter_add_task(\"data_has_timer_and_called_bomb\", \"bomb_counts_up\")\nConductor.filter_add_task(\"data_has_timer_and_called_bomb\", \"bomb_blows_up_and_resets\")\n\n\nfunction love.update(dt)\n  Conductor.examine_run(\"actor_watch\", actors, \"standard\", dt)\nend\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsysl-dev%2Fdeft","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsysl-dev%2Fdeft","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsysl-dev%2Fdeft/lists"}