Exemplo n.º 1
0
    public void Fire(Rigidbody firingEntity)
    {
        if (firingRateTimer >= fireRate && currentAmmo > 0)
        {
            weaponAnimator.SetBool("Firing", true);
            GameObject proj         = Instantiate(projectile, defaultFireOrigin.position, Quaternion.identity);
            Vector3    localForward = transform.InverseTransformDirection(defaultFireOrigin.forward);
            proj.transform.forward = transform.TransformDirection(ComputeInnacuracy(localForward));

            ProjectileBehavior newProj = proj.GetComponent <ProjectileBehavior>();
            if (newProj != null)
            {
                newProj.SetShooter(this.gameObject);
            }

            if (firingEntity != null)
            {
                proj.GetComponent <Rigidbody>().velocity = firingEntity.velocity;
            }

            firingRateTimer = 0.0f;
            hasFired        = true;
            currentAmmo--;
        }
        if (currentAmmo <= 0)
        {
            StartReload();
        }
    }
Exemplo n.º 2
0
        // The RPC to launch the projectile.
        public override void CreateProjectile(RpcArgs args)
        {
            MainThreadManager.Run(() =>
            {
                // Retrieve the arguments from the RPC call: start position of the projectile and the player ID who shot it
                Vector3 pos = args.GetNext <Vector3>();
                int pid     = args.GetNext <int>();

                //Debug.Log("Player.CreateProjectile(): called with position=" + pos + " for playerID=" + pid);

                // Network instantiate the projectile on the server
                if (NetworkManager.Instance.IsServer)
                {
                    //Debug.Log("Player.CreateProjectile(): we are on the host");
                    ProjectileBehavior pb       = NetworkManager.Instance.InstantiateProjectile(0, pos, Quaternion.identity);
                    pb.networkObject.ownerNetId = networkObject.MyPlayerId;
                    pb.networkObject.playerID   = pid;

                    // We'll automatically destroy the projectile after the destroyDelay in seconds
                    pb.networkObject.Destroy(destroyDelay * 1000);

                    // The actual launch of the projectile takes place in its Projectile.Inialize() function
                }
            });
        }
Exemplo n.º 3
0
    public void Init(Tower tower, bool placing = false)
    {
        mouse_collider = GetComponent <BoxCollider2D>();

        damage       = tower.damage;
        range        = tower.range;
        attack_speed = tower.attack_speed;
        ready_time   = tower.ready_time;
        cost         = tower.cost;

        SpriteRenderer base_renderer = tower_base.GetComponent <SpriteRenderer>();

        base_renderer.sprite = tower.base_sprite;
        base_renderer.color  = tower.base_color;

        SpriteRenderer turret_renderer = tower_turret.GetComponent <SpriteRenderer>();

        turret_renderer.sprite = tower.turret_sprite;
        turret_renderer.color  = tower.turret_color;

        projectile          = tower.projectile;
        projectile_template = tower.projectile_template;

        tower_range.transform.localScale = new Vector3(tower.range * 4, tower.range * 4, 0f);
        tower_range.SetActive(placing);
    }
 public void addBehavior(string key, ProjectileBehavior projectileBehavior)
 {
     if (_behaviors.ContainsKey(key) == false)
     {
         _behaviors[key] = new List<ProjectileBehavior>();
     }
     _behaviors[key].Add(projectileBehavior);
 }
Exemplo n.º 5
0
    private void Fire()
    {
        current_time = current_time - attack_speed;
        ProjectileBehavior bullet = GameObject.Instantiate(projectile);

        bullet.transform.position = new Vector3(turret.position.x, turret.position.y, 0f);
        bullet.Init(null, target.transform, damage);
    }
