## Conway's Game of Life ## Rules: ## 1. Any cell with >2 neighbors survives ## 2. Any dead cell with 3 live neighbors becomes alive ## 3. All other cells die (all dead cells remaing dead) extends Node2D @export var world_seed: int @export var cell_size: Vector2 = Vector2(16, 16) @export var cell_texture: Texture2D @export var world_size: Vector2 = Vector2(128, 128) var cell_instance var generation: int = 1 var world: Array = [] func _ready() -> void: if world_seed: seed(world_seed) generate_world() # Create the cell using the rendering server func create_cell(location: Vector2) -> RID: var rs = RenderingServer cell_instance = rs.canvas_item_create() rs.canvas_item_set_parent(cell_instance, get_canvas_item()) var rect: Rect2 = Rect2(-cell_size.x/2, -cell_size.y/2, cell_size.x, cell_size.y) # Centered with cell size rs.canvas_item_add_texture_rect(cell_instance, rect, cell_texture) var location_fixed = Vector2(location.x * cell_size.x, location.y * cell_size.y) var trans = Transform2D(0, location_fixed) rs.canvas_item_set_transform(cell_instance, trans) return cell_instance ## Generate the world with the initial cells func generate_world() -> void: for x in range(world_size.x): world.append([]) for y in range(world_size.y): if randi_range(0, 1): world[x].append(create_cell(Vector2(x, y))) else: world[x].append(0)