public CircularParticleSystem(FAtlasElement element, float innerRadius, float lifetime, float speed, float particlesPerSecond, int maxParticleCount)
            : base(maxParticleCount)
        {
            this.element = element;
            this.innerRadius = innerRadius;
            this.lifetime = lifetime;
            this.speed = speed;
            this.timePerParticle = 1.0f / particlesPerSecond;

            timeUntilNextParticle = timePerParticle;

            particleDef = new FParticleDefinition (element);
            particleDef.endColor = Color.white.CloneWithNewAlpha (0.0f);

            ListenForAfterUpdate (HandleUpdate);
        }
Exemple #2
0
 public void DestroyEffect()
 {
     pd1 = new FParticleDefinition("bubble");
     pd1.startScale = 2f;
     pd1.startColor = new Color(47, 44, 44, 0.8f);
     pd1.endColor = new Color(255, 255, 255, 0.1f);
     int part = RXRandom.Range(120, 150);
     for (int x = 0; x < part; x++)
     {
         pd1.x = Position.x;
         pd1.y = Position.y;
         Vector2 speed = RXRandom.Vector2Normalized() * RXRandom.Range(20.0f, 40.0f);
         pd1.speedX = speed.x;
         pd1.speedY = speed.y;
         pd1.lifetime = RXRandom.Range(0.8f, 1f);
         InGamePage.CurrentInGamePage.projectilesParticles.AddParticle(pd1);
     }
 }
Exemple #3
0
    public override void Update()
    {
        if (currentStep < forwardStep)
        {
            currentStep += forwardStep * 0.5f * Time.deltaTime;
        }
        if (velocity.x > 0)
        {
            rotation = -getRotationalAngle();
            sprite.scaleX = 1f;

        }
        else
        {
            rotation = getRotationalAngle();
            sprite.scaleX = -1f;
        }

        rotation = getRotationalAngle();

        velocity.y += Mathf.Cos(getRotationalAngle() * Mathf.Deg2Rad) * Time.deltaTime * currentStep * direction;
        velocity.x += Mathf.Sin(getRotationalAngle() * Mathf.Deg2Rad) * Time.deltaTime * currentStep;

        Position += velocity;
        SetPosition(Position);
        ttl -= currentStep * Time.deltaTime;

        pd = new FParticleDefinition("bubble");
        pd.startScale = 1.5f;

        pd.startColor = new Color(255, 255, 255, 0.8f);
        pd.endColor = new Color(255, 255, 255, 0.1f);
        int part = RXRandom.Range(1, 10);
        for (int x = 0; x < part; x++)
        {
            pd.x = Position.x;
            pd.y = Position.y;
            Vector2 speed = RXRandom.Vector2Normalized() * RXRandom.Range(20.0f, 80.0f);
            pd.speedX = speed.x;
            pd.speedY = speed.y;
            pd.lifetime = RXRandom.Range(0.2f, 0.5f);
            InGamePage.CurrentInGamePage.projectilesParticles.AddParticle(pd);
        }
    }
Exemple #4
0
    public override void Init()
    {
        GamePage._gameObjects.AddChild(Holder = new FContainer());
        gameObject.transform.position = new Vector3(Position.x * FPhysics.POINTS_TO_METERS,Position.y * FPhysics.POINTS_TO_METERS,32);
        gameObject.transform.parent = GamePage.root.transform;
        bodyLink = gameObject.AddComponent<FPNodeLink>();
        bodyLink.Init(Holder, false);
        Holder.AddChild(sprite);
        AngularDrag=5f;
        Mass=1f;
        Bounciness=0.5f;
        FrictionDyn=0.3f;
        FrictionSta=0.2f;
        InitPhysics();

        pd = new FParticleDefinition("Futile_White");
        pd.endScale = 0.2f;
        pd.startColor = new Color(0,250,0,1f);
        pd.endColor = new Color (0, 90,0,0.01f);
    }
Exemple #5
0
    public override void Update()
    {
        float forwardStep = 20f;
        float hInput = Input.GetAxis("Horizontal");
        float angle = Input.GetAxis("Vertical");

        if (hInput > 0)
        {
            sprite.scaleX = 1f;
            FacingRight = 1;
        }
        else if (hInput < 0)
        {
            sprite.scaleX = -1f;
            FacingRight = -1;
        }

        if (hInput != 0) {
            FSoundManager.PlaySound("thrust",0.1f);
        }
        setRotationalAngle(getRotationalAngle() + angle);

        if (getRotationalAngle() > 45) {
            setRotationalAngle(45);
        }else if(getRotationalAngle() < -45){
            setRotationalAngle(-45);
        }

        if (FacingRight > 0)
        {
            rotation = -getRotationalAngle();
        }
        else {
            rotation = getRotationalAngle();
        }

        velocity.x += Mathf.Cos(getRotationalAngle()*Mathf.Deg2Rad) * Time.deltaTime * forwardStep * hInput;
        velocity.y += Mathf.Sin(getRotationalAngle()*Mathf.Deg2Rad) * Time.deltaTime * forwardStep;

        velocity.x *= 0.8f;
        velocity.y *= 0.8f;

        Position += velocity;
        SetPosition(Position);

        if(Position.y< -Futile.screen.halfHeight){
            Position.y = -Futile.screen.halfHeight + sprite.height;
            InGamePage.CurrentInGamePage.ScreenShake(2, 5);
            setRotationalAngle(getRotationalAngle() * -1);
            setEnergy(getEnergy()-5);
        }

        if (Position.y > Futile.screen.halfHeight)
        {
            Position.y = Futile.screen.halfHeight - sprite.height;
            InGamePage.CurrentInGamePage.ScreenShake(2, 5);
            setRotationalAngle(getRotationalAngle() *-1);
            setEnergy(getEnergy() - 5);
        }

        if (Position.x > Futile.screen.width / 2)
        {
            Position.x = -Futile.screen.width / 2 + sprite.width / 2;
        }

        if (Position.x < -Futile.screen.width / 2)
        {
            Position.x = Futile.screen.width / 2 + sprite.width / 2;
        }

        if (Input.GetKey(KeyCode.X))
        {
            Shoot();
        }

        if (Mathf.Abs(velocity.x) > 1)
        {
            pd = new FParticleDefinition("bubble");
            pd.startScale = 1.5f;
            pd.startColor = new Color(255, 255, 255, 0.8f);
            pd.endColor = new Color(255, 255, 255, 0.1f);
            pd.x = Position.x;
            pd.y = Position.y;
                Vector2 speed = RXRandom.Vector2Normalized() * RXRandom.Range(20.0f, 80.0f);
                pd.speedX = speed.x;
                pd.speedY = speed.y;
                pd.lifetime = RXRandom.Range(0.2f, 0.5f);
                InGamePage.CurrentInGamePage.projectilesParticles.AddParticle(pd);
        }
            curretTimer += 5f*Time.deltaTime;
    }