Exemplo n.º 6
0
    private void Fire()
    {
        current_time = current_time - attack_speed;
        ProjectileBehavior bullet = GameObject.Instantiate(projectile_template);

        bullet.transform.position = tower_turret.transform.position;
        bullet.Init(projectile, target.transform, damage);
    }
    // Called whenever this object is involved in a collision.
    void OnCollisionEnter(Collision collision)
    {
        // We only care if the collision is with a projectile.
        ProjectileBehavior pb = collision.contacts[0].otherCollider.gameObject.GetComponent <ProjectileBehavior>();

        if (pb != null)
        {
            TargetDangerLevel += DangerLevelIncreaseFactor;
        }
    }
Exemplo n.º 8
0
 public void Shoot()
 {
     if (Time.time > nextShot)
     {
         nextShot = Time.time + timeBetweenShots;
         //Sets _drink to instantiate the drink's gameobject at the server's position
         _drink = Instantiate(drink.gameObject, server.transform.position, server.transform.rotation);
         //Calls GetComponent for the _drink with a new ProjectileBehavior
         ProjectileBehavior moveDrink = _drink.GetComponent <ProjectileBehavior>();
         //Sets the velocity to the server's forward scaled by the firerate
         moveDrink.Velocity = transform.forward * shootSpeed;
         //
         _playerAnimation.Shoot();
     }
 }
Exemplo n.º 9
0
    //Main execute method for the player
    public IEnumerator execute()
    {
        offCD = false;
        float timer = 0f;

        basis.getController().canMove = false;
        anim.SetFloat("speed", 0f);
        Vector2 direction = Battle.dirKnockbackCalc(basis.transform.position, 1);

        Battle.updatePlayerAOrientation(basis.transform);
        anim.SetBool("SpAttacking", true);
        float animLength = ANIM_DURATION_FACTOR * anim.GetCurrentAnimatorStateInfo(0).length;

        yield return(new WaitForSeconds(animLength));

        anim.SetBool("SpAttacking", false);

        //If basis is not stunned
        if (!basis.isStunned())
        {
            Transform          curHitbox      = Object.Instantiate(hitbox, basis.transform);
            ProjectileBehavior projProperties = curHitbox.GetComponent <ProjectileBehavior>();
            projProperties.offensiveSetup(PROJ_SPEED, 0, PROJ_PRIORITY, this);
            projProperties.setDirection(direction);

            //Wait for timeout
            timer = 0f;

            //wait for animation frame to finish before continuing script
            while (curHitbox != null && timer < TIMEOUT)
            {
                yield return(new WaitForFixedUpdate());

                timer += Time.deltaTime;
            }

            if (curHitbox != null)
            {
                Object.Destroy(curHitbox.gameObject);
            }


            if (!basis.isStunned())
            {
                basis.getController().canMove = true;
            }
        }
    }
Exemplo n.º 10
0
    // Update is called once per frame
    void Update()
    {
        shootDir = new Vector2(Input.GetAxisRaw("Fire Horizontal"), Input.GetAxisRaw("Fire Vertical"));

        if (shootDir != Vector2.zero && timeSince + fireRate <= Time.time)
        {
            timeSince = Time.time;

            GameObject         clone    = Instantiate(projectile, rb.position, Quaternion.identity) as GameObject;
            ProjectileBehavior behavior = clone.AddComponent(typeof(ProjectileBehavior)) as ProjectileBehavior;

            behavior.moveDir        = shootDir;
            behavior.speed          = speed;
            behavior.exparationDate = rustTime;
        }
    }
