// method to create a new creature and add it to the table
    public void AddCreatureAtIndex(CardAsset ca, int UniqueID, int index)
    {
        // create a new creature from prefab
        GameObject creature = Instantiate(GlobalSettings.Instance.CreaturePrefab, slots.Children[index].transform.position, Quaternion.identity) as GameObject;

        // apply the look from CardAsset
        OneCreatureManager manager = creature.GetComponent <OneCreatureManager>();

        manager.cardAsset = ca;
        manager.ReadCreatureFromAsset();

        // add tag according to owner
        foreach (Transform t in creature.GetComponentsInChildren <Transform>())
        {
            t.tag = owner.ToString() + "Creature";
        }

        // parent a new creature gameObject to table slots
        creature.transform.SetParent(slots.transform);

        // add a new creature to the list
        CreaturesOnTable.Insert(index, creature);

        // let this creature know about its position
        WhereIsTheCardOrCreature w = creature.GetComponent <WhereIsTheCardOrCreature>();

        w.Slot = index;
        if (owner == AreaPosition.Bottom)
        {
            w.VisualState = VisualStates.BottomTable;
        }
        else
        {
            w.VisualState = VisualStates.TopTable;
        }

        // add our unique ID to this creature
        IDHolder id = creature.AddComponent <IDHolder>();

        id.uniqueID = UniqueID;

        // after a new creature is added update placing of all the other creatures
        ShiftSlotsGameObjectAccordingToNumberOfCreatures();
        PlaceCreaturesOnNewSlots();
        w.SetTableSortingOrder();

        // Angle monster appropriately
        creature.transform.rotation = creature.transform.parent.parent.rotation;

        // end command execution
        Command.CommandExecutionComplete();

        DebugManager.Instance.DebugMessage(string.Format("{0} player played {1} on their field!", owner, ca.name), DebugManager.MessageType.Game, creature);
    }
Exemple #2
0
    public override void OnEndDrag()
    {
        _target = null;
        var hits = Physics.RaycastAll(origin: Camera.main.transform.position,
                                      direction: (-Camera.main.transform.position + this.transform.position).normalized,
                                      maxDistance: 30f);

        foreach (RaycastHit h in hits)
        {
            if ((h.transform.tag == "TopPlayer" && this.tag == "LowCreature") ||
                (h.transform.tag == "LowPlayer" && this.tag == "TopCreature"))
            {
                _target = h.transform.gameObject;
            }
            else if ((h.transform.tag == "TopCreature" && this.tag == "LowCreature") ||
                     (h.transform.tag == "LowCreature" && this.tag == "TopCreature"))
            {
                _target = h.transform.parent.gameObject;
            }
        }

        bool targetValid = false;

        if (_target != null)
        {
            int targetID = _target.GetComponent <IDHolder>().UniqueID;

            if (targetID == GlobalSettings.Instance.LowPlayer.PlayerID || targetID == GlobalSettings.Instance.TopPlayer.PlayerID)
            {
                CreatureLogic.CreaturesCreatedThisGame[GetComponentInParent <IDHolder>().UniqueID].GoFace();
                targetValid = true;
            }
            else if (CreatureLogic.CreaturesCreatedThisGame[targetID] != null)
            {
                targetValid = true;
                CreatureLogic.CreaturesCreatedThisGame[GetComponentInParent <IDHolder>().UniqueID].AttackCreatureWithID(targetID);
            }
        }

        if (!targetValid)
        {
            _whereIsThisCreature.VisualState = tag.Contains("Low") ? VisualStates.LowTable : VisualStates.TopTable;
            _whereIsThisCreature.SetTableSortingOrder();
        }

        transform.localPosition = Vector3.zero;
        _sr.enabled             = false;
        _lr.enabled             = false;
        _triangleSr.enabled     = false;
    }