Exemple #6
0
    public void Init(Team team, Vector2 startPos)
    {
        this.team = team;

        world.orbHolder.AddChild(holder = new FContainer());

        gameObject.transform.position = new Vector3(startPos.x * FPhysics.POINTS_TO_METERS,startPos.y * FPhysics.POINTS_TO_METERS,0);
        gameObject.transform.parent = world.root.transform;

        link = gameObject.AddComponent<FPNodeLink>();
        link.Init(holder, true);

        frames = new FAtlasElement[11];

        for (int f = 0; f<frames.Length; f++)
        {
            frames[f] = Futile.atlasManager.GetElementWithName("orb"+f.ToString("00"));
        }

        sprite = new FSprite(frames[0].name);
        holder.AddChild(sprite);
        sprite.color = team.color;
        sprite.scale = scale;

        InitPhysics();

        holder.ListenForUpdate(HandleUpdate);
        holder.ListenForFixedUpdate(HandleFixedUpdate);

        FSoundManager.PlaySound("orbAppears");

        pd = new FParticleDefinition("Particles/Flame");

        pd.startColor = team.color.CloneWithNewAlpha(0.2f);
        pd.endColor = Color.clear;
    }
Exemple #7
0
    void HandleFixedUpdate()
    {
        //if (world.isGameOver) return; //you can't play if you lose!

        rigidbody.drag = BeastConfig.DRAG;

        Vector2 movementVector = player.controller.movementVector;

        movementVector *= 1.5f;

        if (movementVector.magnitude > 1.0f)
        {
            movementVector.Normalize();
        }

        movementVector *= BeastConfig.MOVE_SPEED * Time.smoothDeltaTime * rigidbody.mass;

        if (movementVector.magnitude > 0.1f)
        {
            targetAngle = movementVector.GetAngle() + 90.0f;
        }

        angle += RXMath.GetDegreeDelta(angle,targetAngle) / 10.0f;

        holder.rotation = angle;

        movementVector *= 2.0f;

        //			if (gamepad.GetButton(PS3ButtonType.X))
        //			{
        //				movementVector *= 2.0f;
        //			}

        bodyVelocity += movementVector;

        rigidbody.AddForce(new Vector3(bodyVelocity.x, bodyVelocity.y, 0.0f), ForceMode.Impulse);

        bodyVelocity *= BeastConfig.MOVE_FRICTION;

        if (RXRandom.Float() < 0.99f)
        {
            Vector2 pos = this.transform.position.ToVector2InPoints();

            FParticleDefinition pd = new FParticleDefinition(RXRandom.Bool() ? "Particles/SplotchA" : "Particles/SplotchB");

            pd.x = pos.x + RXRandom.Range(-10.0f, 10.0f);
            pd.y = pos.y + RXRandom.Range(-10.0f, 10.0f);

            pd.startColor = player.color.CloneWithNewAlpha(0.35f);
            pd.endColor = player.color.CloneWithNewAlpha(-2.5f);
            pd.startRotation = RXRandom.Range(0.0f,360.0f);
            pd.lifetime = 3.0f;

            world.backParticles.AddParticle(pd);
        }
    }
    public void AddParticle(FParticleDefinition particleDefinition)
    {
        FAtlasElement element = particleDefinition.element;

        if(_hasInited)
        {
            if(element.atlas != _atlas)
            {
                throw new FutileException("All elements added to a particle system must be from the same atlas");
            }
        }
        else
        {
            _hasInited = true;
            Init(FFacetType.Quad, element.atlas, _maxParticleCount);
            if(stage != null) stage.HandleFacetsChanged();
        }

        FParticle particle;

        if(_availableParticleCount == 0)
        {
            if(shouldNewParticlesOverwriteExistingParticles)
            {
                //get one of the currently running particles and overwrite it
                //but make sure we don't keep overwriting the same particle!
                particle = _availableParticles[_unavailableParticleIndex--];
                if(_unavailableParticleIndex < 0)
                {
                    _unavailableParticleIndex = _maxParticleCount-1;
                }
            }
            else
            {
                return; //there are no particles available, so don't create a new one
            }

        }
        else
        {
            _availableParticleCount--;
            particle = _availableParticles[_availableParticleCount];
        }

        float lifetime = particleDefinition.lifetime;

        particle.timeRemaining = lifetime;
        particle.delayRemaining = particleDefinition.delay;

        particle.x = particleDefinition.x;
        particle.y = particleDefinition.y;
        particle.speedX = particleDefinition.speedX;
        particle.speedY = particleDefinition.speedY;

        particle.startScale = particleDefinition.startScale;
        particle.scale = particleDefinition.startScale;

        float lifetimeInverse = 1.0f / lifetime; //we'll use this a few times, so invert it because multiplication is faster

        particle.scaleDeltaPerSecond = (particleDefinition.endScale - particleDefinition.startScale) * lifetimeInverse;

        Color startColor = particleDefinition.startColor;
        Color endColor = particleDefinition.endColor;

        particle.color = startColor;

        particle.redDeltaPerSecond = (endColor.r - startColor.r) * lifetimeInverse;
        particle.greenDeltaPerSecond = (endColor.g - startColor.g) * lifetimeInverse;
        particle.blueDeltaPerSecond = (endColor.b - startColor.b) * lifetimeInverse;
        particle.alphaDeltaPerSecond = (endColor.a - startColor.a) * lifetimeInverse;

        particle.elementHalfWidth = element.sourceSize.x * 0.5f;
        particle.elementHalfHeight = element.sourceSize.y * 0.5f;

        particle.uvTopLeft = element.uvTopLeft;
        particle.uvTopRight = element.uvTopRight;
        particle.uvBottomRight = element.uvBottomRight;
        particle.uvBottomLeft = element.uvBottomLeft;

        particle.initialTopLeft = new Vector2(-particle.elementHalfWidth,particle.elementHalfHeight);
        particle.initialTopRight = new Vector2(particle.elementHalfWidth,particle.elementHalfHeight);
        particle.initialBottomRight = new Vector2(particle.elementHalfWidth,-particle.elementHalfHeight);
        particle.initialBottomLeft = new Vector2(-particle.elementHalfWidth,-particle.elementHalfHeight);

        //notice how these are both multiplied by -1, this is to account for the flipped vertical coordinates in unity/futile
        particle.rotation = particleDefinition.startRotation * RXMath.DTOR * -1.0f;
        particle.rotationDeltaPerSecond = (particleDefinition.endRotation - particleDefinition.startRotation) * lifetimeInverse * RXMath.DTOR * -1.0f;

        if(particle.rotationDeltaPerSecond == 0) //no rotation
        {
            particle.doesNeedRotationUpdates = false;

            if(particle.rotation == 0)
            {
                particle.resultTopLeftX = particle.initialTopLeft.x;
                particle.resultTopLeftY = particle.initialTopLeft.y;
                particle.resultTopRightX = particle.initialTopRight.x;
                particle.resultTopRightY = particle.initialTopRight.y;
                particle.resultBottomRightX = particle.initialBottomRight.x;
                particle.resultBottomRightY = particle.initialBottomRight.y;
                particle.resultBottomLeftX = particle.initialBottomLeft.x;
                particle.resultBottomLeftY = particle.initialBottomLeft.y;
            }
            else //bake the rotation once
            {
                float sin = (float)Math.Sin(particle.rotation);
                float cos = (float)Math.Cos(particle.rotation);

                float ix, iy;

                ix = particle.initialTopLeft.x;
                iy = particle.initialTopLeft.y;
                particle.resultTopLeftX = ix * cos - iy * sin;
                particle.resultTopLeftY = ix * sin + iy * cos;

                ix = particle.initialTopRight.x;
                iy = particle.initialTopRight.y;
                particle.resultTopRightX = ix * cos - iy * sin;
                particle.resultTopRightY = ix * sin + iy * cos;

                ix = particle.initialBottomRight.x;
                iy = particle.initialBottomRight.y;
                particle.resultBottomRightX = ix * cos - iy * sin;
                particle.resultBottomRightY = ix * sin + iy * cos;

                ix = particle.initialBottomLeft.x;
                iy = particle.initialBottomLeft.y;
                particle.resultBottomLeftX = ix * cos - iy * sin;
                particle.resultBottomLeftY = ix * sin + iy * cos;
            }

        }
        else
        {
            //the rotation will be updated on the update
            particle.doesNeedRotationUpdates = true;
        }
    }
