Inheritance: MonoBehaviour, ISkill
 public void OnTap(Point point)
 {
     if (_skill != null && _skill.InRange(point)) {
         _skill.Owner.FireActiveSkill();
         _skill = null;
     }
 }
    private void OnSkillActivated(Combatant combatant, ISkill skill)
    {
        // Unbind delegates from old skill
        if (_ranged != null) {
            _ranged.TargetChanged -= OnTargetChanged;
        } else if (_directional != null) {
            _directional.DirectionChanged -= OnDirectionChanged;
        }

        // Figure out origin from ActionQueue
        PawnAction lastAction = _combatant.LastAction;
        _origin = (lastAction == null) ? _combatant.Position : lastAction.PostRunPosition;

        // Figure out what kind of skill it is
        _ranged = skill as RangedSkill;
        _directional = skill as DirectionalSkill;

        // Bind delegates to new skill
        if (_ranged != null) {
            _ranged.TargetChanged += OnTargetChanged;
            OnTargetChanged(_ranged.Target);
        } else if (_directional != null) {
            _directional.DirectionChanged += OnDirectionChanged;
            OnDirectionChanged(_directional.Direction);
        }
    }
示例#3
0
 public void Setup(Vector3 direction, float moveSpeed, RangedSkill skill)
 {
     this.direction        = direction;
     this.skill            = skill;
     transform.eulerAngles = new Vector3(0, 0, UtilsClass.GetAngleFromVectorFloat(direction));
     Destroy(gameObject, 5f);
 }
	public void startBehaviour(Character caster, RangedSkill skill){
		this.caster = caster;
		this.skill = skill;

		damageType = skill.damageType;
		damage = skill.damage;
		casterType = caster.GetType ();
	}
示例#5
0
        public override void Initialize(ContentManager contentLoader, ComponentManifest manifest)
        {
            string            skillAssetName = (string)(manifest.Properties[ManifestKeys.RANGED_SKILL_ASSET_NAME]);
            ComponentManifest weaponManifest = contentLoader.Load <ComponentManifest>(Path.Combine("skills", skillAssetName));
            Type weaponType = Type.GetType(weaponManifest.TypeFullName);

            object[] basicCtorParams = new object[] { Owner.Id };
            RangedSkill = Activator.CreateInstance(weaponType, basicCtorParams) as BipedWeapon;
            RangedSkill.Initialize(contentLoader, weaponManifest);

            skillAssetName = (string)(manifest.Properties[ManifestKeys.MELEE_SKILL_ASSET_NAME]);
            weaponManifest = contentLoader.Load <ComponentManifest>(Path.Combine("skills", skillAssetName));
            weaponType     = Type.GetType(weaponManifest.TypeFullName);
            MeleeSkill     = Activator.CreateInstance(weaponType, basicCtorParams) as BipedWeapon;
            MeleeSkill.Initialize(contentLoader, weaponManifest);
        }
示例#6
0
 private Skill CreateItemSkill(string skillName)
 {
     if (skillName == "orb")
     {
         return(new RangedSkill("orb", stats, pfOrb, UtilsClass.GetMousePosition2D()));
     }
     if (skillName == "rock")
     {
         var sk = new RangedSkill("rock", stats, pfRock, UtilsClass.GetMousePosition2D());
         sk.damage = 3f;
         return(sk);
     }
     if (skillName == "arrow")
     {
         var sk = new RangedSkill("arrow", stats, pfArrow, UtilsClass.GetMousePosition2D());
         sk.damage = 3.5f;
         return(sk);
     }
     else
     {
         Error("skill not found");
         return(null);
     }
 }
 private void OnSkillDeactivated(Combatant combatant, ISkill skill)
 {
     _gridField.ClearPoints();
     _gridField.RebuildMesh();
     _ranged = null;
     _directional = null;
 }
 public void StartTargeting(ISkill skill)
 {
     _skill = (RangedSkill)skill;
 }
示例#9
0
 // Show the overlay for the Ranged skill, allowing the player to target a hex
 public void ShowRangedSkillOverlay(RangedSkill skill)
 {
     _currentAction = ActionType.Skill;
     _currentSkill = skill;
     var inRangeTiles = BoardManager.GetTilesInRange(_currentCharacter.X, _currentCharacter.Y, skill.Range);
     OverlayManager.InstantiateOverlays(inRangeTiles);
 }
	// Use this for initialization
	void Start () {
		skill = gameObject.transform.parent.gameObject.GetComponent<ParticleBehavior> ().skill;
		caster = skill.caster;
		casterType = caster.gameObject.GetComponent<Character> ().GetType ();
	}
示例#11
0
    private void Update()
    {
        if (type == AttackType.Ranged && wasAttacking && !animator.GetCurrentAnimatorStateInfo(0).IsName("Attack"))
        {
            // todo add spellruntime to enemies
            if (!gameObject.name.StartsWith("Witch"))
            {
                var ranged = new RangedSkill("projectile", stats, projectile, player.position);
                ranged.damage    = projectileDamage;
                ranged.moveSpeed = projectileSpeed;
                ranged.cast();
            }
            else
            {
                var skill = new MorphSkill("morph", stats, projectile, player.position, morph);
                skill.damage    = projectileDamage;
                skill.moveSpeed = projectileSpeed;
                skill.cast();
            }
        }
        wasAttacking = animator.GetCurrentAnimatorStateInfo(0).IsName("Attack");

        // Movement
        if (Vector3.Distance(transform.position, target.position) < findRange)
        {
            if (type != AttackType.Ranged || !animator.GetCurrentAnimatorStateInfo(0).IsName("Attack"))
            {
                ag.SetDestination(new Vector3(target.position.x, target.position.y, transform.position.z));
                ag.speed = stats.GetSpeed();
            }
            else
            {
                ag.SetDestination(transform.position);
                ag.speed = 0f;
            }
        }

        bool isClose = Vector3.Distance(transform.position, player.position) < (type == AttackType.Melee ? hitRange : findRange);

        if (timeSinceLast >= 0)
        {
            timeSinceLast -= Time.deltaTime;
        }
        if (isClose)
        {
            if (type == AttackType.Ranged)
            {
                if (timeSinceLast <= 0)
                {
                    // cast orb but not here, after attack animation ended
                    animator.SetBool("Attacking", true);
                    timeSinceLast = cooldown;
                }
                else
                {
                    if (animator.GetCurrentAnimatorStateInfo(0).IsName("Attack"))
                    {
                        animator.SetBool("Attacking", false);
                    }
                }
            }
            else if (type == AttackType.Melee)
            {
                animator.SetBool("Attacking", isClose);
            }
        }
        else if (type == AttackType.Melee)
        {
            animator.SetBool("Attacking", false);
        }

        animator.SetBool("Moving", ag.velocity.x != 0 || ag.velocity.y != 0);
        bool sign = ag.velocity.x == 0 ? transform.eulerAngles.y == 180 || (player.position.x < transform.position.x) : ag.velocity.x < 0;

        transform.rotation = Quaternion.Euler(new Vector3(transform.eulerAngles.x, sign ? 180 : 0, transform.eulerAngles.z));
    }
示例#12
0
 public override void Release()
 {
     RangedSkill.Release();
     MeleeSkill.Release();
 }