How to make a tree fall away from the player when cut down?

I’ve been trying to script a tree to fall away from the player when the player cuts it down but I couldn’t succeed in it. The script down below gives me the correct direction but the impulse doesnt push the tree part away, it just stands there as if there was no impulse. Can someone help?

local PhysicsService = game:GetService("PhysicsService")
local Players = game:GetService("Players")
local Tree = script.Parent

local function invertDifference(pos1,pos2)
	local diff = pos1-pos2
	return pos1+diff
end

local function breakTree()
	local TreeHP = Tree:GetAttribute("Health")
	print(TreeHP)
	if TreeHP == 0 then
		Tree.Name = "CutTree"
		Tree:SetAttribute("Health", nil)
		local playerName = Tree:FindFirstChild("Owner").Value
		local player = workspace:FindFirstChild(playerName.Name).HumanoidRootPart

		for i, v in Tree.Parent:GetChildren() do
			if v == Tree then
				local push = invertDifference(Tree.Position, player.Position)
				local newpart = Instance.new("Part")
				newpart.Parent = workspace
				newpart.Position = push
				v:ApplyImpulse(push * 10)
			end
			v.Anchored = false
			
			print(v)
		end
	end
end

Tree.AttributeChanged:Connect(breakTree)

Have you tried using different velocity methods like LinearAssemblyVelocity?

1 Like

Try replacing :ApplyImpulse() with :ApplyImpulseAtPosition() and use the tree’s top end position as the position argument.

You most likely also have to increase the force you’re using to something ridiculously high. Most likely push*10 is just too low.


Best regards,
Pinker

1 Like

Turns out i forgot to put the .Anchored = false before applying the impulse LOL
edit 1 - now the tree was falling but it always fell towards the opposite of 0,0,0 so i asked the roblox assistant, it misunderstood me and gave me a code that makes the tree fall towards me. Surprisingly it was working so i modified it to fall to the opposite side of the character. I dont know what was wrong honestly. Here’s the code:

	local TreeHP = Tree:GetAttribute("Health")
	print(TreeHP)
	if TreeHP == 0 then
		Tree.Name = "CutTree"
		Tree:SetAttribute("Health", nil)
		local playerName = Tree:FindFirstChild("Owner").Value
		local player = workspace:FindFirstChild(playerName.Name).HumanoidRootPart
		local TreeModel = Tree.Parent

		for i, v in Tree.Parent:GetChildren() do
			if v == Tree then
				v.Anchored = false
				local push = player.Position - Tree.Position
				local impulsedirection = Instance.new("Part")
				impulsedirection.Parent = workspace
				impulsedirection.CanCollide = false
				impulsedirection.Anchored = true
				impulsedirection.Position = Tree.Position + push

				local TreeCoord = Vector3.new(Tree.Position.X, Tree.Position.Y + 4, Tree.Position.Z)
				local actualpush = push * Vector3.new(-1,1,-1)
				v:ApplyImpulseAtPosition(actualpush * 60, TreeCoord)

				local impulsepos = Instance.new("Part")
				impulsepos.Parent = workspace
				impulsepos.CanCollide = false
				impulsepos.Anchored = true
				impulsepos.Position = TreeCoord
			end
			v.Anchored = false

			print(v)
		end
	end
end```