Exemplo n.º 11
0
    private void SpawnBullet()
    {
        Vector3 bulletDirection;
        var     gunPos    = transform.position;
        var     playerPos = player.position;

        if (gameObject.tag == "Tracker")
        {
            bulletDirection = (gunPos - playerPos).normalized; //Get the Vector2 towards the player
            ProjectileBehavior newBullet = Instantiate(bullet, gunPos - bulletDirection, Quaternion.identity).GetComponent <ProjectileBehavior>();
            newBullet.transform.Rotate(Vector3.forward, Vector3.SignedAngle(gunPos, bulletDirection, Vector3.forward) + 180);
            newBullet.FireProjectile(-bulletDirection);
        }
        else if (gameObject.tag == "Forward")
        {
            bulletDirection = (gunPos - Vector3.back).normalized;
            ProjectileBehavior newBullet = Instantiate(bullet, gunPos - bulletDirection, Quaternion.identity).GetComponent <ProjectileBehavior>();
            newBullet.transform.Rotate(Vector3.forward, Vector3.SignedAngle(gunPos, bulletDirection, Vector3.forward) + 180);
            newBullet.FireProjectile(new Vector2(-1, 0));
        }
        else if (gameObject.tag == "Backward")
        {
            bulletDirection = (gunPos - Vector3.forward).normalized;
            ProjectileBehavior newBullet = Instantiate(bullet, gunPos - bulletDirection, Quaternion.identity).GetComponent <ProjectileBehavior>();
            newBullet.transform.Rotate(Vector3.forward, Vector3.SignedAngle(gunPos, bulletDirection, Vector3.forward));
            newBullet.FireProjectile(new Vector2(1, 0));
        }
        else if (gameObject.tag == "From Above")
        {
            bulletDirection = (gunPos - Vector3.down).normalized;
            ProjectileBehavior newBullet = Instantiate(bullet, gunPos - bulletDirection, Quaternion.identity).GetComponent <ProjectileBehavior>();
            newBullet.transform.Rotate(Vector3.forward, Vector3.SignedAngle(gunPos, bulletDirection, Vector3.forward) - 90);
            newBullet.FireProjectile(Vector2.down);
        }
        else if (gameObject.tag == "Down Below")
        {
            bulletDirection = (gunPos - Vector3.up).normalized;
            ProjectileBehavior newBullet = Instantiate(bullet, gunPos - bulletDirection, Quaternion.identity).GetComponent <ProjectileBehavior>();
            newBullet.transform.Rotate(Vector3.forward, Vector3.SignedAngle(gunPos, bulletDirection, Vector3.forward) + 90);
            newBullet.FireProjectile(Vector2.up);
        }


        //print("Bullet spawned!");
    }
Exemplo n.º 12
0
    private void CreateProjectile(GameUnit caster, GameUnit target, Vector3 destination)
    {
        GameObject projectile = Instantiate(projectilePrefab, caster.spriteC.shotSpawn.position, Quaternion.identity);

        projectile.transform.LookAt(destination);
        ProjectileBehavior pB = projectile.GetComponent <ProjectileBehavior> ();

        pB.hitFx          = hitFxPrefab;
        pB.speed          = projectileSpeed;
        pB.killTime       = Time.time + (Vector3.Distance(projectile.transform.position, destination) / projectileSpeed);
        pB.damage         = damageAmount;
        pB.blazeDuration  = blazeDuration;
        pB.slowDuration   = slowDuration;
        pB.slowMultiplier = slowModifier;
        pB.tauntDuration  = tauntDuration;
        pB.target         = target;
        pB.caster         = caster;
    }
        public ZazzleShot(GameWorld world, Vector2 position, Vector2 direction)
            : base(world, position, direction, 12, Constants.WORLD2MODEL_ZAZZLESHOT, 20)
        {
            anim                = new Animation(0, 8, 1f, true, 0, 0);
            myBehavior          = new ProjectileBehavior(this, 2);
            active              = true;
            frictionCoefficient = 0.001f;
            elasticity          = .5f;

            mass   = 10;
            damage = 5;
            // MASKING
            this.actorcategory         = ActorCategory.enemyprojectile;
            this.collisionmask         = ActorCategory.friendly | ActorCategory.friendlyprojectile;
            this.collisionimmunitymask = ActorCategory.enemy;
            this.damageimmunitymask    = ActorCategory.friendlyprojectile;

            textureSet = world.tileEngine.resourceComponent.getTextureSet("035_ZazzleShot");
        }
