Author |
Message |
MaximDude
Joined: Wed Nov 22, 2006 3:19 pm Posts: 2073
|
Particle check issue
Ok, so, I made a brain crab and I wanted to add a nice touch to it - Instead of being just a crab with a brain sprite, I made an attachable brain that can be destroyed without the crab itself being destroyed (Realism and such, you know). Anyway, the issue is rather stupid I think, but I can't seem to solve it... >________>' So, the way the thing works is that there is an emitter attached to the attached brain, that emitter emits a MOPixel. A lua script attached to the crab checks whether the particle exists within a certain range and if it doesn't find it, the activity ends. The issue is that... Well... The activity ends, regardless whether the particle exists or not, or alternatively, the script does nothing at all. This is the code: Code: function Update(self) local curdist = 200; for particle in MovableMan.Particles do local avgx = particle.Pos.X - self.Pos.X; local avgy = particle.Pos.Y - self.Pos.Y; local dist = math.sqrt(avgx ^ 2 + avgy ^ 2); if particle.PresetName == "Brain Check" and dist < curdist then self.Existing = 1 else self.Existing = 0 end if self.Existing == 0 then ActivityMan:EndActivity(); else self.Existing = nil; end end end Please point out the idiotic mistake here, I really want to get this thing done. >________>'
|
Sat Dec 12, 2009 12:20 am |
|
|
411570N3
Joined: Wed Jan 07, 2009 10:26 am Posts: 4074 Location: That quaint little British colony down south
|
Re: Particle check issue
I thought you were able to just directly have the brain attached and have it work. Try not bothering with Lua and attaching a brain actor to the crab.
|
Sat Dec 12, 2009 4:31 am |
|
|
PhantomAGN
Joined: Mon Jun 29, 2009 2:40 am Posts: 610 Location: Deep below The Map of Mars
|
Re: Particle check issue
Check running before emitter starts emitting, maybe? Your implementation feels odd to me. How about using lua to look at itself and see if there's a brain attached instead? Via if there is a brain actor within a close distance, with no emitters needed.
|
Sat Dec 12, 2009 8:50 am |
|
|
MaximDude
Joined: Wed Nov 22, 2006 3:19 pm Posts: 2073
|
Re: Particle check issue
PhantomAGN wrote: How about using lua to look at itself and see if there's a brain attached instead? Via if there is a brain actor within a close distance, with no emitters needed. I'm not very fluent with lua, so I really didn't think of that. >_________>' I hope I can get it to work. Edit: Wait... On second though... How the hell am I supposed to do that? It just doesn't seem right. >_________>'
|
Sat Dec 12, 2009 3:09 pm |
|
|
CaveCricket48
Joined: Tue Jun 12, 2007 11:52 pm Posts: 13144 Location: Here
|
Re: Particle check issue
Code: function Create(self) self.brainname = "name"; -- Name of brain attachable goes here self.brainclass = "Attachable"; -- Class of brain attachable goes here
self.brain = nil;
for i = 1,MovableMan:GetMOIDCount()-1 do target = MovableMan:GetMOFromID(i); if target.PresetName == self.brainname and target.Class == self.brainclass and target.RootID == self.ID then self.brain = target; end end end
function Update(self) if self.brain.ClassName ~= self.brainclass then ActivityMan:EndActivity(); end end Attach that to the crab.
|
Sun Dec 13, 2009 2:13 am |
|
|
PhantomAGN
Joined: Mon Jun 29, 2009 2:40 am Posts: 610 Location: Deep below The Map of Mars
|
Re: Particle check issue
You can make the brain an actor attached to the crab just in ini code, and then use lua on the crab to check and see if there is a brain actor with the right Presetname within some distance from itself. Given that the brain is always near, and the mission is probably only going to have one of these guys, it should work. The activity would end if the brain ever fell off and was not broken though. You could also script the mission itself to look for the actor brain, if it's only going to be used in one place.
Ah, ninja'ed by a better solution.
|
Sun Dec 13, 2009 2:14 am |
|
|
MaximDude
Joined: Wed Nov 22, 2006 3:19 pm Posts: 2073
|
Re: Particle check issue
PhantomAGN wrote: You can make the brain an actor attached to the crab just in ini code, and then use lua on the crab to check and see if there is a brain actor with the right Presetname within some distance from itself. If I understanding you correctly, then that won't work. Attaching actors to other actors via .ini results in crashes during loading. @ CaveCricket Attempt to index field 'brain' (a nil value) @ line 14.
|
Sun Dec 13, 2009 3:41 pm |
|
|
PhantomAGN
Joined: Mon Jun 29, 2009 2:40 am Posts: 610 Location: Deep below The Map of Mars
|
Re: Particle check issue
Well shoot. Whoops. That's a foot in my mouth. I get lua scripting, not ini code.
In that case, disregard whatever I've said. I'll just follow the solution here and not inject fails.
|
Sun Dec 13, 2009 8:44 pm |
|
|
CaveCricket48
Joined: Tue Jun 12, 2007 11:52 pm Posts: 13144 Location: Here
|
Re: Particle check issue
Try this: Code: function Create(self) self.brainname = "name"; -- Name of brain attachable goes here self.brainclass = "Attachable"; -- Class of brain attachable goes here self.gotbrain = false;
self.brain = nil;
for i = 1,MovableMan:GetMOIDCount()-1 do target = MovableMan:GetMOFromID(i); if target.PresetName == self.brainname and target.Class == self.brainclass and target.RootID == self.ID then self.brain = target; self.gotbrain = true; end end end
function Update(self) if self.gotbrain == true then if self.brain.ClassName ~= self.brainclass then ActivityMan:EndActivity(); end end end
|
Sun Dec 13, 2009 9:24 pm |
|
|
MaximDude
Joined: Wed Nov 22, 2006 3:19 pm Posts: 2073
|
Re: Particle check issue
Well, there don't seem to be any errors and such, there just isn't any effect. Nothing happens when the attached brain is destroyed. >__________>'
|
Sun Dec 13, 2009 9:54 pm |
|
|
CaveCricket48
Joined: Tue Jun 12, 2007 11:52 pm Posts: 13144 Location: Here
|
Re: Particle check issue
Whoops, it's "ClassName" not "Class". Silly me. Code: function Create(self) self.brainname = "name"; -- Name of brain attachable goes here self.brainclass = "Attachable"; -- Class of brain attachable goes here self.gotbrain = false;
self.brain = nil;
for i = 1,MovableMan:GetMOIDCount()-1 do target = MovableMan:GetMOFromID(i); if target.PresetName == self.brainname and target.ClassName == self.brainclass and target.RootID == self.ID then self.brain = target; self.gotbrain = true; end end end
function Update(self) if self.gotbrain == true then if self.brain.ClassName ~= self.brainclass then ActivityMan:EndActivity(); end end end
|
Sun Dec 13, 2009 11:05 pm |
|
|
MaximDude
Joined: Wed Nov 22, 2006 3:19 pm Posts: 2073
|
Re: Particle check issue
♥♥♥♥ YES IT WORKS! Massive thanks for getting it to work, you are awesome. :D
|
Sun Dec 13, 2009 11:24 pm |
|
|
|