Exemple #9
0
    public override void Update()
    {
        float forwardStep = 5f;
        float angle = 0;
        passedTime += 1;

        float dist = Vector2.Distance(InGamePage.CurrentInGamePage.getPlayer().GetPosition(), Position);
        if (dist < 500f)
        {
            Shoot();
        }

        if (hInput > 0)
        {
            sprite.scaleX = 1f;
            FacingRight = 1;
        }
        else if (hInput < 0)
        {
            sprite.scaleX = -1f;
            FacingRight = -1;
        }

        setRotationalAngle(getRotationalAngle() + angle);

        if (getRotationalAngle() > 45)
        {
            setRotationalAngle(45);
        }
        else if (getRotationalAngle() < -45)
        {
            setRotationalAngle(-45);
        }

        if (FacingRight > 0)
        {
            rotation = -getRotationalAngle();

        }
        else
        {
            rotation = getRotationalAngle();
        }

        if (Position.x > Futile.screen.width/2)
        {
            Position.x = -Futile.screen.width / 2 + sprite.width / 2;
        }

        if (Position.x < -Futile.screen.width / 2)
        {
            Position.x = Futile.screen.width/2 + sprite.width / 2;
        }

        velocity.x += Mathf.Cos(getRotationalAngle() * Mathf.Deg2Rad) * Time.deltaTime * forwardStep * hInput;
        velocity.y += Mathf.Sin(getRotationalAngle() * Mathf.Deg2Rad) * Time.deltaTime * forwardStep;

        velocity.x *= 0.9f;
        velocity.y *= 0.8f;

        Position += velocity;
        SetPosition(Position);

        if (Mathf.Abs(velocity.x) > 1)
        {
            pd = new FParticleDefinition("bubble");
            pd.startScale = 1.5f;
            pd.startColor = new Color(255, 255, 255, 0.8f);
            pd.endColor = new Color(255, 255, 255, 0.1f);
            pd.x = Position.x;
            pd.y = Position.y;
            Vector2 speed = RXRandom.Vector2Normalized() * RXRandom.Range(20.0f, 80.0f);
            pd.speedX = speed.x;
            pd.speedY = speed.y;
            pd.lifetime = RXRandom.Range(0.2f, 0.5f);
            InGamePage.CurrentInGamePage.projectilesParticles.AddParticle(pd);
        }
        curretTimer += 1f * Time.deltaTime;
    }
