public void ThrowProjectile(ProjectileController source)
    {
        Transform egg = Instantiate(projectile.transform, transform.position, transform.rotation);

        egg.GetComponent <SpriteRenderer>().color = source.GetComponent <SpriteRenderer>().color;
        Rigidbody2D rb = egg.GetComponent <Rigidbody2D>();

        rb.velocity = _gravityDirection * throwForce;

        // Feather burst
        ParticleSystem.MainModule main = featherBurst.main;
        main.startColor = source.GetComponent <SpriteRenderer>().color;
        featherBurst.Play();
    }
Example #2
0
    /*
     * For the most part this is very similar to the Shoot() coroutine in my GunController. I should
     * work to combine these ideas into a more generic "Shootable" interface (maybe Fireable? shootable
     * sort of implies that it's being hit by the shot)
     */
    void Shoot()
    {
        if (target == null)
        {
            Debug.LogError("Error: No target for this EnemyShooter Shoot method.");
        }

        canShoot = false;
        GameObject thisShot =
            (GameObject)Instantiate(projectilePrefab, transform.position + new Vector3(0f, -1.5f, 0f), transform.rotation);
        ProjectileController shotController = thisShot.GetComponent <ProjectileController> ();

        shotController.spawnerTag = gameObject.tag;
        shotController.speed      = shotSpeed;
        shotController.shotDamage = shotDamage;
        shotController.gameObject.transform.LookAt(target.gameObject.transform);


        // right now this won't work as the shot isn't rotated to face the player
        shotController.GetComponent <Rigidbody> ().velocity =
            shotController.transform.forward * shotController.speed;

        /*
         * shotController.GetComponent<Rigidbody> ().velocity =
         *      Vector3.down * shotController.speed;
         */

        Invoke("ResetShoot", shootDelay);
    }
    private void Fire()
    {
        //Debug.Log("Firing " + Name  );
        // instantiate projectile
        ProjectileController t = Instantiate(Projectile);

        t.transform.position = FirePoint.position;
        t.transform.rotation = RotationPoint.rotation;
        ProjectileController projectile = t.GetComponent <ProjectileController>();


        // at the moment no friendly fire, bullets will only hit enemies
        projectile.LayerMask = (transform.gameObject.layer == GameManager.PLAYER_LAYER ? 1 << GameManager.ENEMY_LAYER : 1 << GameManager.PLAYER_LAYER);
        projectile.Damage    = BaseDamage;
        projectile.Range     = GetRange();
        projectile.SetSpeed(ProjectileSpeed);


        MeshRenderer[] renderers = projectile.GetComponentsInChildren <MeshRenderer>();

        foreach (MeshRenderer renderer in renderers)
        {
            renderer.material.SetColor("_TintColor", _laserColor);
        }

        _timeSinceLastShot -= TimeBetweenShots;
        _shotCharged        = false;

        MuzzleFlareParticleSystem.Play();
    }
Example #4
0
    void Shoot()
    {
        // animator.SetTrigger("fire");
        ProjectileController projectile = Instantiate(projectilePrefab, arrowSpawn.position, Quaternion.identity);
        Rigidbody            rb         = projectile.GetComponent <Rigidbody>();

        rb.velocity = playerCam.transform.forward * shootForce;
    }
