Exemplo n.º 1
0
 public override bool Cast(BoardTarget target, DeckManager manager)
 {
     if (manager.energy < cost)
     {
         manager.Alert("Not enough energy!");
         return(false);
     }
     if (target == null)
     {
         manager.Alert("Must target the board!");
         return(false);
     }
     if (target.unit != null)
     {
         manager.Alert("Space is already occupied!");
         return(false);
     }
     else
     {
         if (this.target == Target.Spawn && !Utils.Vector3InBox(manager.transform.position, manager.spawnPositionLimit, target.transform.position))
         {
             manager.Alert("Can only be spawned on the homerow!");
             return(false);
         }
         manager.energy -= cost;
         Instantiate(unit, target.transform.position, Quaternion.identity).Setup(manager, target);
         return(true);
     }
 }
Exemplo n.º 2
0
 public override bool Cast(BoardTarget target, DeckManager manager)
 {
     if (manager.energy < cost)
     {
         manager.Alert("Not enough energy!");
         return(false);
     }
     if (target == null || target.unit == null)
     {
         manager.Alert("Invalid target!");
         return(false);
     }
     if (target.unit.team == manager)
     {
         manager.Alert("Target is friendly!");
         return(false);
     }
     if ((target.transform.localPosition - target.transform.parent.InverseTransformPoint(manager.transform.position)).sqrMagnitude > 1.8f)
     {
         manager.Alert("Target is too far away!");
         return(false);
     }
     if (damage < 0)
     {
         target.unit.Heal(-damage);
     }
     else
     {
         target.unit.Damage(damage);
     }
     manager.AddAtRandom(this);
     manager.energy -= cost;
     return(true);
 }
Exemplo n.º 3
0
 public override bool Cast(BoardTarget target, DeckManager manager)
 {
     if (manager.energy < cost)
     {
         manager.Alert("Not enough energy!");
         return(false);
     }
     if (target == null || target.unit == null)
     {
         manager.Alert("Invalid target!");
         return(false);
     }
     else
     {
         if (target.unit.team == manager)
         {
             manager.Alert("Target is friendly!");
             return(false);
         }
         target.unit.moveDist = Mathf.Max(1.1f, target.unit.moveDist * 0.6f);
         if (damage < 0)
         {
             target.unit.Heal(-damage);
         }
         else
         {
             target.unit.Damage(damage);
         }
         manager.Discard(this);
         manager.energy -= cost;
         return(true);
     }
 }
Exemplo n.º 4
0
    private void OnBeginDrag(PointerEventData eventData)
    {
        if (!manager.interactable || manager.energy < card.cost)
        {
            if (!manager.interactable)
            {
                manager.Alert("Not your turn!");
            }
            else
            {
                manager.Alert("Not enough energy!");
            }
            dragging      = false;
            line1.enabled = false;
            line2.enabled = false;
            manager.board.Unlight();
        }
        dragging      = true;
        line1.enabled = true;
        line2.enabled = true;
        var pos = Utils.GetGroundIntersect(cam.ScreenPointToRay(transform.position * 1.05f), 2f);

        line1.SetPosition(0, pos);
        line1.SetPosition(1, pos);
        line2.SetPosition(0, pos);
        line2.SetPosition(1, pos);
        switch (card.target)
        {
        case BaseCard.Target.Empty:
            manager.board.Highlight((BoardTarget b) => b.unit == null);
            break;

        case BaseCard.Target.Global:
            manager.board.Highlight((_) => true);
            break;

        case BaseCard.Target.Enemy:
            manager.board.Highlight((BoardTarget b) => b.unit != null && b.unit.team != manager);
            break;

        case BaseCard.Target.Friendly:
            manager.board.Highlight((BoardTarget b) => b.unit?.team == manager);
            break;

        case BaseCard.Target.Spawn:
            manager.board.Highlight((BoardTarget b) => b.unit == null && Utils.Vector3InBox(manager.transform.position, manager.spawnPositionLimit, b.transform.position));
            break;
        }
    }
Exemplo n.º 5
0
 public override bool Cast(BoardTarget target, DeckManager manager)
 {
     if (manager.energy < cost)
     {
         manager.Alert("Not enough energy!");
         return(false);
     }
     foreach (var b in target.board.targets)
     {
         if (b.unit != null && (b.transform.localPosition - target.transform.localPosition).sqrMagnitude < radius * radius)
         {
             if (damage < 0)
             {
                 b.unit.Heal(-damage);
             }
             else
             {
                 b.unit.Damage(damage);
             }
         }
     }
     manager.Discard(this);
     manager.energy -= cost;
     return(true);
 }
Exemplo n.º 6
0
 public override bool Cast(BoardTarget target, DeckManager manager)
 {
     if (manager.energy < cost)
     {
         manager.Alert("Not enough energy!");
         return(false);
     }
     if (discard)
     {
         var hand = manager.handTransform.GetComponentsInChildren <CardUI>();
         num = hand.Length;
         foreach (var c in hand)
         {
             manager.Discard(c.card);
             Destroy(c.gameObject);
         }
     }
     else
     {
         manager.Discard(this);
     }
     for (int i = 0; i < num; i++)
     {
         manager.DrawToHand();
     }
     manager.energy -= cost;
     return(true);
 }
Exemplo n.º 7
0
    public bool Move(BoardTarget target)
    {
        if (target == null)
        {
            return(false);
        }
        if (!team.interactable)
        {
            team.Alert("Not your unit or not your turn!");
            return(false);
        }
        var sqrDist = (target.transform.localPosition - location.transform.localPosition).sqrMagnitude;

        if (target.unit != null)
        {
            if (target.unit.team == team)
            {
                team.Alert("Space already occupied!");
                return(false);
            }
            else if (sqrDist <= attackDist * attackDist)
            {
                hasMoved = true;
                AttackFX(target.transform.position);
                if (target.unit.Damage(damage) && sqrDist <= moveDist * moveDist)
                {
                    StopAllCoroutines();
                    StartCoroutine(Utils.LerpMoveTo(transform, target.transform.position));
                    if (location.unit == this)
                    {
                        location.unit = null;
                    }
                    target.unit = this;
                    location    = target;
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                team.Alert("Target is too far away!");
                return(false);
            }
        }
        else if (sqrDist <= moveDist * moveDist)
        {
            hasMoved = true;
            StopAllCoroutines();
            StartCoroutine(Utils.LerpMoveTo(transform, target.transform.position));
            target.unit = this;
            if (location.unit == this)
            {
                location.unit = null;
            }
            location = target;
            return(true);
        }
        else
        {
            team.Alert("Cannot move that far!");
            Debug.Log("dist: " + sqrDist);
        }
        return(false);
    }