Exemplo n.º 14
0
 public void Attack()
 {
     agent.isStopped = true;
     for (int i = 0; i < projectileNumber; ++i)
     {
         GameObject         go      = Instantiate(ennemyProjectile, projectileOrigin.transform.position, Quaternion.identity);
         Vector3            force   = player.transform.position - transform.position;
         ProjectileBehavior newProj = go.GetComponent <ProjectileBehavior>();
         if (newProj != null)
         {
             newProj.SetShooter(this.gameObject);
         }
         force.y += 2.0f;
         force.x  = force.x * Random.Range(0.5f, 1.0f);
         force.z  = force.z * Random.Range(0.5f, 1.0f);
         force.y  = force.y * Random.Range(0.5f, 1.0f);
         go.GetComponent <Rigidbody>().AddForce(force);
     }
 }
Exemplo n.º 15
0
    public GameObject fire(int ptype)
    {
        if (newProjectile == null)
        {
            float scle = transform.localScale.x;
            newProjectile = Instantiate(projectileSource1, transform.position, transform.rotation);
            newProjectile.GetComponent <Rigidbody>().velocity = transform.TransformDirection(Vector3.left * 40);
            behavior        = newProjectile.GetComponent <ProjectileBehavior>();
            behavior.player = transform.parent.gameObject;
            behavior.setProjectileType(ptype);

            camera.GetComponent <CameraBehavior>().followObject(newProjectile);
        }
        else
        {
            behavior.Action();
        }
        return(newProjectile);
    }
Exemplo n.º 16
0
    void OnTriggerEnter2D(Collider2D col)
    {
        Debug.Log(col.gameObject.tag);
        if (col.gameObject.tag != "Projectile")
        {
            return;
        }

        ProjectileBehavior projectile = col.GetComponent <ProjectileBehavior>();

        Damage(projectile.damage);
        GameObject.Destroy(col.gameObject);


        if (IsDead())
        {
            GameObject.FindObjectOfType <PlayerBehavior>().AddGold(gold);
            GameObject.Destroy(this.gameObject);
        }
    }
    void OnTriggerEnter2D(Collider2D col)
    {
        if (col.gameObject.tag != "Projectile")
        {
            return;
        }

        ProjectileBehavior projectile = col.GetComponent <ProjectileBehavior>();

        enemy.Damage(projectile.damage);
        GameObject.Destroy(col.gameObject);

        // TODO: ANIMATE ENEMY? (TAKEN DAMAGE)

        if (enemy.IsDead())
        {
            GameObject.FindObjectOfType <Player>().AddGold(enemy.gold);
            GameObject.Destroy(enemy.gameObject);
            // TODO: ANIMATE +X GOLD!
        }
    }
Exemplo n.º 18
0
    /// <summary>
    /// Adds a new projectile to the world.
    /// </summary>
    /// <param name="start">Position to shoot from</param>
    /// <param name="direction">Position to shoot toward</param>
    /// <param name="radius">Size of destruction when colliding.</param>
    void ShootProjectile(Vector3 start, Vector3 direction, long OwningUser)
    {
        // Need to know the index in the PlayerAvatarStore to grab for this projectile's behavior.
        int AvatarIndex = 0;

        // Special case ID 0 to mean the local user.
        if (OwningUser == 0)
        {
            AvatarIndex = LocalPlayerManager.Instance.AvatarIndex;
        }
        else
        {
            RemotePlayerManager.RemoteHeadInfo headInfo = RemotePlayerManager.Instance.GetRemoteHeadInfo(OwningUser);
            AvatarIndex = headInfo.PlayerAvatarIndex;
        }

        PlayerAvatarParameters ownerAvatarParameters = PlayerAvatarStore.Instance.PlayerAvatars[AvatarIndex].GetComponent <PlayerAvatarParameters>();

        GameObject spawnedProjectile = (GameObject)Instantiate(ownerAvatarParameters.PlayerShotObject);

        spawnedProjectile.transform.position = start;

        // Set projectile color to be the same as the avatar color.
        FriendlyDrone drone = PlayerAvatarStore.Instance.PlayerAvatars[AvatarIndex].GetComponentInChildren <FriendlyDrone>();

        if (drone != null)
        {
            spawnedProjectile.GetComponentInChildren <Renderer>().materials[1].SetColor("_EmissionColor", drone.EmissiveColor);
            foreach (ParticleSystem particleSystem in spawnedProjectile.transform.GetComponentsInChildren <ParticleSystem>())
            {
                ParticleSystem.MainModule main = particleSystem.main;
                main.startColor = drone.EmissiveColor;
            }
        }

        ProjectileBehavior pc = spawnedProjectile.GetComponentInChildren <ProjectileBehavior>();

        pc.startDir     = direction;
        pc.OwningUserId = OwningUser;
    }