Example #5
0
    public void Projectile(int damage, Vector3 pos, Quaternion rotate)
    {
        ProjectileController p = Instantiate <ProjectileController>(template);

        p.transform.position = pos;
        p.transform.rotation = rotate;
        p.damageAmount       = damage;
        p.GetComponent <Rigidbody>().velocity = (transform.forward).normalized * 7.0f;
    }
    public void Shoot(GameObject player)
    {
        transform.LookAt(player.transform);
        ProjectileController projectile = Instantiate <ProjectileController>(
            projectilePrefab,
            transform.Find("SwordSpawn").transform.position,
            Quaternion.identity);
        Rigidbody rb        = projectile.GetComponent <Rigidbody>();
        Vector3   direction = (player.transform.position - projectile.transform.position).normalized;

        rb.velocity = direction * shootForce;
    }
    IEnumerator FireCoolTimeCoroutine()
    {
        isOnFire          = true;
        networkFireBuffer = true;

        //inGameSceneManager.PlayerAttackProcess(realCharacterIndex, dirLeftOrRightBuffer, posBuffer);

        // or

        if (realCharacterIndex == 1)
        {
            projectileController.GetComponent <ProjectileController>().AttackFireBall(dirLeftOrRightBuffer, transform.position);
        }
        else
        {
            projectileController.GetComponent <ProjectileController>().AttackLightBall(dirLeftOrRightBuffer, transform.position);
        }

        yield return(new WaitForSeconds(0.5f));

        isOnFire = false;
    }
        private void FindNearby()
        {
            Vector3 vector           = gameObject.transform.position;
            float   diameterDistance = 9 * 9;

            List <ProjectileController> instancesList = InstanceTracker.GetInstancesList <ProjectileController>();
            List <ProjectileController> list          = new List <ProjectileController>();

            int num3  = 0;
            int count = instancesList.Count;

            while (num3 < count)
            {
                ProjectileController enemyProjectileController = instancesList[num3];
                if (enemyProjectileController.owner == projectileController.owner && (projectileController.transform.position - vector).sqrMagnitude < diameterDistance &&
                    projectileController.gameObject.GetComponent <PoisonSplatController>())
                {
                    list.Add(projectileController);
                }
                num3++;
            }

            bool result = count > 0;

            int i      = 0;
            int count2 = list.Count;

            while (i < count2)
            {
                ProjectileController projectileController2 = list[i];
                if (projectileController2)
                {
                    PoisonSplatController poisonSplatController = projectileController2.GetComponent <PoisonSplatController>();
                    if (poisonSplatController)
                    {
                        poisonSplatController.AddStack();
                    }
                }
                i++;
            }

            if (result)
            {
                Destroy(gameObject);
            }
        }
Example #9
0
    void Bow()
    {
        src.volume = 0.6f;
        src.PlayOneShot(shoot);
        //anim.Play("Bow");
        //Set variables
        ProjectileController arr = Instantiate(arrow, transform.position, transform.rotation).GetComponent <ProjectileController>();

        arr.GetComponent <SpriteRenderer>().color = weaponRend.color;
        arr.effect      = curWeapon.effect;
        arr.pot         = curWeapon.potency;
        arr.atkMod      = atkMod;
        arr.atk         = curWeapon.atk;
        arr.dmgModifier = dmgModifier;

        Invoke("ResetAttacking", 0.25f);
    }
    public void Action(PlayerController player, ProjectileController projectileObj)
    {
        ProjectileController projectile = projectileObj.GetComponent <ProjectileController>();

        //Player
        player.Ps.playerSpeed         += items.playerSpeed;
        player.Ps.playerShootingDelay += items.projectileDelay;
        player.Ps.playerSpeed         += items.projectileSpeed;
        player.Ps.Luck  += items.Luck;
        player.Ps.Devil += items.Devil;
        player.Ps.Holly += items.Holly;

        //PROJECTILE
        //TODO crear la estructura de la bala para setearla al conseguir items
        projectile.projectileStats.projectileSpeed  += items.projectileSpeed;
        projectile.projectileStats.projectileRange  += items.projectileRange;
        projectile.projectileStats.projectileDamage += items.projectileDamage;

        Destroy(gameObject);
    }
Example #11
0
    private void UpgradeProjectile(ProjectileController projectile, WeaponType weaponType)
    {
        if (GetWeaponRank(weaponType) < 5)
        {
            projectile.Damage *= 1.25f;
        }
        else if (GetWeaponRank(weaponType) < 10)
        {
            projectile.Damage *= 1.15f;
        }
        else
        {
            projectile.Damage *= 1.05f;
        }

        ObjectChaser chaser = projectile.GetComponent <ObjectChaser>();

        if (chaser != null)
        {
            //increase weapon stats
            if (GetWeaponRank(weaponType) < 5)
            {
                chaser.Delay     /= 1.25f;
                chaser.Precision *= 1.25f;
            }
            else if (GetWeaponRank(weaponType) < 10)
            {
                chaser.Delay     /= 1.15f;
                chaser.Precision *= 1.15f;
            }
            else
            {
                chaser.Delay     /= 1.05f;
                chaser.Precision *= 1.05f;
            }
        }
    }
