Hello. I am working on a turn-based strategy game which is based on a grid of many blocks. Here is a code snippet of my terrain generation (keep in mind that some variables here are called earlier):
local terrain = {} function planTerrain() -- put terrain into array for x = 1,size.X do terrain[x] = {} for y = 1, size.Y do local noise = 10*math.noise(x/5,y/5,seed) local currentblock --if noise >= 1 then --currentblock = "Mountain" -- turn into building? if noise >= -1 then currentblock = "Grass" else currentblock = "Water" end if currentblock then local blocktags = { block = currentblock; biome = GetBiome(x,y); size = B_I[currentblock].Size; canwalkon = B_I[currentblock].CanWalkOn; currentunit = nil; coords = Vector2.new(x,y); building = nil } table.insert(terrain[x],y,blocktags) end end end updateclients() return terrain end planTerrain() --excecute planning
On the clientside, the 2d array gets visualized, and the player can invoke the server from there. I even made a remote function which the player can invoke to move a unit. My only problem, however, is deciding which moves are legal. Water, mountains, etc. should all block unit paths. Not to mention, each unit has its own movement points (aka the max blocks it can walk every turn). I wanted to use PathfindingService but I have no idea how to display SurfaceGuis on moves that are valid.
I just don't know where to even start.