/*
     * @name    HaloGlow
     * @purpose this is called to set the glow to the correct placement holder on the player canvas
     *
     * @return  Void
     */
    public void HaloGlow(string pGameObjectPlacement)
    {
        //takes the parameter and find the correct palcement area
        FindPlacement = GameObject.Find(pGameObjectPlacement);
        PlacementHalo = FindPlacement.GetComponent("Halo");                                     //gets the halo component

        if (PlacementHalo != null && DiscardHalo != null)                                       //just to make sure there is actually a halo component
        {
            PlacementHalo.GetType().GetProperty("enabled").SetValue(PlacementHalo, true, null); //sets the glow to true
            if (GameManager.Instance.Person.CardDiscarded == false)
            {
                DiscardHalo.GetType().GetProperty("enabled").SetValue(DiscardHalo, true, null); //sets the glow
            }
        }
    }
 /*
  * @name    DisableHaloGlow()
  * @purpose Once the dragged object is dropped all glowing halos are turned off. this is called at the on end drag method
  *
  * @return  Void
  */
 public void DisableHaloGlow()
 {
     if (RequirementsWork == false && DiscardHalo != null)
     {
         DiscardHalo.GetType().GetProperty("enabled").SetValue(DiscardHalo, false, null); //sets the glow to false
     }
     else if (DraggedInstance == null)
     {
         if (PlacementHalo != null)
         {
             PlacementHalo.GetType().GetProperty("enabled").SetValue(PlacementHalo, false, null); //sets the glow to false
         }
         if (DiscardHalo != null)
         {
             DiscardHalo.GetType().GetProperty("enabled").SetValue(DiscardHalo, false, null); //sets the glow to false
         }
     }
 }
    /*
     * @name    OnBeginDrag
     * @purpose Once you begin draging requirements are checked and halos are assigned
     *
     * @return  Void
     */
    public void OnBeginDrag(PointerEventData eventData)
    {
        //this instantiates an game object of the class to use as an object and access methods
        //creates a gameobjects
        ReqGO = new GameObject("Req");
        //assigns the script to the game object
        ReqGO.AddComponent <Requirements>();
        //assigns the game object to the script withe the game object
        Req = GameObject.Find("Req").GetComponent <Requirements>();

        ParentReturn = this.transform.parent; //gets original parent panel - the hand
        //this makes sure the current card being draggeds return is the hand
        this.transform.SetParent(this.transform.parent.parent);

        /**** CODE BELOW USED FOR MOUSE MOVEMENT AND DRAGGING ****/
        if (Input.touchCount > 1)
        {
            return;
        }

        DraggedInstance    = gameObject; //determines initial positiong of the cards
        _startPosition     = transform.position;
        _zDistanceToCamera = Mathf.Abs(_startPosition.z - Camera.main.transform.position.z);

        _offsetToMouse = _startPosition - Camera.main.ScreenToWorldPoint(
            new Vector3(Input.mousePosition.x, Input.mousePosition.y, _zDistanceToCamera));

        DraggedInstance.layer = 2; //sets the layer to ignore raycast

        gameObject.GetComponent <SpriteRenderer>().sortingOrder = 10;

        CardAction = DraggedInstance.GetComponent <Actions>(); //to access the actions scripts

        /**** CODE BELOW USED TO MAKE THE CORRECT HALO GLOW FOR THE PLACEMENTS ****/
        /**** USES A LOT OF IF STATEMENTS BUT MAKES IT A LITTLE EASIER TO UNDERSTAND WITH JUST USING ONE TYPE VARIABLE ****/
        SceneCheck = GameObject.Find("Game Board Container/Player Board").GetComponent <CanvasGroup>(); //need this to check the alpha

        //this is used so many time so i just took it out and pout it up here to organize
        DiscardPlacement = GameObject.Find(GameManager.Instance.Person.DiscardGameObject); //gets discard placement
        DiscardHalo      = DiscardPlacement.GetComponent("Halo");                          //gets discard halo component

        if (SceneCheck.alpha == 1)                                                         //if this is not 1 it means that the player board is not the visible one
        {
            //this is where the requirements will be checked
            //loop through each card in the human hand
            for (int z = 0; z < GameManager.Instance.Person.Hand.Count; z++)
            {
                //if the current card being dagged matches the card in the hand
                if (gameObject.name == GameManager.Instance.Person.Hand[z].CardName) //finds the card you are working with
                {
                    //part of requirement checking
                    bool executeReqs = true;                                         //to handle executing the reqs

                    if (GameManager.Instance.Person.Hand[z].CardType == "Condition") //determines if the standing action for the explorer is active
                    {
                        if (GameManager.Instance.Person.NoConditionRequirements == true)
                        {
                            executeReqs = false;
                        }
                    }

                    //this is the basic requirement check routine
                    if (executeReqs == true)
                    {
                        //if the card has requrements associated with it
                        if (GameManager.Instance.Person.Hand[z].ReqID.Count != 0)
                        {
                            //calls the method in requirements and passes in the current card being draged and the current object player
                            //and gets a true/false value to determine if requirements work
                            if (Req.RequirementCheck(GameManager.Instance.Person.Hand[z], GameManager.Instance.Person.CurrentPlayer) == true)
                            {
                                RequirementsWork = true;
                            }
                            //if the requirements dont work then set the bool
                            else
                            {
                                RequirementsWork = false;
                            }
                        }
                        //if the card has no rewuirements associated with it then continue
                        else
                        {
                            RequirementsWork = true; //allows it to be played
                            break;
                        }
                    }
                    else if (executeReqs == false) //so if there is no need to execute the requirements due to actions, will just say they are true
                    {
                        RequirementsWork = true;
                    }
                }
            }

            /*********************************************************************************************************/
            //From here on enables the halo glows
            if (RequirementsWork == true)                                        //if the requirements work
            {
                for (int j = 0; j < GameManager.Instance.Person.Hand.Count; j++) //the for loop is used to just go through the hand and find the right card
                {
                    //will check the name of the game object with the hand to get the correct index
                    if (gameObject.name == GameManager.Instance.Person.Hand[j].CardName)
                    {
                        CType = GameManager.Instance.Person.Hand[j].CardType; //stores the card type for future use
                    }

                    //will go through each card type and check to see if the halo should light up
                    if (CType == "Region")
                    {
                        HaloGlow(GameManager.Instance.Person.RegionGameObject);
                    }
                    else if (CType == "Condition")
                    {
                        HaloGlow(GameManager.Instance.Person.ConditionGameObject);
                    }
                    else if (CType == "Plant")
                    {
                        HaloGlow(GameManager.Instance.Person.PlantGameObject);
                    }
                    else if (CType == "Invertebrate")
                    {
                        HaloGlow(GameManager.Instance.Person.InvertebrateGameObject);
                    }
                    else if (CType == "Animal")
                    {
                        HaloGlow(GameManager.Instance.Person.AnimalGameObject);
                    }
                    else if (CType == "Special Region")
                    {
                        HaloGlow(GameManager.Instance.Person.SpecialRegionGameObject);
                    }
                    else if (CType == "Multi-Player")
                    {
                        HaloGlow(GameManager.Instance.Person.MultiplayerGameObject);
                    }
                    else if (CType == "Human")
                    {
                        HaloGlow(GameManager.Instance.Person.HumanGameObject);
                    }
                    else if (CType == "Microbe")
                    {
                        HaloGlow(GameManager.Instance.Person.MicrobeGameObject);
                    }
                    else if (CType == "Fungi")
                    {
                        HaloGlow(GameManager.Instance.Person.FungiGameObject);
                    }
                }
            }
            else if (GameManager.Instance.Person.CardDiscarded == false)                        //discard pile should still work
            {
                DiscardHalo.GetType().GetProperty("enabled").SetValue(DiscardHalo, true, null); //sets the glow
            }
        }
    }