Example #12
0
    /*
     * This seems like it might be able to be made into an interface, because I'm about to
     * reuse some of this code for the EnemyShooter
     */

    // also, weird error - first shot if held down on spawn floats with no velocity. look into that.
    IEnumerator Shoot()
    {
        if (canShoot)
        {
            canShoot = false;
            // make our burst loop
            for (int i = 0; i < equipped.burstAmount; i++)
            {
                //AudioSource test = equipped.gameObject.GetComponent<AudioSource> ();
                //Debug.Log (test);
                PlayerController.Instance.shotSound.Play();
                GameObject           thisShot       = (GameObject)Instantiate(equipped.projectilePrefab, gunBarrelTrans.position, shootRotation);
                ProjectileController shotController = thisShot.GetComponent <ProjectileController> ();
                shotController.spawnerTag = gameObject.tag;
                shotController.speed      = equipped.speed;
                shotController.shotDamage = equipped.shotDamage;
                shotController.GetComponent <Rigidbody>().velocity =
                    shotController.transform.forward * shotController.speed;
                yield return(new WaitForSeconds(equipped.burstDelay));
            }
            //end the burst loop
            Invoke("ResetShot", equipped.shotDelay);
        }
    }
Example #13
0
    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Vector3 adjustedClick = Camera.main.ScreenToWorldPoint(AdjustClickToCam());
            float   distance      = Vector3.Distance(adjustedClick, transform.position);

            // if click is out of range, return
            if (distance > limitRadii)
            {
                return;
            }

            onHit = true;
        }

        // update velocity based current drag point and start drag point (vector subtraction)
        else if (Input.GetMouseButton(0) && onHit)
        {
            Vector3 currentMousePos = Camera.main.ScreenToWorldPoint(AdjustClickToCam());
            velocity = (transform.position - currentMousePos) * velocityScale;

            Flip();

            float distance = Vector3.Distance(transform.position, currentMousePos);
            if (distance > limitRadii)
            {
                velocity = velocity * ((limitRadii * velocityScale) / velocity.magnitude);
            }

            if (!charged)
            {
                updatedSpd = velocity.magnitude;
                updatedAng = Mathf.Rad2Deg * Mathf.Atan2(velocity.y, velocity.x);
                CalculateTrajectory();
                DrawNormalTrajectory(points);
            }
            else
            {
                // charged shot points update
                Vector3[] chargedTrajec = new Vector3[2];
                chargedTrajec[0] = transform.position;
                chargedTrajec[1] = transform.position + (velocity / velocity.magnitude) * 38.0f;

                RaycastHit2D hit = Physics2D.Raycast(chargedTrajec[0], -velocity, lineBlock);
                //print(hit.fraction);
                if (hit.fraction != 0)
                {
                    chargedTrajec[1] = hit.point;
                }

                DrawChargedTrajectory(chargedTrajec);
            }

            // update animation
            if (distance > animRadii)
            {
                Animator snowmanAnim = transform.gameObject.GetComponent <Animator>();
                snowmanAnim.SetTrigger("startLoad");
            }
        }

        // spawn projectile with given velocity when mouse released
        else if (Input.GetMouseButtonUp(0) && onHit)
        {
            GameObject projectileClone;
            if (!charged)
            {
                projectileClone = GameObject.Instantiate(snowBall, transform.position, Quaternion.identity) as GameObject;
                projectileClone.GetComponent <ProjectileController>().Charged = false;
            }
            else
            {
                projectileClone = GameObject.Instantiate(iceBall, transform.position, Quaternion.identity) as GameObject;
                projectileClone.GetComponent <ProjectileController>().Charged = true;
                projectileClone.GetComponent <Rigidbody2D>().gravityScale     = 0.0f;
                velocity = 43.0f * (velocity / velocity.magnitude);
            }
            ProjectileController proj = projectileClone.GetComponent <ProjectileController>();
            Rigidbody2D          rb2d = projectileClone.GetComponent <Rigidbody2D>();

            rb2d.velocity = velocity;
            proj.GetComponent <AudioSource>().Play();

            Animator snowmanAnim = transform.gameObject.GetComponent <Animator>();
            snowmanAnim.SetTrigger("startThrow");

            ClearTrajectory(points);
        }
    }