Exemple #3
0
    public void AttackTarget(int targetUniqueID, int damageTakenByTarget, int damageTakenByAttacker, int attackerHealthAfter, int targetHealthAfter)
    {
        Debug.Log(targetUniqueID);
        manager.CanAttackNow = false;
        GameObject target = IDHolder.GetGameObjectWithID(targetUniqueID);

        // bring this creature to front sorting-wise.
        w.BringToFront();
        VisualStates tempState = w.VisualState;

        w.VisualState = VisualStates.Transition;

        transform.DOMove(target.transform.position, 0.5f).SetLoops(2, LoopType.Yoyo).SetEase(Ease.InCubic).OnComplete(() =>
        {
            if (damageTakenByTarget > 0)
            {
                DamageEffect.CreateDamageEffect(target.transform.position, damageTakenByTarget);
            }
            if (damageTakenByAttacker > 0)
            {
                DamageEffect.CreateDamageEffect(transform.position, damageTakenByAttacker);
            }

            if (targetUniqueID == GlobalSettings.Instance.LowPlayer.PlayerID || targetUniqueID == GlobalSettings.Instance.TopPlayer.PlayerID)
            {
                // target is a player
                target.GetComponent <PlayerPortraitVisual>().HealthText.text = targetHealthAfter.ToString();
            }
            else
            {
                target.GetComponent <CreatureManager>().HealthText.text = targetHealthAfter.ToString();
            }

            w.SetTableSortingOrder();
            w.VisualState = tempState;

            manager.HealthText.text = attackerHealthAfter.ToString();
            Sequence s = DOTween.Sequence();
            s.AppendInterval(1f);
            s.OnComplete(Command.CommandExecutionComplete);
            //Command.CommandExecutionComplete();
        });
    }
    public void AttackTarget(int targetUniqueID, int damageTakenByTarget, int damageTakenByAttacker, int attackerHealthAfter, int targetHealthAfter)
    {
        Debug.Log(targetUniqueID);                                        //wypisuje na konsoli ID karty
        manager.CanAttackNow = false;                                     //po wyłożeniu karty blokuje możliwość ataku daną kartą
        GameObject target = IDHolder.GetGameObjectWithID(targetUniqueID); //przypisuje

        // przypisz temu stworowi pierwszeństwo
        w.BringToFront();
        VisualStates tempState = w.VisualState;

        w.VisualState = VisualStates.Transition;

        transform.DOMove(target.transform.position, 0.5f).SetLoops(2, LoopType.Yoyo).SetEase(Ease.InCubic).OnComplete(() =>
        {
            if (damageTakenByTarget > 0)
            {
                DamageEffect.CreateDamageEffect(target.transform.position, damageTakenByTarget);            //tworzenie wyglądu ataku atakującego
            }
            if (damageTakenByAttacker > 0)
            {
                DamageEffect.CreateDamageEffect(transform.position, damageTakenByAttacker);                 //tworzenie wyglądu ataku broniącego się
            }
            if (targetUniqueID == GlobalSettings.Instance.LowPlayer.PlayerID || targetUniqueID == GlobalSettings.Instance.TopPlayer.PlayerID)
            {
                // celem jest gracz
                target.GetComponent <PlayerPortraitVisual>().HealthText.text = targetHealthAfter.ToString();
            }
            else
            {
                target.GetComponent <OneCreatureManager>().HealthText.text = targetHealthAfter.ToString(); //celem jest potwór
            }
            w.SetTableSortingOrder();                                                                      //ustawienie sortowania na stole
            w.VisualState = tempState;                                                                     //przypisuje wartości tymczasowe w danym miejscu

            manager.HealthText.text = attackerHealthAfter.ToString();
            Sequence s = DOTween.Sequence();
            s.AppendInterval(1f);
            s.OnComplete(Command.CommandExecutionComplete);
            //Command.CommandExecutionComplete();
        });
    }
