public override void InitActionNonTerminal()
    {
        base.InitActionNonTerminal();

        _actionsNT["ACTN_HEADING_SOUTH"] = delegate()
        {
            GetComponent <Stats>().SetHeading(270);
        };
        _actionsNT["ACTN_HEADING_NORTH"] = delegate()
        {
            GetComponent <Stats>().SetHeading(90);
        };
        _actionsNT["ACTN_HEADING_EAST"] = delegate()
        {
            GetComponent <Stats>().SetHeading(0);
        };
        _actionsNT["ACTN_HEADING_WEST"] = delegate()
        {
            GetComponent <Stats>().SetHeading(180);
        };

        _actionsNT["ACTN_HEADING_RANDOM"] = delegate()
        {
            GetComponent <Stats>().SetHeading(Random.Range(0f, 360f));
        };

        _actionsNT["ACTN_TURN_AROUND"] = delegate()
        {
            GetComponent <Stats>().SetHeading(180 + GetComponent <Stats>().GetHeading());
        };
        _actionsNT["ACTN_TOWARD_MESSAGE_SENDER"] = delegate()
        {
            print("ACTN_TOWARD_MESSAGE_SENDER " + _tmpMessage);
            if (_tmpMessage != null)
            {
                GetComponent <Stats>().SetHeading(_tmpMessage.heading);
            }
        };
        _actionsNT["ACTN_ADD_ELIMINATION_CONTRACT"] = delegate()
        {
            EliminationContract newContract = new EliminationContract((GameObject)_tmpMessage._contenu);
            GetComponent <Stats>().AddContract(newContract);
        };
    }
    public override void InitPercept()
    {
        base.InitPercept();
        _percepts["PERCEPT_BLOCKED"] = delegate() { return(GetComponent <MovableCharacter>().isBlocked()); };

        _percepts["PERCEPT_BASE_NEAR_ALLY"] = delegate()
        {
            GetComponent <Stats>().SetTarget(null);
            foreach (GameObject gO in GetComponent <Sight>()._listOfCollision)
            {
                if (gO && gO.GetComponent <Stats>() != null && gO.GetComponent <Stats>()._unitType == "Base" &&
                    Vector3.Distance(transform.position, gO.transform.position) < 8f && gO.GetComponent <Stats>()._teamIndex == GetComponent <Stats>()._teamIndex)
                {
                    GetComponent <Stats>().SetTarget(gO);
                    return(true);
                }
            }
            return(false);
        };
        /** PERCEPT **/
        _percepts["PERCEPT_CAN_GIVE"] = delegate()
        {
            GetComponent <Stats>().SetTarget(null);
            foreach (GameObject gO in GetComponent <Sight>()._listOfCollision)
            {
                if (gO && gO.GetComponent <Stats>() != null &&
                    Vector3.Distance(transform.position, gO.transform.position) < 8f && gO.GetComponent <Stats>()._teamIndex == GetComponent <Stats>()._teamIndex)
                {
                    GetComponent <Stats>().SetTarget(gO);
                    return(true);
                }
            }
            return(false);
        };
        _percepts["PERCEPT_CONTRACT_ELIMINATION"]             = delegate() { return(GetComponent <Stats>().HaveContrat() && GetComponent <Stats>().GetContract().type == "Elimination"); };
        _percepts["PERCEPT_CONTRACT_ELIMINATION_TARGET_NEAR"] = delegate() {
            Brain             brain           = GetComponent <Brain>();
            Sight             sight           = brain.GetComponent <Sight>();
            List <GameObject> _listOfUnitColl = new List <GameObject>();
            if (!GetComponent <Stats>().HaveContrat() || (GetComponent <Stats>().HaveContrat() && GetComponent <Stats>().GetContract().type != "Elimination"))
            {
                return(false);
            }
            EliminationContract contract = (EliminationContract)GetComponent <Stats>().GetContract();

            foreach (GameObject gO in sight._listOfCollision)
            {
                if (gO && contract._target == gO)
                {
                    GetComponent <Stats>().SetTarget(gO);
                    GetComponent <Stats>().SetHeading(getAngle(gO));
                    return(true);
                }
            }
            return(false);
        };

        _percepts["PERCEPT_FOOD_NEAR"] = delegate()
        {
            return((_percepts["PERCEPT_FOOD"]()) && (Vector3.Distance(GetComponent <Stats>().GetTarget().transform.position, transform.position) < 4f));
        };

        _percepts["PERCEPT_CONTRACT"] = delegate() { return(GetComponent <Stats>().HaveContrat()); };
        _percepts["PERCEPT_FOOD"]     = delegate()
        {
            GetComponent <Stats>().SetTarget(null);
            foreach (GameObject gO in GetComponent <Sight>()._listOfCollision)
            {
                if (gO && gO.tag == "Item")
                {
                    GetComponent <Stats>().SetTarget(gO);
                    return(true);
                }
            }
            return(false);
        };
    }