Example #14
0
        private static GameObject CreateNewWave(string waveName, DamageType damageType, string ghostPrefabName, Vector3 waveCoreSize, Vector3 waveOuterSize, Vector3 rotation, bool useIceDebuff)
        {
            //clone fire projectile, fix size (original size is 0.05, 0.05, 1)
            GameObject newWavePrefab = CloneProjectilePrefab("Fireball", waveName);

            newWavePrefab.transform.localScale    = new Vector3(1f, 1f, 1f);
            newWavePrefab.transform.localRotation = Quaternion.Euler(StatValues.waveRotation1);

            //create 'container' to enable local rotation of the wave
            GameObject transformBox = new GameObject("TransformBox");

            transformBox.transform.parent = newWavePrefab.transform;
            transformBox.layer            = 14;

            //set ghost, damage and owner
            ProjectileController newWaveController = newWavePrefab.GetComponent <ProjectileController>();

            newWaveController.ghostPrefab = CreateGhostPrefab(ghostPrefabName);
            newWaveController.GetComponent <ProjectileDamage>().damageType = damageType;
            newWaveController.owner           = Survivors.Manipulator.characterPrefab;
            newWaveController.procCoefficient = StatValues.waveProcCoefficient;

            TeamFilter newWaveTeam = newWavePrefab.GetComponent <TeamFilter>();

            newWaveTeam.defaultTeam = TeamIndex.Player;

            //replace single target impact with custom impact script
            UnityEngine.Object.Destroy(newWavePrefab.GetComponent <ProjectileSingleTargetImpact>());
            ManipulatorProjectileWaveImpact newWaveImpact = newWavePrefab.AddComponent <ManipulatorProjectileWaveImpact>();

            newWaveImpact.destroyOnWorld      = true;
            newWaveImpact.destroyWhenNotAlive = true;
            newWaveImpact.useIceDebuff        = useIceDebuff;

            ProjectileSimple newWaveSimple = newWavePrefab.GetComponent <ProjectileSimple>();

            newWaveSimple.lifetime = StatValues.waveLifetime;
            //newWaveSimple.velocity = waveVelocity;
            newWaveSimple.desiredForwardSpeed = StatValues.waveSpeed;

            //replace sphere with core box (smaller middle, collides with both terrain and enemies)
            //UnityEngine.Object.Destroy(newWavePrefab.GetComponent<SphereCollider>());
            BoxCollider newWaveBox = newWavePrefab.AddComponent <BoxCollider>();

            newWaveBox.transform.parent = transformBox.transform;
            newWaveBox.size             = waveCoreSize;

            //add outer box collider (collides with enemies only)
            GameObject childObject = new GameObject("OuterBox");

            childObject.layer            = 14;
            childObject.transform.parent = transformBox.transform;
            ManipulatorProjectileChildCollisionDetection childScript = childObject.AddComponent <ManipulatorProjectileChildCollisionDetection>();

            childScript.AddBoxCollider(waveOuterSize, childObject);

            //set local rotation
            Quaternion quaternion = Quaternion.Euler(rotation);

            transformBox.transform.localRotation = quaternion;

            //return result
            return(newWavePrefab);
        }
Example #15
0
    private void UpgradeProjectile(ProjectileController projectile, WeaponType weaponType)
    {
        if (GetWeaponRank(weaponType) < 5)
        {
            projectile.Damage *= 1.25f;
        }
        else if (GetWeaponRank(weaponType) < 10)
        {
            projectile.Damage *= 1.15f;
        }
        else
        {
            projectile.Damage *= 1.05f;
        }

        ObjectChaser chaser = projectile.GetComponent<ObjectChaser>();
        if (chaser != null)
        {
            //increase weapon stats
            if (GetWeaponRank(weaponType) < 5)
            {
                chaser.Delay /= 1.25f;
                chaser.Precision *= 1.25f;
            }
            else if (GetWeaponRank(weaponType) < 10)
            {
                chaser.Delay /= 1.15f;
                chaser.Precision *= 1.15f;
            }
            else
            {
                chaser.Delay /= 1.05f;
                chaser.Precision *= 1.05f;
            }
        }
    }