Exemple #5
0
    public override void OnEndDrag()
    {
        if (DebugManager.Instance.showTargeting)
        {
            Debug.Log("<color=purple>Dragging finished.</color>");
        }
        Target = null;
        RaycastHit[] hits;
        // TODO: raycast here anyway, store the results in
        hits = Physics.RaycastAll(origin: Camera.main.transform.position,
                                  direction: (-Camera.main.transform.position + this.transform.position).normalized,
                                  maxDistance: 30f);

        foreach (RaycastHit h in hits)
        {
            if ((h.transform.tag == "TopPlayer" && this.tag == "BottomCreature") ||
                (h.transform.tag == "BottomPlayer" && this.tag == "TopCreature"))
            {
                if (DebugManager.Instance.showTargeting)
                {
                    Debug.Log("<color=purple>Target is opponent.</color>");
                }
                // go face
                Target = h.transform.gameObject;
            }
            else if ((h.transform.tag == "TopCreature" && this.tag == "BottomCreature") ||
                     (h.transform.tag == "BottomCreature" && this.tag == "TopCreature"))
            {
                if (DebugManager.Instance.showTargeting)
                {
                    Debug.Log("<color=purple>Target is an enemy creature.</color>");
                }
                // hit a creature, save parent transform
                Target = h.transform.parent.gameObject;
            }
            else
            {
                if (DebugManager.Instance.showTargeting)
                {
                    Debug.Log("<color=purple>The target couldn't be found.</color>");
                }
            }
        }

        bool targetValid = false;

        if (Target != null)
        {
            int targetID = Target.GetComponent <IDHolder>().uniqueID;
            Debug.Log("Target ID: " + targetID);
            if (targetID == GlobalSettings.Instance.BottomPlayer.PlayerID || targetID == GlobalSettings.Instance.TopPlayer.PlayerID)
            {
                // attack character
                Debug.Log("Attacking " + Target);
                Debug.Log("TargetID: " + targetID);
                CreatureLogic.CreaturesCreatedThisGame[GetComponentInParent <IDHolder>().uniqueID].GoFace();
                targetValid = true;
            }
            else if (CreatureLogic.CreaturesCreatedThisGame[targetID] != null)
            {
                // if targeted creature is still alive, attack creature
                targetValid = true;
                CreatureLogic.CreaturesCreatedThisGame[GetComponentInParent <IDHolder>().uniqueID].AttackCreatureWithID(targetID);
                Debug.Log("Attacking " + Target);
            }
        }

        if (!targetValid)
        {
            // not a valid target, return
            if (tag.Contains("Bottom"))
            {
                whereIsThisCreature.VisualState = VisualStates.BottomTable;
            }
            else
            {
                whereIsThisCreature.VisualState = VisualStates.TopTable;
            }
            whereIsThisCreature.SetTableSortingOrder();
        }

        // return target and arrow to original position
        transform.localPosition = Vector3.zero;
        sr.enabled         = false;
        lr.enabled         = false;
        triangleSR.enabled = false;

        // Dehighlight all
    }
    public override void OnEndDrag()
    {
        Target = null;
        RaycastHit[] hits;
        // TODO: raycast here anyway, store the results in
        hits = Physics.RaycastAll(origin: Camera.main.transform.position,
                                  direction: (-Camera.main.transform.position + this.transform.position).normalized,
                                  maxDistance: 30f);

        foreach (RaycastHit h in hits)
        {
            if ((h.transform.tag == "TopPlayer" && this.tag == "LowCreature") ||
                (h.transform.tag == "LowPlayer" && this.tag == "TopCreature"))
            {
                // go face
                Target = h.transform.gameObject;
            }
            else if ((h.transform.tag == "TopCreature" && this.tag == "LowCreature") ||
                     (h.transform.tag == "LowCreature" && this.tag == "TopCreature"))
            {
                // hit a creature, save parent transform
                Target = h.transform.parent.gameObject;
            }
        }

        bool targetValid = false;

        if (Target != null)
        {
            int targetID = Target.GetComponent <IDHolder>().UniqueID;
            Debug.Log("Target ID: " + targetID);
            if (targetID == GlobalSettings.Instance.LowPlayer.PlayerID || targetID == GlobalSettings.Instance.TopPlayer.PlayerID)
            {
                // attack character
                Debug.Log("Attacking " + Target);
                Debug.Log("TargetID: " + targetID);
                CreatureLogic.CreaturesCreatedThisGame[GetComponentInParent <IDHolder>().UniqueID].GoFace();
                targetValid = true;
            }
            else if (CreatureLogic.CreaturesCreatedThisGame[targetID] != null)
            {
                // if targeted creature is still alive, attack creature
                targetValid = true;
                CreatureLogic.CreaturesCreatedThisGame[GetComponentInParent <IDHolder>().UniqueID].AttackCreatureWithID(targetID);
                Debug.Log("Attacking " + Target);
            }
        }

        if (!targetValid)
        {
            // not a valid target, return
            if (tag.Contains("Low"))
            {
                whereIsThisCreature.VisualState = VisualStates.LowTable;
            }
            else
            {
                whereIsThisCreature.VisualState = VisualStates.TopTable;
            }
            whereIsThisCreature.SetTableSortingOrder();

            //Return Creature down to board after dragging
            //transform.parent.DOMoveZ(0,dragSpeed);
        }

        // return target and arrow to original position
        transform.localPosition = Vector3.zero;
        sr.enabled         = false;
        lr.enabled         = false;
        triangleSR.enabled = false;
    }