Exemple #10
0
 void kill()
 {
     pd = new FParticleDefinition("Futile_White");
     pd.endScale = 0.2f;
     pd.startColor = new Color(250,0,0,0.8f);
     pd.endColor = new Color (250, 0, 0,0.1f);
     int part=RXRandom.Range(16, 32);
         for(int x=0;x<part;x++){
             pd.x = gameObject.rigidbody.position.x*FPhysics.METERS_TO_POINTS + RXRandom.Range(-10.0f, 10.0f);
             pd.y = (gameObject.rigidbody.position.y)*FPhysics.METERS_TO_POINTS-+ RXRandom.Range(-10.0f, 10.0f);
             Vector2 speed = RXRandom.Vector2Normalized() * RXRandom.Range(20.0f,80.0f);
             pd.speedX = speed.x;
             pd.speedY = speed.y;
             pd.lifetime = RXRandom.Range(1f, 5f);
             this.GamePage.impactParticles.AddParticle(pd);
         }
     UnityEngine.Object.Destroy(gameObject);
     Holder.RemoveFromContainer();
     GamePage.callGameOver();
                     FSoundManager.PlaySound("atari_boom5");
 }
Exemple #11
0
    public override void Update()
    {
        float forwardStep = 5f;
        float angle       = 0;

        passedTime += 1;

        float dist = Vector2.Distance(InGamePage.CurrentInGamePage.getPlayer().GetPosition(), Position);

        if (dist < 500f)
        {
            Shoot();
        }

        if (hInput > 0)
        {
            sprite.scaleX = 1f;
            FacingRight   = 1;
        }
        else if (hInput < 0)
        {
            sprite.scaleX = -1f;
            FacingRight   = -1;
        }

        setRotationalAngle(getRotationalAngle() + angle);

        if (getRotationalAngle() > 45)
        {
            setRotationalAngle(45);
        }
        else if (getRotationalAngle() < -45)
        {
            setRotationalAngle(-45);
        }

        if (FacingRight > 0)
        {
            rotation = -getRotationalAngle();
        }
        else
        {
            rotation = getRotationalAngle();
        }

        if (Position.x > Futile.screen.width / 2)
        {
            Position.x = -Futile.screen.width / 2 + sprite.width / 2;
        }

        if (Position.x < -Futile.screen.width / 2)
        {
            Position.x = Futile.screen.width / 2 + sprite.width / 2;
        }


        velocity.x += Mathf.Cos(getRotationalAngle() * Mathf.Deg2Rad) * Time.deltaTime * forwardStep * hInput;
        velocity.y += Mathf.Sin(getRotationalAngle() * Mathf.Deg2Rad) * Time.deltaTime * forwardStep;

        velocity.x *= 0.9f;
        velocity.y *= 0.8f;

        Position += velocity;
        SetPosition(Position);

        if (Mathf.Abs(velocity.x) > 1)
        {
            pd            = new FParticleDefinition("bubble");
            pd.startScale = 1.5f;
            pd.startColor = new Color(255, 255, 255, 0.8f);
            pd.endColor   = new Color(255, 255, 255, 0.1f);
            pd.x          = Position.x;
            pd.y          = Position.y;
            Vector2 speed = RXRandom.Vector2Normalized() * RXRandom.Range(20.0f, 80.0f);
            pd.speedX   = speed.x;
            pd.speedY   = speed.y;
            pd.lifetime = RXRandom.Range(0.2f, 0.5f);
            InGamePage.CurrentInGamePage.projectilesParticles.AddParticle(pd);
        }
        curretTimer += 1f * Time.deltaTime;
    }