Exemplo n.º 19
0
    public override void ApplyAbilityEffect()
    {
        MultishotAbilityConfig multishotConfig = m_AbilityConfig as MultishotAbilityConfig;
        Vector3 projectileDirection            = transform.forward;
        Vector3 spawnPosition = new Vector3(transform.position.x, transform.position.y + 2, transform.position.z);

        //1
        GameObject         spawnedProjectile         = Instantiate(multishotConfig.GetProjectileToSpawn(), spawnPosition, transform.rotation);
        ProjectileBehavior spawnedProjectilebehavior = spawnedProjectile.GetComponent <ProjectileBehavior>();

        //2
        Quaternion         rotationQuat               = CreateRotationQuat(10, transform.up);
        Quaternion         finalQuat                  = rotationQuat * transform.rotation;
        GameObject         spawnedProjectile2         = Instantiate(multishotConfig.GetProjectileToSpawn(), spawnPosition, finalQuat);
        ProjectileBehavior spawnedProjectilebehavior2 = spawnedProjectile2.GetComponent <ProjectileBehavior>();

        //3
        Quaternion         rotationQuat1              = CreateRotationQuat(-10, transform.up);
        Quaternion         finalQuat1                 = rotationQuat1 * transform.rotation;
        GameObject         spawnedProjectile3         = Instantiate(multishotConfig.GetProjectileToSpawn(), spawnPosition, finalQuat1);
        ProjectileBehavior spawnedProjectilebehavior3 = spawnedProjectile3.GetComponent <ProjectileBehavior>();
    }
Exemplo n.º 20
0
    //AssistExecute for Player
    public IEnumerator assistExecute()
    {
        //Set up move
        Battle.updatePlayerAOrientation(basis.transform);
        ProjectileBehavior hitBehavior = hitbox.GetComponent <ProjectileBehavior>();

        hitBehavior.setMouseDirection(basis.transform);

        offCD = false;
        anim.SetBool("SpAttacking", true);
        int   shotsFired = 0;
        float curHealth  = basis.accessStat(BaseStat.HEALTH);

        //Bullet system. Player can fire a barrage of 5 bullets by holding button, but must stay still during it (CHANGE THIS KEYCODE)
        while (curHealth <= basis.accessStat(BaseStat.HEALTH) && shotsFired < MAX_SHOTS && curAmmo > 0)
        {
            curAmmo--;                                                         //Decrement ammo by 1
            shotsFired++;                                                      //Increment shots fired by 1

            Transform curBullet = Object.Instantiate(hitbox, basis.transform); //Instantiates hitbox with basis as the parent
            curBullet.GetComponent <ProjectileBehavior>().currentMove = this;

            //Bullet sound effect
            basis.soundFXs.Stop();
            basis.soundFXs.clip = Resources.Load <AudioClip>("Audio/AttackSounds/MachineGun");
            basis.soundFXs.Play();

            yield return(new WaitForSeconds(FIRE_RATE));
        }

        curCooldown = shotsFired * (MAX_COOLDOWN / MAX_SHOTS); //Reduces cooldown depending on the amount of shots fired

        //Upon release, enable cooldown timers and movement
        anim.SetBool("SpAttacking", false);
        basis.getController().SendMessage("assistExecuted");
        yield return(0);
    }
