Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local part = Instance.new("Part", script)
- part.Size = Vector3.new(10, 6, .1)
- part.Position = Vector3.new(-10, 5, -10)
- part.Anchored = true
- part.Material = "Glass"
- part.Transparency = .5
- local sf = Instance.new("SurfaceGui", part)
- sf.Face = "Front"
- sf.ClipsDescendants = false
- local backg = Instance.new("Frame", sf)
- backg.Size = UDim2.new(1, 0, 1, 0)
- backg.BackgroundColor3 = Color3.new()
- s_size = backg.AbsoluteSize
- local t_back = Instance.new("TextBox", sf)
- t_back.Position = UDim2.new(1, 0, 0, 0)
- t_back.Size = UDim2.new(0, 400, 1, 0)
- t_back.BackgroundColor3 = Color3.new(.2, .2, .2)
- t_back.TextScaled = true
- t_back.TextXAlignment = 0
- t_back.TextYAlignment = 0
- -- the
- local s = [[
- local sf = script.Parent.SurfaceGui
- local s_size = sf.Frame.AbsoluteSize
- -- settings
- settings = {}
- settings.g = Vector2.new(0, 0)
- settings.fps = 60
- settings.wrapx = false
- settings.wrapy = false
- settings.boundx = true
- settings.boundy = true
- -- physics functions
- function addforce(ob, f)
- ob.acc += f/ob.mass
- end
- function grav(one, two, g)
- local the = two.pos - one.pos
- local g_force = one.mass*two.mass*g/the.Magnitude^2
- local forc = the / the.Magnitude * g_force
- addforce(one, forc)
- end
- function upd(ob, dt)
- dt = dt or 1
- addforce(ob, settings.g)
- ob.vel += ob.acc*dt
- ob.pos += ob.vel*dt
- if settings.wrapx then
- ob.pos = Vector2.new(ob.pos.X % s_size.X, ob.pos.Y)
- end
- if settings.wrapy then
- ob.pos = Vector2.new(ob.pos.X, ob.pos.Y % s_size.Y)
- end
- if settings.boundx then
- ob.pos = ob.pos:Max(Vector2.new(ob.size.X/2, -math.huge))
- ob.pos = ob.pos:Min(Vector2.new(s_size.X - ob.size.X/2, math.huge))
- end
- if settings.boundy then
- ob.pos = ob.pos:Max(Vector2.new(-math.huge, ob.size.Y/2))
- ob.pos = ob.pos:Min(Vector2.new(math.huge, s_size.Y - ob.size.Y/2))
- end
- ob.acc = Vector2.new()
- end
- function show(ob)
- ob.vis.Position = UDim2.new(0, ob.pos.X, 0, ob.pos.Y)
- ob.vis.Rotation = ob.angle
- ob.vis.Size = UDim2.new(0, ob.size.X, 0, ob.size.Y)
- end
- function obj(x, y, s, a, m, v, ac)
- m = m or 1
- x = x or 0
- y = y or 0
- s = s or Vector2.new(20, 20)
- a = a or 0
- v = v or Vector2.new(0, 0)
- ac = ac or Vector2.new()
- local p = {}
- p.pos = Vector2.new(x, y)
- p.size = s
- p.angle = a
- p.mass = m
- p.vel = v
- p.acc = ac
- local vis = Instance.new("Frame", sf)
- vis.AnchorPoint = Vector2.new(.5, .5)
- vis.BackgroundColor3 = Color3.new(1,1,1)
- p.vis = vis
- return p
- end
- ]]
- local e = [[
- load()
- while true do
- update(task.wait(1/settings.fps))
- end
- ]]
- -- main stuff
- local real = [[
- local test1
- local test2
- local info
- function checktouchedwall(ob)
- if ob.pos.X == ob.size.X/2 then
- return Vector2.new(1, 0)
- end
- if ob.pos.X == s_size.X - ob.size.X/2 then
- return Vector2.new(-1, 0)
- end
- if ob.pos.Y == ob.size.Y/2 then
- return Vector2.new(0, 1)
- end
- if ob.pos.Y == s_size.Y - ob.size.Y/2 then
- return Vector2.new(0, -1)
- end
- end
- function load()
- settings.boundx = true
- settings.boundy = true
- --obj(x, y, s, a, m, v, ac)
- test1 = obj(s_size.X/2, s_size.Y/2, false, false, false, false)
- test2 = obj(250, 350, false, false, false, false, false)
- test2.vel = Vector2.new(10, 40)
- info = Instance.new("TextBox", sf)
- info.Size = UDim2.new(0, 200, 0, 60)
- info.TextScaled = true
- info.TextXAlignment = 0
- info.BackgroundTransparency = 1
- info.TextColor3 = Color3.new(1,1,1)
- info.RichText = true
- table.foreach(test2, print)
- end
- function update(dt)
- info.Text="vel: "..math.round(test2.vel.X)..", "..math.round(test2.vel.Y).."<br />".."pos: "..math.round(test2.pos.X)..", "..math.round(test2.pos.Y).."<br />".."grav: "..settings.g.X..", "..settings.g.Y.."<br />".."dt: "..dt
- ------------------- real stuff
- local normal = checktouchedwall(test2)
- if normal then
- test2.vel = test2.vel - 2*test2.vel:Dot(normal)*normal
- end
- grav(test2, test1, 600000)
- upd(test2, dt)
- show(test2)
- show(test1)
- end
- ]]
- t_back.Text = ""
- t_back.PlaceholderText = real
- -- executors
- NS(s..real..e, part)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement