{"id":23231824,"url":"https://github.com/tangilj/goslingutilscsharp","last_synced_at":"2025-04-05T19:35:22.834Z","repository":{"id":133516059,"uuid":"344800398","full_name":"TangilJ/GoslingUtilsCSharp","owner":"TangilJ","description":"A C# port of GoslingUtils, a set of tools for making RLBots. See the original here: https://github.com/ddthj/GoslingUtils","archived":false,"fork":false,"pushed_at":"2021-03-07T14:44:03.000Z","size":107,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-11T17:18:54.064Z","etag":null,"topics":["bot","rlbot","rocket-league"],"latest_commit_sha":null,"homepage":"","language":"C#","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/TangilJ.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":"2021-03-05T12:12:57.000Z","updated_at":"2021-03-11T12:20:16.000Z","dependencies_parsed_at":null,"dependency_job_id":"6203269c-d7e7-466f-9d56-a6123b699940","html_url":"https://github.com/TangilJ/GoslingUtilsCSharp","commit_stats":null,"previous_names":["tangilj/goslingutilscsharp"],"tags_count":0,"template":false,"template_full_name":"RLBot/RLBotCSharpExample","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TangilJ%2FGoslingUtilsCSharp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TangilJ%2FGoslingUtilsCSharp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TangilJ%2FGoslingUtilsCSharp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TangilJ%2FGoslingUtilsCSharp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TangilJ","download_url":"https://codeload.github.com/TangilJ/GoslingUtilsCSharp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247392909,"owners_count":20931799,"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":["bot","rlbot","rocket-league"],"created_at":"2024-12-19T02:16:41.947Z","updated_at":"2025-04-05T19:35:22.794Z","avatar_url":"https://github.com/TangilJ.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"[\u003cimg src=\"https://img.shields.io/github/workflow/status/TheBlocks/GoslingUtilsCSharp/.NET\"\u003e](https://github.com/TheBlocks/GoslingUtilsCSharp/actions)\n[\u003cimg src=\"https://img.shields.io/github/license/TheBlocks/GoslingUtilsCSharp\"\u003e](https://github.com/TheBlocks/GoslingUtilsCSharp/blob/master/LICENSE)\n\n# GoslingUtilsCSharp\n\nThis is a C# port of GoslingUtils, which is a set of tools in Python for making RLBots. See the original\nhere: https://github.com/ddthj/GoslingUtils.\n\nYou should be able to follow along with the\n[RLBot Start-To-Finish series](https://www.youtube.com/playlist?list=PL2MGDOTjPtl8fuoXmqxTmASW1ZtrPEXQ2) with this port,\neven if the series is in Python. Just make sure to check the source code for the port in case you expect something\ndifferent.\n\nNote that this port tries to be close to the original implementation, which is why some code may not be idiomatic C# or\ndone in a way you might expect from C#. Nevertheless, this should make it easier to follow along with the tutorial\nseries.\n\nIf you notice any bugs/issues, please feel free to create an issue via the Issues tab or make a pull request.\n\nNote that this port is based on commit\n[733b6b0](https://github.com/ddthj/GoslingUtils/tree/733b6b05bc9cab8da596d6ed324fbfbf179100a0) of the original\nrepository.\n\n## Porting notes\n\nThis C# version is mostly a 1-to-1 port of the original Python implementation. However, there are differences where it's\nnecessary to have them, such as using interfaces when the original doesn't use them. Such differences are noted in the\nsource code with explanations as to why the port strays from the original.\n\nTypically, the usage of the C# port should be similar to the usage of the original Python implementation, but make sure\nto look at the C# source code for comments in case you're expecting something different with certain code.\n\nComments are the same as the Python version. Comments explaining differences between the original and the port are\nprefixed with \"Porting note\" so that it's clear that they're not part of the original comments. Additional documentation\ncomments are also prefixed with \"Porting note\".\n\n## Architectural differences\n\nThe port is very similar to the original implementation, but because of the type system there are some minor things to\nbe noted.\n\n* In the original implementation, all routine classes have a `run` method but there are no interfaces or abstract\n  classes. In C#, we cannot have this without dynamic typing, so we have an interface in the port called `IRoutine` with\n  a `Run` method.\n* Similarly, all routine classes for shots have `intercept_time` and `ball_location` fields in the Python\n  implementation. In the C# port, we have an interface called `IShotRoutine` with these as properties.\n* The original implementation creates its own internal data structures for the Ball and GameInfo. We don't need to do\n  this because the example bot template already comes with nice to use structures. This is why you need to\n  write `Ball.Physics.Location` but in the original it's `ball.location` (without the `.physics`);\n\n## To do\n\nThere are a number of things that are left to be done for this port:\n\n### ~~Must~~ (port is finished)\n\n### Should\n\n* Create a port of Gosling using these ported utilities\n\n### Could\n\n* Possibly create a more idiomatic version of this port with intentionally different design decisions to fit C# better\n\n## Requirements\n\nThis project was tested on .NET Framework v4.6.1. Your mileage may vary on newer versions like .NET 5.\n\nThe project requires the RLBot.Framework package and the System.ValueTuple package from NuGet. Your IDE should be able\nto automatically fetch these packages on first build, but if you run into issues try manually uninstalling and\nreinstalling them. ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftangilj%2Fgoslingutilscsharp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftangilj%2Fgoslingutilscsharp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftangilj%2Fgoslingutilscsharp/lists"}