Exemplo n.º 21
0
    //BulletSeed constructor
    //  Pre: anim MUST have hDirection, vDirection, and special attacking vars. sourceTag is either Player or Enemy
    public BulletSeed(Animator anim, PKMNEntity basis)
    {
        //Establish variables concerning source
        this.anim     = anim;
        this.basis    = basis;
        this.enemyTag = (anim.tag == "Player") ? "Enemy" : "Player";

        //Set variables for hitbox
        this.hitbox = Resources.Load <Transform>("MoveHitboxes/BulletSeedObj");
        ProjectileBehavior projProperties = hitbox.GetComponent <ProjectileBehavior>();

        projProperties.speed        = PROJ_SPEED;
        projProperties.knockbackVal = 0;
        projProperties.priority     = PROJ_PRIORITY;

        //Regen variables
        curAmmo = MAX_AMMO;
        rTimer  = 0.0f;

        //Set cooldown variables
        cTimer      = 0.0f;
        curCooldown = MAX_COOLDOWN;
        offCD       = true;
    }
        public FireBlob(GameWorld world, Vector2 position, Vector2 direction)
            : base(world, position, direction, 16, new Vector2(-16f, -16f), 0)
        {
            life             = new Life(this, 20);
            life.deathEvent += delegate() { FireBlob_deathEvent(this); };

            anim       = new Animation(0, 3, 8f, true, -16, -16);
            myBehavior = new ProjectileBehavior(this, 0);

            active = ACTIVE;
            frictionCoefficient = FRICTION;
            elasticity          = ELASTICITY;

            mass = MASS;

            // MASKING
            this.actorcategory         = ActorCategory.enemyprojectile;
            this.collisionmask         = ActorCategory.friendly | ActorCategory.enemyprojectile;
            this.collisionimmunitymask = ActorCategory.enemyprojectile;
            this.damageimmunitymask    = ActorCategory.enemyprojectile;

            audioSet   = world.tileEngine.resourceComponent.getAudioSet("012_Octo");
            textureSet = world.tileEngine.resourceComponent.getTextureSet("040_FireBlob");
        }
        public OctoBall(GameWorld world, Vector2 position, Vector2 direction)
            : base(world, position, direction, Constants.OCTOBALL_RADIUS, Constants.WORLD2MODEL_OCTOBALL, 20)
        {
            life             = new Life(this, Constants.OCTOBALL_HEALTH);
            life.deathEvent += delegate() { OctoBall_deathEvent(this); };

            anim       = null;
            myBehavior = new ProjectileBehavior(this, 2);

            active = ACTIVE;
            frictionCoefficient = FRICTION;
            elasticity          = ELASTICITY;

            mass = Constants.OCTOBALL_MASS;

            // MASKING
            this.actorcategory         = ActorCategory.enemyprojectile;
            this.collisionmask         = ActorCategory.friendly | ActorCategory.friendlyprojectile;
            this.collisionimmunitymask = ActorCategory.enemy;
            this.damageimmunitymask    = ActorCategory.friendlyprojectile;

            audioSet   = world.tileEngine.resourceComponent.getAudioSet("012_Octo");
            textureSet = world.tileEngine.resourceComponent.getTextureSet("012_Octo");
        }
Exemplo n.º 24
0
 public void Initialize(ProjectileData _projectileData, ProjectileBehavior _behavior, ProjectilePool poolToUse)
 {
     owningPool     = poolToUse;
     transform      = gameObject.transform;
     projectileData = _projectileData;
 }
Exemplo n.º 25
0
 public void Register(ProjectileBehavior projectile)
 {
     projectile.destructTime = timer + persistTime;
     queue.Enqueue(projectile);
 }
 private void Start()
 {
     projectileBehavior = GetComponent <ProjectileBehavior>();
     projectileBehavior.onProjectileTriggerEnter += DamageOther;
 }