Exemple #12
0
    public void AddParticle(FParticleDefinition particleDefinition)
    {
        FAtlasElement element = particleDefinition.element;

        if (_hasInited)
        {
            if (element.atlas != _atlas)
            {
                throw new FutileException("All elements added to a particle system must be from the same atlas");
            }
        }
        else
        {
            _hasInited = true;
            Init(FFacetType.Quad, element.atlas, _maxParticleCount);
            if (stage != null)
            {
                stage.HandleFacetsChanged();
            }
        }

        FParticle particle;

        if (_availableParticleCount == 0)
        {
            if (shouldNewParticlesOverwriteExistingParticles)
            {
                //get one of the currently running particles and overwrite it
                //but make sure we don't keep overwriting the same particle!
                particle = _availableParticles[_unavailableParticleIndex--];
                if (_unavailableParticleIndex < 0)
                {
                    _unavailableParticleIndex = _maxParticleCount - 1;
                }
            }
            else
            {
                return;                 //there are no particles available, so don't create a new one
            }
        }
        else
        {
            _availableParticleCount--;
            particle = _availableParticles[_availableParticleCount];
        }

        float lifetime = particleDefinition.lifetime;

        particle.timeRemaining  = lifetime;
        particle.delayRemaining = particleDefinition.delay;

        particle.x      = particleDefinition.x;
        particle.y      = particleDefinition.y;
        particle.speedX = particleDefinition.speedX;
        particle.speedY = particleDefinition.speedY;

        particle.startScale = particleDefinition.startScale;
        particle.scale      = particleDefinition.startScale;

        float lifetimeInverse = 1.0f / lifetime;         //we'll use this a few times, so invert it because multiplication is faster

        particle.scaleDeltaPerSecond = (particleDefinition.endScale - particleDefinition.startScale) * lifetimeInverse;

        Color startColor = particleDefinition.startColor;
        Color endColor   = particleDefinition.endColor;

        particle.color = startColor;

        particle.redDeltaPerSecond   = (endColor.r - startColor.r) * lifetimeInverse;
        particle.greenDeltaPerSecond = (endColor.g - startColor.g) * lifetimeInverse;
        particle.blueDeltaPerSecond  = (endColor.b - startColor.b) * lifetimeInverse;
        particle.alphaDeltaPerSecond = (endColor.a - startColor.a) * lifetimeInverse;

        particle.elementHalfWidth  = element.sourceSize.x * 0.5f;
        particle.elementHalfHeight = element.sourceSize.y * 0.5f;

        particle.uvTopLeft     = element.uvTopLeft;
        particle.uvTopRight    = element.uvTopRight;
        particle.uvBottomRight = element.uvBottomRight;
        particle.uvBottomLeft  = element.uvBottomLeft;

        particle.initialTopLeft     = new Vector2(-particle.elementHalfWidth, particle.elementHalfHeight);
        particle.initialTopRight    = new Vector2(particle.elementHalfWidth, particle.elementHalfHeight);
        particle.initialBottomRight = new Vector2(particle.elementHalfWidth, -particle.elementHalfHeight);
        particle.initialBottomLeft  = new Vector2(-particle.elementHalfWidth, -particle.elementHalfHeight);

        //notice how these are both multiplied by -1, this is to account for the flipped vertical coordinates in unity/futile
        particle.rotation = particleDefinition.startRotation * RXMath.DTOR * -1.0f;
        particle.rotationDeltaPerSecond = (particleDefinition.endRotation - particleDefinition.startRotation) * lifetimeInverse * RXMath.DTOR * -1.0f;

        if (particle.rotationDeltaPerSecond == 0)        //no rotation
        {
            particle.doesNeedRotationUpdates = false;

            if (particle.rotation == 0)
            {
                particle.resultTopLeftX     = particle.initialTopLeft.x;
                particle.resultTopLeftY     = particle.initialTopLeft.y;
                particle.resultTopRightX    = particle.initialTopRight.x;
                particle.resultTopRightY    = particle.initialTopRight.y;
                particle.resultBottomRightX = particle.initialBottomRight.x;
                particle.resultBottomRightY = particle.initialBottomRight.y;
                particle.resultBottomLeftX  = particle.initialBottomLeft.x;
                particle.resultBottomLeftY  = particle.initialBottomLeft.y;
            }
            else             //bake the rotation once
            {
                float sin = (float)Math.Sin(particle.rotation);
                float cos = (float)Math.Cos(particle.rotation);

                float ix, iy;

                ix = particle.initialTopLeft.x;
                iy = particle.initialTopLeft.y;
                particle.resultTopLeftX = ix * cos - iy * sin;
                particle.resultTopLeftY = ix * sin + iy * cos;

                ix = particle.initialTopRight.x;
                iy = particle.initialTopRight.y;
                particle.resultTopRightX = ix * cos - iy * sin;
                particle.resultTopRightY = ix * sin + iy * cos;

                ix = particle.initialBottomRight.x;
                iy = particle.initialBottomRight.y;
                particle.resultBottomRightX = ix * cos - iy * sin;
                particle.resultBottomRightY = ix * sin + iy * cos;

                ix = particle.initialBottomLeft.x;
                iy = particle.initialBottomLeft.y;
                particle.resultBottomLeftX = ix * cos - iy * sin;
                particle.resultBottomLeftY = ix * sin + iy * cos;
            }
        }
        else
        {
            //the rotation will be updated on the update
            particle.doesNeedRotationUpdates = true;
        }
    }
Exemple #13
0
 public void generateDustParticles(int ceil, Vector2 position, Color initial, Color final, Vector2 sp, float endScale = 0.5f)
 {
     dustParticles = new FParticleDefinition("Shoot_0");
     dustParticles.endScale = endScale;
     dustParticles.startScale = 0.1f;
     dustParticles.startColor = initial;
     dustParticles.endColor = final;
     int part = UnityEngine.Random.Range(1, ceil);
     for (int x = 0; x < part; x++)
     {
         dustParticles.x = position.x;
         dustParticles.y = position.y;
         Vector2 speed = RXRandom.Vector2Normalized() * RXRandom.Range(sp.x, sp.y);
         dustParticles.speedX = speed.x;
         dustParticles.speedY = speed.y;
         dustParticles.lifetime = RXRandom.Range(0.5f, 0.8f);
         TileMap.CurrentMap.GetParticleSystem.AddParticle(dustParticles);
     }
 }
