Hi @AdaptabiI!
How can I make this code work better?
local grassfolder = workspace.Grass
local ts = game:GetService("TweenService")
local cooldown = false
local tweenMove
local tweenNormal
-----|| Settings ||-----
local multiplier = 28
local tweentime = .8
local cooldown_devision = 8
local tweenInfoNormal = TweenInfo.new(tweentime * 2, Enum.EasingStyle.Quad, Enum.EasingDirection.InOut)
local tweenInfoTouched = TweenInfo.new(tweentime)
for i, grass in pairs(grassfolder:GetChildren()) do
grass.PrimaryPart.Transparency = 1
grass.RotateMain.Transparency = 1
grass.HitBox.Touched:Connect(function(hit)
if hit.Parent:FindFirstChild("Humanoid") then
cooldown = true
local hum = hit.Parent:FindFirstChild("Humanoid")
local movedir = hum.MoveDirection.Unit
if movedir.X > 0 and movedir.Z > 0 then
local facevector = grass.RotateMain.CFrame * CFrame.Angles(math.rad(movedir.X * multiplier), math.rad(0), math.rad(movedir.Z * multiplier))
tweenMove = ts:Create(grass.PrimaryPart, tweenInfoTouched, {CFrame = facevector})
tweenMove:Play()
wait(tweentime / cooldown_devision)
cooldown = false
else
cooldown = false
end
end
end)
grass.HitBox.TouchEnded:Connect(function(hit)
if hit.Parent:FindFirstChild("Humanoid") then
local hum = hit.Parent:FindFirstChild("Humanoid")
local movedir = hum.MoveDirection.Unit
local facevector = grass.RotateMain.CFrame * CFrame.Angles(math.rad(0), math.rad(0), math.rad(0))
tweenNormal = ts:Create(grass.PrimaryPart, tweenInfoNormal, {CFrame = facevector})
tweenNormal:Play()
end
end)
end
Actually this works, but not everytime I touch the bush/grass…
Maybe you can help me
I’ve just made the code a bit neater, You’re not using your “cooldown” debounce correctly, it’s not being used at all infact, you should have it as a dictionaryvalue where CoolDown[grass] = false/true
local GrassFolder = workspace.Grass
local TS = game:GetService("TweenService")
-----|| Settings ||-----
local multiplier = 28
local tweentime = .8
local cooldown_devision = 8
local tweenInfoNormal = TweenInfo.new(tweentime * 2, Enum.EasingStyle.Quad, Enum.EasingDirection.InOut)
local tweenInfoTouched = TweenInfo.new(tweentime)
-----| Debounce Dictionary |-----
local CoolDown = {}
for i, grass in ipairs(GrassFolder:GetChildren()) do
grass.PrimaryPart.Transparency = 1
grass.RotateMain.Transparency = 1
grass.HitBox.Touched:Connect(function(hit)
if hit.Parent:FindFirstChild("Humanoid") then
CoolDown[grass] = true
local hum = hit.Parent:FindFirstChild("Humanoid")
local movedir = hum.MoveDirection.Unit
if movedir.Magnitude > 0 then
local facevector = grass.RotateMain.CFrame * CFrame.Angles(math.rad(movedir.X * multiplier), math.rad(0), math.rad(movedir.Z * multiplier))
local TweenMove = TS:Create(grass.PrimaryPart, tweenInfoTouched, {CFrame = facevector})
TweenMove:Play()
wait(tweentime / cooldown_devision)
CoolDown[grass] = false
return end
CoolDown[grass] = false
end
end)
grass.HitBox.TouchEnded:Connect(function(hit)
if hit.Parent:FindFirstChild("Humanoid") then
local hum = hit.Parent:FindFirstChild("Humanoid")
local movedir = hum.MoveDirection.Unit
local facevector = grass.RotateMain.CFrame * CFrame.Angles(math.rad(0), math.rad(0), math.rad(0))
local TweenNormal = TS:Create(grass.PrimaryPart, tweenInfoNormal, {CFrame = facevector})
TweenNormal:Play()
end
end)
end
This is the updated code, .Touched is sometimes unreliable (i may be wrong about this because i remember there being an article showing the proper way to use .touched) So that’s why the .touched might not always fire, try use what i’ve supplied now though
Hi again!
I hope that this is the last Question I ask you…
so, i made wind Simulation… but… when I put the Wind strengh to 0.9999998999999999 you can´t really see the wind Animation, but when put the strengh to 1.0 it is too strong and it spines around way too much!
--|| Wind ||--
while wait(tweentime * (tweenbackMultiplier/2)) do
if wind then
for i, grass in ipairs(GrassFolder:GetChildren()) do
local windtween = TS:Create(grass.PrimaryPart, tweenInfoWind, {CFrame = grass.PrimaryPart.CFrame * CFrame.Angles(math.random(0 - windStrengh, 0 + windStrengh), math.rad(0), math.random(0 - windStrengh, 0 + windStrengh))})
windtween:Play()
if not touching then
wait(tweentime / 1.2)
local normaltween2 = TS:Create(grass.PrimaryPart, tweenInfoWind, {CFrame = grass.RotateMain.CFrame * CFrame.Angles(math.rad(math.random(-1, 1)), math.rad(0), math.rad(math.random(-1, 1)))})
normaltween2:Play()
end
end
end
end
while wait(tweentime * (tweenbackMultiplier/2)) do
if wind then
local CFrameDifference = CFrame.Angles(math.random(-windStrengh, windStrengh), math.rad(0), math.random(-windStrengh, windStrengh)
for i, grass in ipairs(GrassFolder:GetChildren()) do
local windtween = TS:Create(grass.PrimaryPart, tweenInfoWind, {CFrame = grass.PrimaryPart.CFrame * CFrameDifference)})
windtween:Play()
if not touching then
wait(tweentime / 1.2)
local normaltween2 = TS:Create(grass.PrimaryPart, tweenInfoWind, {CFrame = grass.RotateMain.CFrame * CFrame.Angles(math.rad(math.random(-1, 1)), math.rad(0), math.rad(math.random(-1, 1)))})
normaltween2:Play()
end
end
end
end
It probably occurs because you are multiplying the current CFrame by the new ‘CFrameDifference’ that i’ve put in, You will want to check that the ‘windtween’ is not called more than once, just make sure it’s not doing it over and over again (check your while wait(tweentime * (tweenbackMultiplier/2)) do)
Copy the code i sent as it is now because i’ve edited it a bit, Come back to me if it still doesn’t work
hey, TheHeroGamer001 I was looking at this topic and it seems very interesting. Is it possible if you could send a video of how it turned out, I want to try and implement this into my game but I don’t know how it turned out so I would like to see an example first!
how did you get the wind system to work I have been trying to figure it out but I am not able to. i have no idea how you implemented it into the script
As shown here, this is how I would get the wind to work. It has been 2 years and i haven’t been developing for awhile so I may not have the answer for you right away.
But the idea is that you have ‘wind gusts’ so at every time interval (tweentime * (tweenbackmultiplier/2)) it will apply a tween to each grasspart transforming it to move in the direction fo the wind.
Try using the quoted piece of code and if possible, DM me about this so we are not necrobumping this thread
I’ve had the same issue with grass and wanted to make one and I found that your solution is very helpful but I can’t seem to know where exactly to place everything or whether if the script is local or not.
(Yes the grass mesh is quite primitive)
This is all done in a local script to compensate for the servers processing
(Meaning this does not replicate but it is very efficient)
(Layout Of grass and folder)
(Video of grass working and wind)
(RBXM (ROBLOX MODEL FILE) FILE) grasssys.rbxm (33.2 KB)