Exemplo n.º 27
0
    public override void Fire()
    {
        ProjectileBehavior bulletInstance = Instantiate(bullet, nozzle.position, transform.rotation).GetComponent <ProjectileBehavior>();

        bPlayer.ServerUseMana(abCost);
    }
Exemplo n.º 28
0
    void HandleAttack()
    {
        if (isAttacking && !startedAttack)  //trying to attack, start of new attack
        {
            myAnim.SetBool("isAttacking", true);
            chargeTimer   = chargeDelay;
            startedAttack = true;
        }
        else if (isAttacking && startedAttack && chargeTimer <= 0 && chargeEffectInstance == null) //still charging, timer done, no charge made, make charge effect
        {
            chargeEffectInstance = Instantiate(chargeEffect, transform);
            float x, y;
            if (myAnim.GetInteger("Vertical") > 0)
            {
                x = chargePositionU.transform.localPosition.x;
                y = chargePositionU.transform.localPosition.y;
            }
            else
            {
                x = chargePositionD.transform.localPosition.x;
                y = chargePositionD.transform.localPosition.y;
            }
            if (mySprite.flipX)
            {
                x = -x;
            }
            chargeEffectInstance.transform.localPosition = new Vector3(x, y, 0);
            audioMan.playSFX("ready", transform.position);
        }
        else if (!isAttacking && startedAttack) //execute attack
        {
            //calculate direction to attack
            float x;
            if (mySprite.flipX)
            {
                x = 1;
            }
            else
            {
                x = -1;
            }
            Vector3 attackDirection = new Vector3(x, myAnim.GetInteger("Vertical"), 0);
            attackDirection.Normalize();

            if (projectile == null) //melee character
            {
                GameObject        go  = Instantiate(hitEffect, transform.position, Quaternion.identity);
                ExplosionBehavior exp = go.GetComponent <ExplosionBehavior>();

                //set position
                exp.transform.position += attackDirection * 0.5f;

                //tag it
                exp.tag = tag;

                //set damage
                if (chargeTimer > 0) //early attack
                {
                    exp.damage = baseDamage;
                }
                else //charged attack
                {
                    exp.damage = Mathf.RoundToInt(baseDamage * chargeMultiplier);
                }
                exp.Eval();
            }
            else //projectile character
            {
                //try to get input direction
                if (dirInput.magnitude > 0)
                {
                    attackDirection = new Vector3(dirInput.x, dirInput.y, 0).normalized;
                }

                GameObject         go = Instantiate(projectile, transform.position, Quaternion.FromToRotation(projectile.transform.right, attackDirection));
                ProjectileBehavior pb = go.GetComponent <ProjectileBehavior>();

                //setposition
                go.transform.position += attackDirection * 0.5f;;

                //make sure it is tagged right
                go.tag = tag;

                //set damage & velocity
                if (chargeTimer > 0) //early attack
                {
                    pb.damage = baseDamage;
                    pb.init(attackDirection * arrowSpeed);
                }
                else //charged attack
                {
                    pb.damage = Mathf.RoundToInt(baseDamage * chargeMultiplier);
                    pb.init(attackDirection * arrowSpeed * chargeMultiplier);
                }
            }

            //set anim
            myAnim.SetBool("isAttacking", false);

            //finish chargeffect
            if (chargeEffectInstance != null)
            {
                chargeEffectInstance.GetComponent <Animator>().SetTrigger("done");
            }

            //reset bool
            startedAttack = false;
        }
        //else shouuld be no change, let timers tick
    }
 private void Start()
 {
     thisProjectile = GetComponent <ProjectileBehavior>();
     thisProjectile.onProjectileCollision += Explode;
 }
Exemplo n.º 30
0
 public void SetupProjectile(GameObject gameObjectToAttachTo)
 {
     m_ProjectileBehavior = AttachProjectileBehaviorTo(gameObjectToAttachTo);
     m_ProjectileBehavior.SetProjectileConfig(this);
 }