Exemple #14
0
        public void ShowParticleBox(FNode baseNode, Rect rect)
        {
            Vector2 offset = this.OtherToLocal (baseNode, Vector2.zero);
            float cx = offset.x + rect.x + rect.width / 2;
            float cy = offset.y + rect.y + rect.height / 2;
            ;

            //		FSprite sprite = new FSprite("Box");
            //		sprite.SetPosition(cx,cy);
            //		sprite.width = rect.width;
            //		sprite.height = rect.height;
            //
            //		AddChild(sprite);

            int count = 50;

            float halfWidth = rect.width / 2;
            float halfHeight = rect.height / 2;

            FParticleDefinition pd = new FParticleDefinition ("Extra/Particle_Noise");
            pd.startScale = 0.3f;
            pd.endScale = 0.7f;

            float speed = 30.0f;

            for (int c = 0; c<count; c++) {
                pd.lifetime = RXRandom.Range (0.9f, 1.3f);
                //pd.delay = RXRandom.Range(0.0f,0.1f);

                pd.x = cx + RXRandom.Range (-halfWidth, halfWidth);
                pd.y = cy + RXRandom.Range (-halfHeight, halfHeight);

                pd.speedX = RXRandom.Range (-speed, speed);
                pd.speedY = RXRandom.Range (-speed, speed);

                pd.startColor = new Color (1, 1, 0.8f, 0.7f);
                pd.endColor = new Color (1, 1, 0.8f, 0.0f);

                pd.startRotation = RXRandom.Range (0, 360.0f);
                pd.endRotation = pd.startRotation + RXRandom.Range (-180.0f, 180.0f);

                particleSystem.AddParticle (pd);
            }
        }
Exemple #15
0
        public void ShowParticleBurst(float startX, float startY, int count, string elementName, float startScale, float endScale, params Color[] colors)
        {
            FParticleDefinition pd = new FParticleDefinition (elementName);
            pd.x = startX;
            pd.y = startY;
            pd.startScale = startScale;
            pd.endScale = endScale;

            //somewhat evenly spread the particles in a circle

            float radiansPerParticle = RXMath.DOUBLE_PI / (float)count;
            float nextAngle = 0.0f;

            for (int c = 0; c<count; c++) {
                pd.lifetime = RXRandom.Range (0.3f, 0.5f);

                float speed = RXRandom.Range (30.0f, 80.0f);
                float useAngle = nextAngle + RXRandom.Range (-0.01f, 0.01f);

                pd.speedX = Mathf.Cos (useAngle) * speed;
                pd.speedY = Mathf.Sin (useAngle) * speed;

                nextAngle += radiansPerParticle;

                pd.startColor = RXRandom.GetRandomItem (colors);
                pd.endColor = RXRandom.GetRandomItem (colors).CloneWithNewAlpha (0.0f);

                particleSystem.AddParticle (pd);
            }
        }
    public void AddParticle(FParticleDefinition particleDefinition)
    {
        FAtlasElement element = particleDefinition.element;

        if(_hasInited)
        {
            if(element.atlas != _atlas)
            {
                throw new FutileException("All elements added to a particle system must be from the same atlas");
            }
        }
        else
        {
            _hasInited = true;
            Init(FFacetType.Quad, element.atlas, _maxParticleCount);
        }

        FParticle particle;

        if(_availableParticleCount == 0)
        {
            //return; //there are no particles available, just don't create a new one! (later on we could just reuse an existing one)

            //get one of the currently running particles and overwrite it
            //but make sure we don't keep overwriting the same particle!
            particle = _availableParticles[_unavailableParticleIndex--];
            if(_unavailableParticleIndex < 0)
            {
                _unavailableParticleIndex = _maxParticleCount-1;
            }
        }
        else
        {
            _availableParticleCount--;
            particle = _availableParticles[_availableParticleCount];
        }

        float lifetime = particleDefinition.lifetime;

        particle.timeRemaining = lifetime;

        particle.x = particleDefinition.x;
        particle.y = particleDefinition.y;
        particle.speedX = particleDefinition.speedX;
        particle.speedY = particleDefinition.speedY;

        particle.scale = particleDefinition.startScale;

        particle.scaleDeltaPerSecond = (particleDefinition.endScale - particleDefinition.startScale) / lifetime;

        Color startColor = particleDefinition.startColor;
        Color endColor = particleDefinition.endColor;

        particle.color = startColor;

        particle.redDeltaPerSecond = (endColor.r - startColor.r) / lifetime;
        particle.greenDeltaPerSecond = (endColor.g - startColor.g) / lifetime;
        particle.blueDeltaPerSecond = (endColor.b - startColor.b) / lifetime;
        particle.alphaDeltaPerSecond = (endColor.a - startColor.a) / lifetime;

        particle.elementHalfWidth = element.sourceSize.x * 0.5f;
        particle.elementHalfHeight = element.sourceSize.y * 0.5f;

        particle.uvTopLeft = element.uvTopLeft;
        particle.uvTopRight = element.uvTopRight;
        particle.uvBottomRight = element.uvBottomRight;
        particle.uvBottomLeft = element.uvBottomLeft;
    }
