Ejemplo n.º 1
0
        protected void AddTargetedProjectile(string name, AttackableUnit target, bool serverOnly = false)
        {
            var record         = SpellRecord.GetSpell(name);
            var position       = new Vector3(Owner.Position.X, Owner.Position.Y, 100);
            var casterPosition = new Vector3(Owner.Position.X, Owner.Position.Y, 100);
            var angle          = Geo.GetAngle(Owner.Position, target.Position);
            var direction      = Geo.GetDirection(angle);
            var velocity       = new Vector3(1, 1, 1) * 100;
            var startPoint     = new Vector3(Owner.Position.X, Owner.Position.Y, 100);
            var endPoint       = new Vector3(target.Position.X, target.Position.Y, 100);


            var targetedProjectile = new TargetedProjectile(Owner.Game.NetIdProvider.PopNextNetId(),
                                                            Owner, target, startPoint.ToVector2(), SpellRecord.MissileSpeed, OnProjectileReach);

            Owner.Game.AddUnitToTeam(targetedProjectile, Owner.Team.Id);
            Owner.Game.Map.AddUnit(targetedProjectile);

            if (!serverOnly)
            {
                var castInfo = Spell.GetCastInformations(position, endPoint, name, targetedProjectile.NetId, new AttackableUnit[] { target });

                Owner.Game.Send(new SpawnProjectileMessage(targetedProjectile.NetId, position, casterPosition,
                                                           direction.ToVector3(), velocity, startPoint, endPoint, casterPosition,
                                                           0, record.MissileSpeed, 1f, 1f, 1f, false, castInfo));
            }
        }
Ejemplo n.º 2
0
        private void OnReach(AttackableUnit target, Projectile projectile)
        {
            if (Target.Alive)
            {
                InflictDamages();
            }

            Unit.GetAttackManager <RangedManager>().RemoveProjectile(Projectile);
            Projectile = null;
        }
Ejemplo n.º 3
0
    private bool CheckSpellCastType(Unit caster, Spell spell, SpellData spellData)
    {
        switch (spellData.spellCastType)
        {
        case SpellCastType.Casted:
            if (caster.Character.SpellCast.HasCast)
            {
                return(false);
            }
            else
            {
                caster.Character.SpellCast = new SpellCast(spell, spellData, caster, caster.Character.target);
                ApplyGlobalCooldown(caster, spell, spellData);
                caster.Animator.SetBool("Casting", true);
                return(true);
            }

        case SpellCastType.Instant:
            if (caster.Character.SpellCast.HasCast)
            {
                return(false);
            }
            else
            {
                if (spellData.spellProjectileName != null)
                {
                    GameObject effect = Instantiate(Resources.Load("Prefabs/Spells/" + spellData.spellProjectileName), caster.castPoint != null ? caster.castPoint.position :
                                                    new Vector3(caster.transform.position.x, caster.transform.position.y + caster.GetComponent <Collider2D>().bounds.size.y * 3 / 4, caster.transform.position.z),
                                                    Quaternion.identity) as GameObject;

                    TargetedProjectile projectile = effect.GetComponent <TargetedProjectile>();
                    projectile.Initialize(this, caster, caster.character.target, spell);
                    effect.transform.parent = Effects.transform;
                    ApplyGlobalCooldown(caster, spell, spellData);
                    spell.spellCooldown.Apply();
                    caster.Animator.SetTrigger("InstantAttack");

                    GameObject skillUseEvent = MonoBehaviour.Instantiate(Resources.Load("Prefabs/UI/SkillUseEvent")) as GameObject;
                    skillUseEvent.GetComponent <SkillUseUIEvent>().Initialize(spellData, caster, PlayerInterface);
                    return(false);
                }

                ApplyGlobalCooldown(caster, spell, spellData);
                spell.spellCooldown.Apply();
                caster.Animator.SetTrigger("InstantAttack");
                return(true);
            }
        }
        return(false);
    }
Ejemplo n.º 4
0
        private void CastProjectile()
        {
            SpellRecord basicAttackRecord = Unit.Record.BasicAttack;

            if (basicAttackRecord == null)
            {
                logger.Write("No basic attack data for unit " + Unit.Name, MessageState.WARNING);
                return;
            }
            if (basicAttackRecord.MissileSpeed == 0)
            {
                logger.Write("We wont spawn a projectile with 0 speed!", MessageState.WARNING);
                return;
            }
            this.Projectile = new TargetedProjectile(Unit.Game.NetIdProvider.PopNextNetId(), Unit, Target, Unit.Position, basicAttackRecord.MissileSpeed, OnReach);
            Unit.GetAttackManager <RangedManager>().AddProjectile(Projectile);
        }
Ejemplo n.º 5
0
    public bool SpellCastFinished(SpellCast spellCast)
    {
        SpellData spellData = SpellLibrary.GetSpell(spellCast.spell.id);
        Spell     spell = spellCast.spell; Unit caster = spellCast.caster;
        Unit      target = spellCast.target;

        if (spellData.effectName != null)
        {
            GameObject effect = Instantiate(Resources.Load("Prefabs/Spells/" + spellData.effectName), new Vector3(caster.transform.position.x,
                                                                                                                  caster.transform.position.y, caster.transform.position.z), caster.transform.rotation) as GameObject;
            effect.transform.parent = Effects.transform;
        }
        if (spellData.castSoundName != null)
        {
            AudioClip audio = Resources.Load <AudioClip>(spellData.castSoundName);
            AudioSource.PlayClipAtPoint(audio, caster.transform.position);
        }


        if (spellData.spellProjectileName != null)
        {
            GameObject effect = Instantiate(Resources.Load("Prefabs/Spells/" + spellData.spellProjectileName), caster.castPoint != null ? caster.castPoint.position :
                                            new Vector3(caster.transform.position.x, caster.transform.position.y + caster.GetComponent <Collider2D>().bounds.size.y * 3 / 4, caster.transform.position.z),
                                            Quaternion.identity) as GameObject;
            TargetedProjectile projectile = effect.GetComponent <TargetedProjectile>();
            projectile.Initialize(this, caster, target, spell);
            effect.transform.parent = Effects.transform;
            caster.Animator.SetTrigger("InstantAttack");
            caster.Animator.SetBool("Casting", false);
            return(true);
        }

        if (spellData.hitSoundName != null)
        {
            AudioClip audio = Resources.Load <AudioClip>(spellData.hitSoundName);
            AudioSource.PlayClipAtPoint(audio, caster.transform.position);
        }

        ApplySpell(caster, target, spell, spellData);
        caster.Animator.SetTrigger("InstantAttack");
        caster.Animator.SetBool("Casting", false);
        return(true);
    }
Ejemplo n.º 6
0
 public void RemoveProjectile(TargetedProjectile projectile)
 {
     this.Projectiles.Remove(projectile);
 }
Ejemplo n.º 7
0
 public void AddProjectile(TargetedProjectile projectile)
 {
     this.Projectiles.Add(projectile);
 }