Dynamic Trees - Need help

Place to get help with not working mods / modding interface.
TheSAguy
Smart Inserter
Smart Inserter
Posts: 1455
Joined: Mon Jan 13, 2014 6:17 pm
Contact:

Dynamic Trees - Need help

Post by TheSAguy »

Hi,

Let me first explain what I'm trying to do and then show my code, that not currently working as I'd like.
I'm trying to create a dynamic environment.

I want to find all trees, (only where the area has been revealed).

Each tree found, should have a chance to reproduce, or die. Then remove some dead trees to make space for new trees.
Reproduction should be slightly higher than killing, so forests can grow.

So, after the trees are found,
Then have small % chance to add a new tree. small chance to kill a tree and a small change to remove a dead tree.
I don't know how to create a new position that's just randomly 0.5 from the existing position.
So my current code below does not create any new trees.

This is the current code:

Code: Select all

---Bio Domes - v.0.0.1

require ("util")


script.on_event(defines.events.on_tick, function(event)

local surface = game.surfaces['nauvis']
	local my_random = math.random(100)
	if game.tick % 60 == 0 and my_random > 80 then

		for chunk in surface.get_chunks() do
			local entities = surface.find_entities_filtered{type="tree", area={{chunk.x*32, chunk.y*32}, {(chunk.x+1)*32, (chunk.y+1)*32}}}
			
				for _, entity in pairs(entities) do
					
					if entity.name == "dead-tree" then
						--- Remove some dead trees
						writeDebug("Dead Tree")
						local my_random2 = math.random(100)
						if my_random2 > 95 then
							entity.destroy()
						end
					else
						-- Plant a new tree
						local position = entity.position				
						local new_position = position -- Can't get this to work, since I tried 	local new_position = {x=position + 0.5, y=position + 0.5}
						--surface.create_entity({ name="tree-01", amount=1, position=new_position})
						writeDebug("Spread Seedling " .. my_random)
						
						--- Kill a tree
						local my_random3 = math.random(100)
						if my_random3 > 95 then
						entity.destroy()
						writeDebug("Kill Tree " .. my_random3)
						
						surface.create_entity({ name="dead-tree", amount=1, position=position})
						end
						
					end
				end
		end
	end

end)


--- DeBug Messages 
function writeDebug(message)
	for i, player in pairs(game.players) do
		player.print(tostring(message))
	end
end


Attachments
Bio_Domes_0.0.1.zip
(1.41 KiB) Downloaded 66 times
User avatar
Ranakastrasz
Smart Inserter
Smart Inserter
Posts: 2179
Joined: Thu Jun 12, 2014 3:05 am
Contact:

Re: Dynamic Trees - Need help

Post by Ranakastrasz »

local new_position = position -- Can't get this to work, since I tried local new_position = {x=position + 0.5, y=position + 0.5}

Code: Select all

local new_position = {x = position.x + (math.random(-1,1)*0.5),x = position.y + ( math.random(-1,1)*0.5)}
Should work, untested.
My Mods:
Modular Armor Revamp - V16
Large Chests - V16
Agent Orange - V16
Flare - V16
Easy Refineries - V16
Post Reply

Return to “Modding help”