{"id":15969871,"url":"https://github.com/nikosgram/go-wfc-demo","last_synced_at":"2025-11-03T11:02:54.609Z","repository":{"id":93499521,"uuid":"524406783","full_name":"nikosgram/go-wfc-demo","owner":"nikosgram","description":"Golang Wave Function Collapse Demo","archived":false,"fork":false,"pushed_at":"2022-08-26T14:11:31.000Z","size":1751,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-04T14:45:06.971Z","etag":null,"topics":["collapse","function","wave","wfc"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nikosgram.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":"2022-08-13T13:27:58.000Z","updated_at":"2023-12-03T19:25:36.000Z","dependencies_parsed_at":null,"dependency_job_id":"c8b20108-c0db-4cb2-beaf-2db840117009","html_url":"https://github.com/nikosgram/go-wfc-demo","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/nikosgram/go-wfc-demo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikosgram%2Fgo-wfc-demo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikosgram%2Fgo-wfc-demo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikosgram%2Fgo-wfc-demo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikosgram%2Fgo-wfc-demo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nikosgram","download_url":"https://codeload.github.com/nikosgram/go-wfc-demo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikosgram%2Fgo-wfc-demo/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265636865,"owners_count":23802575,"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":["collapse","function","wave","wfc"],"created_at":"2024-10-07T19:42:08.037Z","updated_at":"2025-11-03T11:02:54.552Z","avatar_url":"https://github.com/nikosgram.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# go-wfc-demo\n\nGolang Wave Function Collapse Demo\n\n*Examples*\n\n![screneshot.png](screenshot.png)\n\n![screneshot_2.png](screenshot_2.png)\n\nThis demo is generating a map based on a set of \"structs\" located in the input.json file. The main idea behind of this\ndemo was to create a 2D map based on those tiles as fast as possible.\n\n*Structs textures:*\n\n![](assets/dirt.png)\n![](assets/dirt_road_corner.png)\n![](assets/dirt_road_straight.png)\n![](assets/dirt_road_t.png)\n![](assets/dirt_road_x.png)\n![](assets/dirt_to_grass.png)\n![](assets/dirt_to_grass_corner.png)\n![](assets/dirt_to_grass_corner_road_corner_0.png)\n![](assets/dirt_to_grass_corner_road_corner_1.png)\n![](assets/dirt_to_grass_corner_road_corner_2.png)\n![](assets/dirt_to_grass_corner_road_corner_3.png)\n![](assets/dirt_to_grass_corner_road_straight_0.png)\n![](assets/dirt_to_grass_corner_road_straight_1.png)\n![](assets/dirt_to_grass_corner_road_t_0.png)\n![](assets/dirt_to_grass_corner_road_t_1.png)\n![](assets/dirt_to_grass_corner_road_t_2.png)\n![](assets/dirt_to_grass_corner_road_t_3.png)\n![](assets/dirt_to_grass_corner_road_x.png)\n![](assets/dirt_to_grass_corner_road_τ_3.png)\n![](assets/dirt_to_grass_road_corner_0.png)\n![](assets/dirt_to_grass_road_corner_1.png)\n![](assets/dirt_to_grass_road_corner_2.png)\n![](assets/dirt_to_grass_road_corner_3.png)\n![](assets/dirt_to_grass_road_straight_0.png)\n![](assets/dirt_to_grass_road_straight_1.png)\n![](assets/dirt_to_grass_road_t_0.png)\n![](assets/dirt_to_grass_road_t_1.png)\n![](assets/dirt_to_grass_road_t_2.png)\n![](assets/dirt_to_grass_road_t_3.png)\n![](assets/dirt_to_grass_road_x.png)\n![](assets/dirt_to_grass_u.png)\n![](assets/dirt_to_grass_u_road_corner_0.png)\n![](assets/dirt_to_grass_u_road_corner_1.png)\n![](assets/dirt_to_grass_u_road_corner_2.png)\n![](assets/dirt_to_grass_u_road_corner_3.png)\n![](assets/dirt_to_grass_u_road_straight_0.png)\n![](assets/dirt_to_grass_u_road_straight_1.png)\n![](assets/dirt_to_grass_u_road_t_0.png)\n![](assets/dirt_to_grass_u_road_t_1.png)\n![](assets/dirt_to_grass_u_road_t_2.png)\n![](assets/dirt_to_grass_u_road_t_3.png)\n![](assets/dirt_to_grass_u_road_x.png)\n![](assets/flowers.png)\n![](assets/flowers_to_forest.png)\n![](assets/flowers_to_forest_corner.png)\n![](assets/flowers_to_forest_t.png)\n![](assets/flowers_to_forest_u.png)\n![](assets/forest.png)\n![](assets/forest_to_dirt.png)\n![](assets/forest_to_dirt_t_road_straight.png)\n![](assets/forest_to_firt_t_road_straight.png)\n![](assets/forest_to_grass.png)\n![](assets/forest_to_grass_corner.png)\n![](assets/forest_to_grass_t.png)\n![](assets/forest_to_grass_t_road_straight.png)\n![](assets/forest_to_grass_u.png)\n![](assets/grass.png)\n![](assets/grass_road_corner.png)\n![](assets/grass_road_straight.png)\n![](assets/grass_road_t.png)\n![](assets/grass_road_x.png)\n\nThe only reason that's possible is because of each struct reference a connection_id for each of its faces, similar to\nsudoku, each tile can only connect with a selected list of structs on each of its faces.\n\n*Structs example:*\n\n```yaml\n0: dirt\n1: grass\n2: grass_road\n3: dirt_road\n4: forest\n```\n\n```json\n[\n  {\n    \"texture\": \"flowers.png\",\n    \"allow_rotation\": true,\n    \"pos_x\": 1,\n    \"pos_y\": 1,\n    \"neg_x\": 1,\n    \"neg_y\": 1,\n    \"pos_z\": -1,\n    \"neg_z\": -1\n  },\n  ...\n  {\n    \"texture\": \"dirt.png\",\n    \"allow_rotation\": true,\n    \"pos_x\": 0,\n    \"pos_y\": 0,\n    \"neg_x\": 0,\n    \"neg_y\": 0,\n    \"pos_z\": -1,\n    \"neg_z\": -1\n  },\n  ...\n  {\n    \"texture\": \"grass.png\",\n    \"allow_rotation\": true,\n    \"pos_x\": 1,\n    \"pos_y\": 1,\n    \"neg_x\": 1,\n    \"neg_y\": 1,\n    \"pos_z\": -1,\n    \"neg_z\": -1\n  },\n  {\n    \"texture\": \"grass_road_straight.png\",\n    \"allow_rotation\": true,\n    \"pos_x\": 1,\n    \"pos_y\": 2,\n    \"neg_x\": 1,\n    \"neg_y\": 2,\n    \"pos_z\": -1,\n    \"neg_z\": -1\n  },\n  ...\n]\n```\n\nThe algorithm is also able to calculate rotations of each tile/structs. In addition, theoretically, the algorithm could\nalso create a 3D map, though, never tested it before.\n\n## HOW TO?\n\nJust build, run the executable, and open the `index.html` file in your browser :) Though, opening it directly in your\nbrowser might not work cause of modern browser's cors settings, for that reason I recommend to open it with a tool\nas `live-serve` or `http-serve` or any other http server application that you are familiar with.\n\n### Compile and Run\n\nFirst of all, you'll need to be sure that you rocking golang version 1.19 in your machine, just run `go version` in your\nterminal. If the version you have available locally is older than 1.19, you can always download the current version from\ngo.dev https://go.dev/dl/. It is possible that you'll be able to compile the project with an older version than 1.19,\nbut it's not well tested, you might experience issues.\n\nThe next step is actually pretty simple, just build and run the executable :)\n\n```shell\ngo build \u0026 wfc.exe\n```\n\n## Dependencies and Libraries\n\nThis project is using no libraries or dependencies other than what golang version 1.19 is already including.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnikosgram%2Fgo-wfc-demo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnikosgram%2Fgo-wfc-demo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnikosgram%2Fgo-wfc-demo/lists"}