Exemple #17
0
    void InitLava()
    {
        lavaPD = new FParticleDefinition("Particles/Flame");

        lavaPD.startColor = new Color(1.0f,RXRandom.Range(0.0f,1.0f),0,0.3f);
        lavaPD.endColor = lavaPD.startColor.CloneWithNewAlpha(-0.6f);

        lavaPositions.Add(new Vector2(-623.9141f,278.9141f));
        lavaPositions.Add(new Vector2(-604.9141f,299.9141f));
        lavaPositions.Add(new Vector2(-574.9141f,321.9141f));
        lavaPositions.Add(new Vector2(-535.9141f,335.9141f));
        lavaPositions.Add(new Vector2(-540.9141f,342.9141f));
        lavaPositions.Add(new Vector2(-599.9141f,339.9141f));
        lavaPositions.Add(new Vector2(-608.9141f,339.9141f));
        lavaPositions.Add(new Vector2(-623.9141f,311.9141f));
        lavaPositions.Add(new Vector2(-630.9141f,342.9141f));
        lavaPositions.Add(new Vector2(-639.9141f,303.9141f));
        lavaPositions.Add(new Vector2(-450.9141f,342.9141f));
        lavaPositions.Add(new Vector2(-439.9141f,313.9141f));
        lavaPositions.Add(new Vector2(-422.9141f,300.9141f));
        lavaPositions.Add(new Vector2(-380.9141f,290.9141f));
        lavaPositions.Add(new Vector2(-346.9141f,292.9141f));
        lavaPositions.Add(new Vector2(-339.9141f,301.9141f));
        lavaPositions.Add(new Vector2(-353.9141f,339.9141f));
        lavaPositions.Add(new Vector2(-368.9141f,349.9141f));
        lavaPositions.Add(new Vector2(-394.9141f,354.9141f));
        lavaPositions.Add(new Vector2(-291.9141f,316.9141f));
        lavaPositions.Add(new Vector2(-266.7813f,309.8672f));
        lavaPositions.Add(new Vector2(-321.7813f,291.8672f));
        lavaPositions.Add(new Vector2(167.2188f,272.8672f));
        lavaPositions.Add(new Vector2(167.2188f,298.8672f));
        lavaPositions.Add(new Vector2(205.2188f,291.8672f));
        lavaPositions.Add(new Vector2(166.2188f,317.8672f));
        lavaPositions.Add(new Vector2(171.2188f,343.8672f));
        lavaPositions.Add(new Vector2(56.21875f,292.8672f));
        lavaPositions.Add(new Vector2(11.21875f,291.8672f));
        lavaPositions.Add(new Vector2(250.2188f,351.8672f));
        lavaPositions.Add(new Vector2(317.2188f,351.8672f));
        lavaPositions.Add(new Vector2(372.2188f,347.8672f));
        lavaPositions.Add(new Vector2(432.2188f,346.8672f));
        lavaPositions.Add(new Vector2(480.2188f,345.8672f));
        lavaPositions.Add(new Vector2(516.2188f,343.8672f));
        lavaPositions.Add(new Vector2(530.2188f,329.8672f));
        lavaPositions.Add(new Vector2(545.2188f,314.8672f));
        lavaPositions.Add(new Vector2(563.2188f,299.8672f));
        lavaPositions.Add(new Vector2(580.2188f,287.8672f));
        lavaPositions.Add(new Vector2(611.2188f,271.8672f));
        lavaPositions.Add(new Vector2(616.2188f,264.8672f));
        lavaPositions.Add(new Vector2(617.2188f,292.8672f));
        lavaPositions.Add(new Vector2(612.2188f,311.8672f));
        lavaPositions.Add(new Vector2(587.2188f,332.8672f));
        lavaPositions.Add(new Vector2(577.2188f,334.8672f));
        lavaPositions.Add(new Vector2(606.2188f,338.8672f));
        lavaPositions.Add(new Vector2(512.2188f,336.8672f));
        lavaPositions.Add(new Vector2(627.2188f,39.86719f));
        lavaPositions.Add(new Vector2(610.2188f,20.86719f));
        lavaPositions.Add(new Vector2(585.2188f,-1.132813f));
        lavaPositions.Add(new Vector2(568.2188f,-5.132813f));
        lavaPositions.Add(new Vector2(542.2188f,-13.13281f));
        lavaPositions.Add(new Vector2(542.2188f,-17.13281f));
        lavaPositions.Add(new Vector2(-301.8711f,308.8242f));
        lavaPositions.Add(new Vector2(-344.8711f,297.8242f));
        lavaPositions.Add(new Vector2(-367.8711f,288.8242f));
        lavaPositions.Add(new Vector2(-382.8711f,290.8242f));
        lavaPositions.Add(new Vector2(-403.8711f,294.8242f));
        lavaPositions.Add(new Vector2(-424.8711f,303.8242f));
        lavaPositions.Add(new Vector2(572.1289f,-7.175781f));
        lavaPositions.Add(new Vector2(548.1289f,-17.17578f));
        lavaPositions.Add(new Vector2(573.1289f,-28.17578f));
        lavaPositions.Add(new Vector2(601.1289f,-32.17578f));
        lavaPositions.Add(new Vector2(600.1289f,-28.17578f));
        lavaPositions.Add(new Vector2(581.1289f,-55.17578f));
        lavaPositions.Add(new Vector2(584.1289f,-44.17578f));
        lavaPositions.Add(new Vector2(557.1289f,-21.17578f));
        lavaPositions.Add(new Vector2(537.1289f,-19.17578f));
        lavaPositions.Add(new Vector2(605.1289f,-56.17578f));
        lavaPositions.Add(new Vector2(627.1289f,-45.17578f));
        lavaPositions.Add(new Vector2(627.1289f,-56.17578f));
        lavaPositions.Add(new Vector2(621.1289f,-127.1758f));
        lavaPositions.Add(new Vector2(614.1289f,-130.1758f));
        lavaPositions.Add(new Vector2(612.1289f,-75.17578f));
        lavaPositions.Add(new Vector2(606.1289f,-83.17578f));
        lavaPositions.Add(new Vector2(598.1289f,-113.1758f));
        lavaPositions.Add(new Vector2(577.1289f,-120.1758f));
        lavaPositions.Add(new Vector2(567.1289f,-125.1758f));
        lavaPositions.Add(new Vector2(608.1289f,-147.1758f));
        lavaPositions.Add(new Vector2(615.1289f,-159.1758f));
        lavaPositions.Add(new Vector2(617.1289f,-164.1758f));
        lavaPositions.Add(new Vector2(629.1289f,-148.1758f));
        lavaPositions.Add(new Vector2(630.1289f,-145.1758f));
        lavaPositions.Add(new Vector2(630.1289f,-184.1758f));
        lavaPositions.Add(new Vector2(630.1289f,-193.1758f));
        lavaPositions.Add(new Vector2(630.1289f,-205.1758f));
        lavaPositions.Add(new Vector2(629.1289f,-250.1758f));
        lavaPositions.Add(new Vector2(629.1289f,-270.1758f));
        lavaPositions.Add(new Vector2(625.1289f,-305.1758f));
        lavaPositions.Add(new Vector2(622.1289f,-317.1758f));
        lavaPositions.Add(new Vector2(612.1289f,-288.1758f));
        lavaPositions.Add(new Vector2(605.1289f,-276.1758f));
        lavaPositions.Add(new Vector2(598.1289f,-300.1758f));
        lavaPositions.Add(new Vector2(593.1289f,-308.1758f));
        lavaPositions.Add(new Vector2(565.1289f,-338.1758f));
        lavaPositions.Add(new Vector2(560.1289f,-323.1758f));
        lavaPositions.Add(new Vector2(560.1289f,-320.1758f));
        lavaPositions.Add(new Vector2(555.1289f,-338.1758f));
        lavaPositions.Add(new Vector2(540.1289f,-356.1758f));
        lavaPositions.Add(new Vector2(529.1289f,-359.1758f));
        lavaPositions.Add(new Vector2(520.1289f,-354.1758f));
        lavaPositions.Add(new Vector2(488.1289f,-352.1758f));
        lavaPositions.Add(new Vector2(488.1289f,-352.1758f));
        lavaPositions.Add(new Vector2(-335.8711f,-344.1758f));
        lavaPositions.Add(new Vector2(-373.9141f,-328.1328f));
        lavaPositions.Add(new Vector2(-412.9141f,-318.1328f));
        lavaPositions.Add(new Vector2(-418.9141f,-321.1328f));
        lavaPositions.Add(new Vector2(-456.9141f,-331.1328f));
        lavaPositions.Add(new Vector2(-471.9141f,-328.1328f));
        lavaPositions.Add(new Vector2(-495.9141f,-321.1328f));
        lavaPositions.Add(new Vector2(-515.9141f,-311.1328f));
        lavaPositions.Add(new Vector2(-540.9141f,-287.1328f));
        lavaPositions.Add(new Vector2(-555.9141f,-282.1328f));
        lavaPositions.Add(new Vector2(-568.9141f,-265.1328f));
        lavaPositions.Add(new Vector2(-577.9141f,-261.1328f));
        lavaPositions.Add(new Vector2(-628.9141f,-255.1328f));
        lavaPositions.Add(new Vector2(-616.9141f,-278.1328f));
        lavaPositions.Add(new Vector2(-600.9141f,-298.1328f));
        lavaPositions.Add(new Vector2(-580.9141f,-315.1328f));
        lavaPositions.Add(new Vector2(-561.9141f,-327.1328f));
        lavaPositions.Add(new Vector2(-549.9141f,-341.1328f));
        lavaPositions.Add(new Vector2(-543.9141f,-350.1328f));
        lavaPositions.Add(new Vector2(-561.9141f,-345.1328f));
        lavaPositions.Add(new Vector2(-582.9141f,-343.1328f));
        lavaPositions.Add(new Vector2(-594.9141f,-323.1328f));
        lavaPositions.Add(new Vector2(-615.9141f,-306.1328f));
        lavaPositions.Add(new Vector2(-625.9141f,-297.1328f));
        lavaPositions.Add(new Vector2(-624.0938f,-318.1758f));
        lavaPositions.Add(new Vector2(-609.0938f,-334.1758f));
        lavaPositions.Add(new Vector2(-601.0938f,-350.1758f));
        lavaPositions.Add(new Vector2(-601.0938f,-352.1758f));
        lavaPositions.Add(new Vector2(-615.0938f,-352.1758f));
        lavaPositions.Add(new Vector2(-625.0938f,-347.1758f));
        lavaPositions.Add(new Vector2(-626.0938f,-347.1758f));
        lavaPositions.Add(new Vector2(-628.0938f,-121.1758f));
        lavaPositions.Add(new Vector2(-624.0938f,-112.1758f));
        lavaPositions.Add(new Vector2(-625.0938f,-96.17578f));
        lavaPositions.Add(new Vector2(-626.0938f,-87.17578f));
        lavaPositions.Add(new Vector2(-588.0938f,12.82422f));
        lavaPositions.Add(new Vector2(-601.0938f,20.82422f));
        lavaPositions.Add(new Vector2(-614.0938f,31.82422f));
        lavaPositions.Add(new Vector2(-618.0938f,38.82422f));
        lavaPositions.Add(new Vector2(-625.0938f,47.82422f));
        lavaPositions.Add(new Vector2(-627.0938f,52.82422f));
        lavaPositions.Add(new Vector2(-626.0938f,74.82422f));
        lavaPositions.Add(new Vector2(-615.0938f,84.82422f));
        lavaPositions.Add(new Vector2(-608.0938f,89.82422f));
        lavaPositions.Add(new Vector2(-589.0938f,97.82422f));
        lavaPositions.Add(new Vector2(-593.0938f,107.8242f));
        lavaPositions.Add(new Vector2(-624.0938f,121.8242f));
        lavaPositions.Add(new Vector2(-627.0938f,134.8242f));
        lavaPositions.Add(new Vector2(-627.0938f,138.8242f));
        lavaPositions.Add(new Vector2(-605.0938f,301.8242f));
        lavaPositions.Add(new Vector2(-588.0938f,317.8242f));
        lavaPositions.Add(new Vector2(-364.0938f,295.8242f));
        lavaPositions.Add(new Vector2(176.9063f,282.8242f));
        lavaPositions.Add(new Vector2(574.9063f,-25.17578f));
        lavaPositions.Add(new Vector2(-319.0938f,-345.1758f));
        lavaPositions.Add(new Vector2(-411.0938f,-321.1758f));
    }