{"id":25472777,"url":"https://github.com/FabioSmuu/SDK_PluginC2","last_synced_at":"2025-11-05T04:30:30.939Z","repository":{"id":46045821,"uuid":"423609059","full_name":"FabioSmuu/SDK_PluginC2","owner":"FabioSmuu","description":"Este repositório como intuito demonstrar como eu desenvolvo meus plugins de construct 2.","archived":false,"fork":false,"pushed_at":"2024-09-05T04:37:31.000Z","size":75,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-14T00:41:30.580Z","etag":null,"topics":["behaviors","c2","c2-addon","c2-behavior","c2-plugin","construc2-behavior","construct","construct2","construct2-plugin","plugins"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FabioSmuu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2021-11-01T20:36:57.000Z","updated_at":"2024-09-05T04:37:34.000Z","dependencies_parsed_at":"2025-01-14T02:11:51.125Z","dependency_job_id":"0fdaec06-bce9-4e92-ac80-b72813820dad","html_url":"https://github.com/FabioSmuu/SDK_PluginC2","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FabioSmuu%2FSDK_PluginC2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FabioSmuu%2FSDK_PluginC2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FabioSmuu%2FSDK_PluginC2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FabioSmuu%2FSDK_PluginC2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FabioSmuu","download_url":"https://codeload.github.com/FabioSmuu/SDK_PluginC2/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239449573,"owners_count":19640534,"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":["behaviors","c2","c2-addon","c2-behavior","c2-plugin","construc2-behavior","construct","construct2","construct2-plugin","plugins"],"created_at":"2025-02-18T10:02:01.340Z","updated_at":"2025-11-05T04:30:30.885Z","avatar_url":"https://github.com/FabioSmuu.png","language":"JavaScript","funding_links":[],"categories":["Recently Updated","Addon Development"],"sub_categories":["[Feb 17, 2025](/content/2025/02/17/README.md)","Construct 2"],"readme":"# Modelo de Plugin - SDk para a game engine [Construct 2](https://www.construct.net/en/construct-2/download).\n\nDesenvolvi esta SDK com o intuito de facilitar o meu desenvolvimento em relação a plugin e como quase que diariamente me perguntam como desenvolvo, resolvi deixar uma base atualizada com algumas explicações, para que ajude estas pessoas a iniciar um addon próprio.\n\n### Informações básicas:\n- Todo os metodos dos plugin tanto na [*edittime.js*](/SDK_Exemplo/edittime.js) quanto na [*runtime.js*](/SDK_Exemplo/runtime.js) estão repletos de comentarios.\n- A *runtime.js* foi rescrita usando classes, apenas para que suas prototypes funcionem como uma instância única.\n- Cuidado ao desenvolver um plugin direto no construct, pois, qualquer erro bobo pode corromper sua engine.\n- Os arquivos de exemplos contem algumas ACEs exatamente, por exemplo, então use a [*SDK_Limpa*](/SDK_Limpa) em seus projetos.\n- Você pode se aventurar tanto com uma SDK Limpa de [*Plugin*](/SDK_Limpa/Plugin) ou [*Behavior*](/SDK_Limpa/Behavior).\n\n### Como configurar um behavior:\n\u003e Embora esta SDK seja para desenvolver plugin, se torna possível desenvolver behaviors seguindo estes passos.\n- No arquivo [*edittime.js*](/SDK_Exemplo/edittime.js#L2), Altere **GetPluginSettings** por **GetBehaviorSettings**.\n- Mantenha o [*type*](/SDK_Exemplo/edittime.js#L11) com o valor **'object'**, para evitar bugs.\n- Evite [*flags*](/SDK_Exemplo/edittime.js#L13) com modificações graficas.\n- Na [*linha 152 da edittime.js*](/SDK_Exemplo/edittime.js#L152) altere **CreateIDEObjectType** para **CreateIDEBehaviorType**.\n- Finalizando a edittime, altere **IDEObjectType** por **IDEBehaviorType** na [*linha 153*](/SDK_Exemplo/edittime.js#L153) e [*156 da edittime.js*](/SDK_Exemplo/edittime.js#L156)\n\n- A edição na runtime será trocar de **cr.plugins_** para **cr.behaviors** nas linhas [**33**](/SDK_Exemplo/runtime.js#L33) e [**45**](/SDK_Exemplo/runtime.js#L45).\n- Busque na runtime qualquer referência com a palavra plugin e a substitua por behavior.\n- Edite a class **type**, colocando o parametro o **objtype** na constructor e tribundo a this:\n```js\nclass Type {\n\t\tconstructor(behavior, objtype) {\n\t\t\tthis.behavior = behavior\n\t\t\tthis.runtime = behavior.runtime\n\t\t\tthis.objtype = objtype\n\t\t}\n...\n```\n\n- Também edite a class **Instance** e adicione o metodo **tick()** (um exemplo comentadno na [*linha 78 da runtime.js*](/SDK_Exemplo/runtime.js#L78)) e sua crontrutor inserindo o prametro inst, atribuindo a this, alem de atribuir a type do behavior.\n```js\nclass Instance {\n\t\tconstructor(type, inst) {\n\t\t\tthis.type = type\n\t\t\tthis.behavior = type.behavior\n\t\t\tthis.inst = inst\n\t\t\tthis.runtime = type.runtime\n\t\t}\n\n\t\ttick() {\n\t\t\t//\n\t\t}\n\t\t...\n```\n\n\n\n### Primeiros passos:\n\u003e Você primeiro deve informar a engine, as configurações do seu plugin, para isso você irá configurar a [edittime.js](/SDK_Exemplo/edittime.js)\n- Na [*linha 4*](/SDK_Exemplo/edittime.js#L4) dev ser informado o nome do plugin\n- O id para o plugin deve ser o mesmo tanto na [*linha 5 da edittime.js*](/SDK_Exemplo/edittime.js#L5) quanto na [*linha 35 da runtime.js*](/SDK_Exemplo/runtime.js#L35)\n- Defina também uma versão na [*linha 6 da edittime.js*](/SDK_Exemplo/edittime.js#L6)\n- Defina uma descrição na [*linha 7 da edittime.js*](/SDK_Exemplo/edittime.js#L7) para ser exibida ao inserir o plugin.\n- A categoria irá definir onde visualmente seu plugin estará antes de ser colocado no projeto, defina na [*linha 10 da edittime.js*](/SDK_Exemplo/edittime.js#L10).\n- O tipo de plugin poderá ser **object** *(apenas código)* ou **world** *(plugin visual/gráfico)* na [*linha 11 da edittime.js*](/SDK_Exemplo/edittime.js#L11)\n- A opção [*rotatable na linha 12 da edittime.js*](/SDK_Exemplo/edittime.js#L12) só deve ser ativa, caso o plugin possua edição de rotação na engine.\n```js\n'name':\t\t\t'Nome visual do plugin',\n'id':\t\t\t'NomeInternoNaRuntime',\n'version':\t\t'0.1',\n'description':\t\t'Descrição do que o plugin faz.',\n'author':\t\t'DeehLeh',\n'help url':\t\t'https://deehleh.itch.io',\n'category':\t\t'DeehLeh',\n'type':\t\t\t'object',\n``` \n\n### Ativando os ticks do plugin:\n- Descomente o metodo tick na [*linha 78 na runtime.js*](/SDK_Exemplo/runtime.js#L78) ou crie-o na class  **Instance**.\n- Para ativar o tick, você deve descomentar a [*linha 101 na runtime.js*](/SDK_Exemplo/runtime.js#L101) ou inserir a seguinte linha no metodo **OnCreate** da class **Instance**:\n```js\nthis.runtime.tickMe(this)\n``` \n\n### Exemplos para fins didatísticos:\nEmitir um alert:\n- Esta ação usa o parametro da [*linha 63 da edittime.js*](/SDK_Exemplo/edittime.js#L63) como argumento em um alert.\n- A ação de alert se encontra na [*linha 64 da edittime.js*](/SDK_Exemplo/edittime.js#L64) e seu metodo na [*linha 137 da runtime.js*](/SDK_Exemplo/runtime.js#L137)\n\nEntentendo oque são Trigger's:\n\u003e Os trigger são condições que serão ativas por alguma função/metodo ou até mesmo ações, como no caso deste exemplo.\n- Na [*linha 66 da edittime.js*](/SDK_Exemplo/edittime.js#L66) esta configurada a ação que chamará o trigger.\n- Já na [*linha 95 da edittime.js*](/SDK_Exemplo/edittime.js#L95) es encontra a condição que será acionada, note que a flag usada se chama **cf_trigger**.\n- A ação de ativar o triger é feito na [*linha 141 da runtime.js*](/SDK_Exemplo/runtime.js#L141) chamado a condição **exampleTrigger()** na [*linha 179 da runtime.js*](/SDK_Exemplo/runtime.js#L179)\n\nManipulação de loop:\n\u003e A manipulação de loop ocorre em toda ACE, ação, condição e expressão.\n\nA condição irá pegar uma quantia de vezes que deverá acionar as ações no mesmo tick.\n- Esta quantia para este exemplo pode ser visivel na [*linha 102 da edittime.js*](/SDK_Exemplo/edittime.js#L102)\n- A condição em si, esta localizada na [*linha 103 da edittime.js*](/SDK_Exemplo/edittime.js#L103). note que a flag usada se chama **cf_looping**.\n- Agora na [*linha 213 da runtime.js*](/SDK_Exemplo/runtime.js#L213) se encontra toda a estrutura do loop com pausas de eventos e comentarios.\n\nA ação da qual um loop precisa é a de para-lo, pois, nem sempre queremos um loop que percorra até o final.\n- Na [*linha 68 da edititime.js*](/SDK_Exemplo/edittime.js#L68) se encontra a ação de parar o loop independente de seu tick.\n- Já seu metodo se encontra na [*linha 146 da runtime.js*](/SDK_Exemplo/runtime.js#L146), sem nenhum mistério ou novidade.\n\nPor último temos a expressão que retorna em qual index o loop se encontra.\n- Sem nenhum parâmetro ou flags próprias a expressão se encontra na [*linha 129 da edittime.js*](/SDK_Exemplo/edittime.js#L129)\n- Seu metodo, também simples, se encontra na [*linha 294 da runtime.js*](/SDK_Exemplo/runtime.js#L294), deixando claro que qualquer expressão deve retornar dentro da função **ret**, que é um parâmetro obrigatório em todas as expressões.\n\nManipular objetos:\n\u003e A manipulação de objetos ocorre apos a detecção do sol, então é separado um array de instância para o objeto selecionado.\n\n- Teremos um parâmetro na [*linha 73 da edittime.js*](/SDK_Exemplo/edittime.js#L73) responsável pela seleção do objeto.\n- Enquanto na [*linha 74 da edittime.js*](/SDK_Exemplo/edittime.js#L74) um parâmetro define o angulo.\n- A ação de mudança do angulo se encontra na [*linha 75 da edittime.js*](/SDK_Exemplo/edittime.js#L75) e seu metodo na [*linha 156 da runtime.js*](/SDK_Exemplo/runtime.js#L156).\n\n\n\nOutros exemplos você pode observar dentro na pasta [*SDK_Exemplo*](/SDK_Exemplo)\n\n**Obrigado pela sua atenção!**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FFabioSmuu%2FSDK_PluginC2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FFabioSmuu%2FSDK_PluginC2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FFabioSmuu%2FSDK_PluginC2/lists"}