Exemple #7
0
    public override void OnEndDrag()
    {
        Target = null;
        RaycastHit[] hits;
        // TODO: Zapisywanie w czymś wyników
        hits = Physics.RaycastAll(origin: Camera.main.transform.position,
                                  direction: (-Camera.main.transform.position + this.transform.position).normalized,
                                  maxDistance: 30f);

        foreach (RaycastHit h in hits)
        {
            if ((h.transform.tag == "TopPlayer" && this.tag == "LowCreature") ||
                (h.transform.tag == "LowPlayer" && this.tag == "TopCreature"))
            {
                Target = h.transform.gameObject;
            }
            else if ((h.transform.tag == "TopCreature" && this.tag == "LowCreature") ||
                     (h.transform.tag == "LowCreature" && this.tag == "TopCreature"))
            {
                // uderzyć stwora, zapisać transformację do rodzica
                Target = h.transform.parent.gameObject;
            }
        }

        bool targetValid = false;

        if (Target != null)
        {
            int targetID = Target.GetComponent <IDHolder>().UniqueID;
            Debug.Log("Target ID: " + targetID);
            if (targetID == GlobalSettings.Instance.LowPlayer.PlayerID || targetID == GlobalSettings.Instance.TopPlayer.PlayerID)
            {
                // Atakuj bastion
                Debug.Log("Attacking " + Target);
                Debug.Log("TargetID: " + targetID);
                CreatureLogic.CreaturesCreatedThisGame[GetComponentInParent <IDHolder>().UniqueID].GoFace();
                targetValid = true;
            }
            else if (CreatureLogic.CreaturesCreatedThisGame[targetID] != null)
            {
                // jeśli docelowe stworzenie wciąż żyje, atakuj stwora
                targetValid = true;
                CreatureLogic.CreaturesCreatedThisGame[GetComponentInParent <IDHolder>().UniqueID].AttackCreatureWithID(targetID);
                Debug.Log("Attacking " + Target);
            }
        }

        if (!targetValid)
        {
            // Jeśli nie jest prawidłowym celem, wróć
            if (tag.Contains("Low"))
            {
                whereIsThisCreature.VisualState = VisualStates.LowTable;
            }
            else
            {
                whereIsThisCreature.VisualState = VisualStates.TopTable;
            }
            whereIsThisCreature.SetTableSortingOrder();
        }

        // powrót strzałki i celu do pierwotnej postaci
        transform.localPosition = Vector3.zero;
        sr.enabled         = false;
        lr.enabled         = false;
        triangleSR.enabled = false;
    }