Below is the code that simulates a projectile shout out a canon. This canon preforms fine when the SGSPhysicSolver is disabled. However, I would like to utilize the PhysicSolver in my game. Any advice on changes I could try?
Cannon-
function Fire(t) t.Gun.FireSound:Play() t.Gun.Fire:Emit(20) t.Gun.Smoke:Emit(20) t.Gun.Muzzle.Enabled = true delay(0.1,function() t.Gun.Muzzle.Enabled = false end) FastSpawn(function() for i = 1,5 do t.FBarrel.Weld.C0 = t.FBarrel.Weld.C0*CFrame.new(0,0,-0.8) wait() end for i = 1,20 do t.FBarrel.Weld.C0 = t.FBarrel.Weld.C0*CFrame.new(0,0,0.2) wait() end end) local shell = sp.Shell:clone() shell.Parent = workspace shell.Core.Weld:Destroy() shell.Core.Fire.Enabled = true shell.Core.Smoke.Enabled = true shell.Shell.Transparency = 0 shell.Core.CFrame = t.Gun.CFrame * CFrame.new (0,0,2.2) shell.Core.Velocity = t.Gun.CFrame.lookVector * set.ShellSpeed shell.Core.CFrame = shell.Core.CFrame * CFrame.fromEulerAnglesXYZ(0,math.rad(-90),math.rad(180)) game:GetService("Debris"):AddItem(shell,set.ShellDuration) local gravity = Instance.new("BodyForce", shell.Core) for i,v in pairs (shell:GetChildren()) do gravity.force = Vector3.new(0, gravity.force.Y + v:GetMass() * set.ShellGravity, 0) end local touched = false shell.Core.Touched:connect(function(part) if part.Parent ~= sp and part.Parent ~= t then if touched == false then touched = true Explode(shell.Core.Position) DamageVehicle(part) for _,plr in pairs(game.Players:GetPlayers()) do if plr:DistanceFromCharacter(shell.Core.Position) <= set.ExplosionRadius and plr.TeamColor ~= sp.Team.Value then plr.Character.Humanoid:TakeDamage(set.Damage) wait() end end shell:Destroy() end end end) end
Settings-
local set = { ExplosionRadius = 8; --Radius of the explosion ShellDuration = 10; --Duration of the shell (cleanup purposes) Damage = 100; --Damage of explosion ShotCooldown = 1.8; --Single shot cooldown ShellSpeed = 600; --Velocity of the shell CannonRotate = 0.25; --Increment of the barrel rotation up/down PlatformRotate = 0.75; --Increment of the turret rotation left/right CRMaxPos = 30; --Maximum upwards rotation of the barrel -- RADIANS CRMaxNeg = 15; --Minimum downwards rotation of the barrel -- RADIANS RepairTime = 300; Health = 1000; SidMaxRot = 150; --Maximum sideway rotation of the turret --RADIANS ShellGravity = 180; --Gravity of the shell, 196.2 is ZERO GRAVITY } return set