Data Realms Fan Forums
http://45.55.195.193/

Duplication Problem
http://45.55.195.193/viewtopic.php?f=73&t=23594
Page 1 of 1

Author:  Coops [ Thu May 05, 2011 9:35 pm ]
Post subject:  Duplication Problem

Im having a problem in which Im trying to get a type of toggle going on,

What I want is when an MOPixel is created, the script attached to said MOPixel would check for duplicates of itself on Create and delete it and itself, if not then it stays. Problem is, Instead of finding a duplicate, it finds itself therefore deleting itself.

I tried something like this, but what I just described is happening. No errors either.

Code:
function Create(self)

   for particle in MovableMan.Particles do
      if particle.PresetName == self.PresetName then
         self.particle = particle
         self.particle.ToDelete = true
         self.ToDelete = true
      else
         self.enable = true
         break
      end
   end
end


Any way I can counter this?

Author:  Asklar [ Thu May 05, 2011 11:35 pm ]
Post subject:  Re: Duplication Problem

And if you add in the if something like if the particle is not self, or something like that?

Author:  Grif [ Fri May 06, 2011 1:08 am ]
Post subject:  Re: Duplication Problem

try:
if ToMOPixel(self.particle) ~= self

Author:  Coops [ Fri May 06, 2011 7:10 am ]
Post subject:  Re: Duplication Problem

I get errors with it.

I can try and make it a MOSParticle and use ToMOSParticle() instead.

EDIT: Or ToMovableObject(). Still errors.


EDIT EDIT: Well I guess it cant check if its the same particle if it doesn't even have the particle yet. Huuuurrrrrrrrrrrrr

EDIT EDIT EDIT: Im still having problems with this, its talking about "no such operator defined".

Author:  Grif [ Fri May 06, 2011 4:40 pm ]
Post subject:  Re: Duplication Problem

then try getting rid of the ToMOPixel

Author:  Coops [ Fri May 06, 2011 8:23 pm ]
Post subject:  Re: Duplication Problem

Still says the exact same thing.

Heres the entire script if it helps.

Code:
function Create(self)
   self.enable = true
   
   for particle in MovableMan.Particles do
      if particle ~= self then
         self.enable = true
      else
         self.particle = ToMOPixel(particle)
         self.particle.ToDelete = true
         self.ToDelete = true
         self.enable = false
         break
      end
   end
   
   for actor in MovableMan.Actors do
      if SceneMan:ShortestDistance(actor.Pos, self.Pos, true).Magnitude < 60 then
         self.parent = actor
         break
      end
   end
end

function Update(self)

   if(MovableMan:IsActor(self.parent)) and self.enable then
      self.ToDelete = false
      self.ToSettle = false
      self.PinStrength = 1000
      self.Age = 1
      self.Pos = self.parent.Pos + Vector(0,-30)
   else
      self.ToDelete = true
   end
end

Author:  zoidberg [ Sat May 07, 2011 12:43 am ]
Post subject:  Re: Duplication Problem

if you want only one pixel to exist at the same time, then use global boolean
if you want few of them, with their own parents - use global boolean table
my opinion

edit:
or just a proximity check
if (particle.Pos - self.Pos).Magnitude > 5 then
blah-blah
end

Author:  Coops [ Sat May 07, 2011 12:57 am ]
Post subject:  Re: Duplication Problem

How would I go on about doing this?

I probably know what your talking about, just you put it in a different way.

EDIT: Proximity just checks if any MOPixel would be in range. Im trying to get it to check if its a certain type of pixel.

Author:  zoidberg [ Sat May 07, 2011 11:32 am ]
Post subject:  Re: Duplication Problem

this pixel is fired from the gun, isn't it?
and you don't want to do anything with the gun?
then use this:
Code:
function Create(self)
    for i = 1, MovableMan:GetMOIDCount() - 1 do
        local mo = MovableMan:GetMOFromID(i)
        if (mo.Pos - self.Pos).Magnitude < 40 and mo.ClassName == "HDFirearm" and mo.PresetName == "your gun name" and mo.Sharpness == 0 then
            self.parent = ToActor(MovableMan:GetMOFromID(mo.RootID))
            self.weapon = ToHDFirearm(mo)
            self.weapon.Sharpness = 1
        else
            self.ToDelete = true
        end
    end
end

function Update(self)
    if(MovableMan:IsActor(self.parent)) then
        self.ToDelete = false
        self.ToSettle = false
        self.PinStrength = 1000
        self.Age = 1
        self.Pos = self.parent.Pos + Vector(0,-30)
    else
        self.ToDelete = true
        self.weapon.Sharpness = 0
    end
end

function Destroy(self)
    if self.weapon and MovableMan:ValidMO(self.weapon) then
        self.weapon.Sharpness = 0
    end
end


this script won't let itself to create 2 or more pixels with one parent
hadn't tested it, btw

edit:
where did you get your script?
if you've written it by yourself, then i've got bad news for you.
at first lines you starting to cycle through all particles on the scene, right?
every particle on the scene, exept this scripted pixel ~= this pixel
you write:
if particle ~= self then
self.enable = true
but
if particle == self then
*delete 'em all*
wth?
the script finds your scripted pixel, this scripted pixel == self, and it deletes the pixel
what were you expecting from it?

Author:  Coops [ Sun May 08, 2011 1:15 am ]
Post subject:  Re: Duplication Problem

Well like I said in the OP, that's what I was having trouble with, it finding itself and deleting itself without the duplicate.

This script you gave me seems to have trouble finding the weapon. I get an error saying that self.weapon is a nil value so that's what I presume. I did put the weapon's name where you told me to and even a print(self.weapon) to make sure that it didn't find it or can't get past that first check properly.

Fooling around with the gun in this script is perfectly fine, all it does is activate something in relative to another script which would check if this particle exists, then continues on with it's script.

From what I can tell with your script, it just deletes itself if another of itself exists. I want it to delete itself and that duplicate, sort of like a toggle function.

Thanks anyhow, I might play around with this script to get it right.

EDIT: I got it, messing around with the weapon's sharpness did the trick (That's why It didn't get the weapon, I didn't give it a sharpness value.) and got it to constantly check if the sharpness is the same, if not then switch it back which in return would tell both particles to delete itself.

Thanks guys.

Author:  zoidberg [ Sun May 08, 2011 12:19 pm ]
Post subject:  Re: Duplication Problem

yep, i've forgotten the most important thing - define sharpness in ini file.
so, it works. good luck.

Page 1 of 1 All times are UTC [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/