Data Realms Fan Forums http://45.55.195.193/ |
|
Basic Gravity Gun fired through Lua http://45.55.195.193/viewtopic.php?f=73&t=33103 |
Page 1 of 1 |
Author: | Djinn [ Tue Nov 27, 2012 6:19 pm ] |
Post subject: | Basic Gravity Gun fired through Lua |
I know there have been several of these, but not only do many of them not work anymore, they're far more complicated than I require. Pretty much I'm looking for this, mounted on a MOSRotating and firing either through lua or an emitter - when the beam is on, it pulls whatever it hits in towards the emitter (slowly, not snapping in) and when you let it go, it pushes it out gently rather than firing it out. The closest thing I can find is the mech's gravity gun in this mod, but even that is too heavy duty. I want the most basic possible way of doing it, but I'm no good at rays just yet. EDIT: Nope, disregard, I just ripped that gun apart and reverse-engineered it. Code: function Create(self) self.LTimer = Timer(); self.firemode = 0; -- 0 is inactive, 1 is gravitate, 2 is launch self.launchsound = false; self.canlaunchsound = true; -------------------- ----- The variables here can be changed to alter various properties of the phys cannon. self.launchpower = 0; -- strength of the launch. 120 is default. self.pickuppower = 100; -- strength of the pull. 120 is default. self.launchrange = 5; -- size of the area to check for objects to launch. 35 is default. self.pickuprange = 20; -- size of the area to check for objects to pull. 35 is default. -------------------- local curdist = 50; for actor in MovableMan.Actors do local avgx = actor.Pos.X - self.Pos.X; local avgy = actor.Pos.Y - self.Pos.Y; local dist = math.sqrt(avgx ^ 2 + avgy ^ 2); if dist < curdist and actor:HasObject("Brainfighter") then self.parent = actor; end end end function Update(self) --GRABBING THE OBJECT if self.firemode == 0 and self.LTimer:IsPastSimMS(5) then self.firemode = 1; end if self.firemode == 1 and MovableMan:IsActor(self.parent) then for particle in MovableMan.Particles do if particle.ClassName == "MOSRotating" or particle.ClassName == "AEmitter" then local paravgx = particle.Pos.X - self.Pos.X; local paravgy = particle.Pos.Y - self.Pos.Y; local dist = math.sqrt(paravgx ^ 2 + paravgy ^ 2); if dist < self.pickuprange then particle.Vel = Vector((self.Pos.X - particle.Pos.X), (self.Pos.Y - particle.Pos.Y)) / (1 + (particle.Mass / self.pickuppower)); particle:SetWhichMOToNotHit(self.parent,0.3); particle.RotSpeed = 0 end end end end -- RELEASING THE OBJECT if MovableMan:IsActor(self.parent) then if not (self.parent:GetController():IsState(Controller.WEAPON_FIRE)) then self.firemode = 2; end end if self.firemode == 2 and MovableMan:IsActor(self.parent) then for particle in MovableMan.Particles do if particle.ClassName == "MOSRotating" or particle.ClassName == "AEmitter" then local paravgx = particle.Pos.X - self.Pos.X; local paravgy = particle.Pos.Y - self.Pos.Y; local dist = math.sqrt(paravgx ^ 2 + paravgy ^ 2); if dist < self.launchrange then particle.Vel = self.Vel / (1 + (particle.Mass / self.launchpower)); particle.RotSpeed = 0 --self.launchsound = true; end end end end --[[if self.firemode == 1 and MovableMan:IsActor(self.parent) then for actor in MovableMan.Actors do local avgx = actor.Pos.X - self.Pos.X; local avgy = actor.Pos.Y - self.Pos.Y; local dist = math.sqrt(avgx ^ 2 + avgy ^ 2); if dist < self.pickuprange and actor.ID ~= self.parent.ID then actor.Vel = Vector((self.Pos.X - actor.Pos.X), (self.Pos.Y - actor.Pos.Y)) / (1 + (actor.Mass / self.pickuppower)); actor:SetWhichMOToNotHit(self.parent,0.3); end end end]] --[[if self.firemode == 2 and MovableMan:IsActor(self.parent) then for actor in MovableMan.Actors do local avgx = actor.Pos.X - self.Pos.X; local avgy = actor.Pos.Y - self.Pos.Y; local dist = math.sqrt(avgx ^ 2 + avgy ^ 2); if dist < self.launchrange and actor.ID ~= self.parent.ID then actor.Vel = self.Vel / (1 + (actor.Mass / self.launchpower)); --self.launchsound = true; end end end]] --[[if self.launchsound == true and self.canlaunchsound == true then local firesound = CreateAEmitter("Mech Gravi Gun Sound Fire","D9.rte"); firesound.Pos = self.parent.Pos; MovableMan:AddParticle(firesound); self.launchsound = false; self.canlaunchsound = false; end]] end The code in question - all I want it to be able to do is pick up objects, so I commented out the ability for it to pick up items and actors. |
Page 1 of 1 | All times are UTC [ DST ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |