public bool bagFull(FSMControler controler)
    {
        int     nbTotal         = 0;
        int     nbTotalPossible = 0;
        Citizen citizen         = controler.GetComponent <Citizen>();

        if (citizen.ressourcesToTransport.ressourcesList.Count == 0)
        {
            return(false);
        }
        foreach (RessourceTank rT in citizen.ressourcesToTransport.ressourcesList)
        {
            nbTotal         += rT.number;
            nbTotalPossible += rT.numberLimit;
        }

        //if(nbTotal >= citizen.citizenSetting.inventorySize)
        if (nbTotal >= nbTotalPossible)
        {
            //controler.target = controler.finalTarget;
            return(true);
        }
        else
        {
            return(false);
        }
    }
    public void give(FSMControler controler)
    {
        Citizen citizen = controler.GetComponent <Citizen>();

        citizen.refreshSoundBools();
        Building target = controler.finalTarget.GetComponent <Building>();

        foreach (RessourceTank rT in citizen.ressourcesToTransport.getRessourcesNeededTransport())
        {
            if (target.needRessources)
            {
                target.take(rT.ressource, citizen);
            }
            else
            {
                break;
            }
        }

        foreach (Tool t in citizen.toolsToTransport.getToolsNeededTransport())
        {
            if (target.needTools)
            {
                target.takeTool(t, citizen);
            }
            else
            {
                break;
            }
        }
    }
예제 #3
0
    private bool ResourcesNotGathered(FSMControler controler)
    {
        Building target  = controler.finalTarget.GetComponent <Building>();
        Citizen  citizen = controler.GetComponent <Citizen>();

        foreach (RessourceTank rT in citizen.ressourcesToTransport.getRessourcesNeededTransport())
        {
            //s'il en reste renvoie true
            if (rT.number < rT.numberToTransport && target.needRessources)
            {
                return(true);
            }
        }

        foreach (Tool tool in citizen.toolsToTransport.getToolsNeededTransport())
        {
            //s'il en reste renvoie true
            if (tool.number < 1 && target.needTools)
            {
                return(true);
            }
        }

        return(false);
    }
예제 #4
0
 public void DoActions(FSMControler controler)
 {
     foreach (FSMAction action in actions)
     {
         action.Act(controler);
     }
 }
예제 #5
0
    public bool IsBetterCamp(FSMControler controler)
    {
        Building[] buildings = FindObjectsOfType <Building>();
        Building   target    = controler.target.GetComponent <Building>();
        Citizen    citizen   = controler.GetComponent <Citizen>();

        foreach (RessourceTank rt in controler.GetComponent <RessourceInventory>().ressourcesList)
        {
            foreach (Building building in buildings)

            {
                if (building.tag == "Camp" && building.isPlaced && building.isConstruct)
                {
                    foreach (RessourceTank rT in building.GetComponent <RessourceInventory>().ressourcesList)
                    {
                        if (rT.number >= rt.numberToTransport)
                        {
                            controler.target = building.gameObject;
                            return(true);
                        }
                    }
                }
            }
        }

        return(false);
    }
    public bool HaveEnoughResources(FSMControler controler)
    {
        Citizen citizen = controler.GetComponent <Citizen>();

        citizen.refreshSoundBools();
        if (!controler.target)
        {
            return(false);
        }
        //Camp building = controler.target.gameObject.GetComponent<Camp>();
        //if (!building) return false;

        // L'outil à construire
        Tool tool = controler.target.GetComponent <ToolInventory>().activeTool;

        // La ressource qu'il faut pour le construire
        Ressource ressource = tool.ressourceNeeded;

        // Le nombre de cette ressource qu'il faut
        int nbrRessource = tool.numberRessourcesNeeded;
        // Le nombre de la ressource contenu dans le batiment
        int stockRessource = controler.target.GetComponent <RessourceInventory>().nbElementsTotal(ressource);

        return(stockRessource >= nbrRessource);
    }
 private void WalkTowardsRessource(FSMControler controler)
 {
     if (controler.target)
     {
         controler.agent.SetDestination(controler.target.transform.position);
     }
 }
    private void FindRessource(FSMControler controler)
    {
        Citizen citizen = controler.GetComponent <Citizen>();

        if (citizen.ressourcesToTransport.ressourcesList.Count != 0)
        {
            citizen.ressourcesToTransport.ressourcesList[0].neededToTransport = true;
            citizen.ressourcesToTransport.ressourcesList[0].numberLimit       = 5;
        }
        citizen.refreshSoundBools();
        GameObject ressourceTank = GameObject.FindGameObjectWithTag("RessourceTank");

        if (controler.manualTarget == null)
        {
            if (ressourceTank)
            {
                controler.target = ressourceTank;
            }
            else
            {
                ressourceTank    = GameObject.FindGameObjectWithTag("Camp");
                controler.target = ressourceTank;
            }
        }
        else
        {
            controler.target = controler.manualTarget;
        }
    }
    private void FindRessource(FSMControler controler)
    {
        Citizen citizen = controler.GetComponent <Citizen>();

        citizen.refreshSoundBools();

        GameObject[] shelterList = GameObject.FindGameObjectsWithTag("Camp");
        controler.target = null;
        if (shelterList.Length > 0)
        {
            foreach (GameObject gO in shelterList)
            {
                if (gO.GetComponent <Building>().isConstruct)
                {
                    Building building = gO.GetComponent <Building>();

                    /*
                     * foreach (RessourceTank rT in controler.GetComponent<Citizen>().ressourcesToTransport.ressourcesList)
                     * {
                     *  if (building.inventory.nbElementsTotal(rT.ressource) > 0)
                     *  {
                     *
                     *      controler.target = gO;
                     */
                    foreach (Tool t in controler.GetComponent <Citizen>().toolsToTransport.toolInventory)
                    {
                        if (building.toolsInventory.nbElementsTotal(t) > 0)
                        {
                            controler.target = gO;
                            return;
                        }
                    }
                }
            }

            //}

            //}

            foreach (GameObject gO in shelterList)
            {
                if (gO.GetComponent <Building>().isConstruct)
                {
                    Building building = gO.GetComponent <Building>();

                    foreach (RessourceTank rT in controler.GetComponent <Citizen>().ressourcesToTransport.ressourcesList)
                    {
                        if (building.inventory.nbElementsTotal(rT.ressource) > 0)
                        {
                            controler.target = gO;
                            return;
                        }
                    }
                }
            }
        }

        controler.target = null;
    }
예제 #10
0
 public bool HaveTarget(FSMControler controler)
 {
     if (!controler.finalTarget)
     {
         return(false);
     }
     return(controler.finalTarget.gameObject.GetComponent <Building>());
 }
 public bool TargetBuilt(FSMControler controler)
 {
     if (!controler.target)
     {
         return(false);
     }
     return(controler.target.GetComponent <Building>().isConstruct);
 }
 public bool HaveTarget(FSMControler controler)
 {
     if (!controler.target)
     {
         return(false);
     }
     return(controler.target.gameObject.tag == "Camp");
 }
예제 #13
0
 public bool HaveTarget(FSMControler controler)
 {
     if (controler.target == null)
     {
         controler.citizen.GetComponent <MeshRenderer>().enabled = true;
     }
     return(controler.target == null);
 }
예제 #14
0
    private void FindRessource(FSMControler controler)
    {
        GameObject ressourceTank = GameObject.FindGameObjectWithTag("RessourceTank");

        if (ressourceTank)
        {
            controler.target = ressourceTank;
        }
    }
예제 #15
0
    private void Craft(FSMControler controler)
    {
        Citizen citizen = controler.GetComponent <Citizen>();

        citizen.refreshSoundBools();
        citizen.isProductTool = true;

        if (!controler.target)
        {
            return;
        }
        Building building = controler.target.GetComponent <Building>();

        if (!building)
        {
            return;
        }
        Tool tool = building.GetComponent <ToolInventory>().activeTool;

        // TEMPORAIRE. Récupération du 1er outil dispo dans la liste
        //Tool tool = building.toolsStock.Keys.;


        // Regarde le niveau de compétence du villageois
        if (!controler.citizen.competences.ContainsKey(building.nameCompetence))
        {
            controler.citizen.competences[building.nameCompetence] = 1;
        }

        /*
         * //Niveau du citoyen
         * int level = controler.citizen.competences[building.nameCompetence];
         * //Frequence de construction du citoyen
         * float citizenFrequence = building.timeToBuild * bonusLevel(level);
         * //si le temps passé à construire est
         */
        /*if (!building.GetComponent<ToolInventory>().isCrafted())
         * {
         *  building.GetComponent<ToolInventory>().isGettingCrafted();
         * }
         *
         * else
         * {
         *  building.GetComponent<ToolInventory>().addTool();
         *  building.GetComponent<ToolInventory>().add(tool);
         *  for (int i = 0; i < tool.numberRessourcesNeeded; i++)
         *  {
         *      building.GetComponent<RessourceInventory>().remove(tool.ressourceNeeded);
         *  }
         *
         * }*/

        if (!controler.citizen.isCraftingTool && building.inventory.nbElementsTotal(tool.ressourceNeeded) >= tool.numberRessourcesNeeded)
        {
            controler.citizen.product(tool, building);
        }
    }
    private void FindShelter(FSMControler controler)
    {
        GameObject shelter = GameObject.FindGameObjectWithTag("Batiment");

        if (shelter)
        {
            controler.target = shelter;
        }
    }
    public override void Act(FSMControler controler)
    {
        if (!controler.target || !controler.target.CompareTag("Batiment"))
        {
            FindShelter(controler);
        }

        WalkTowardsTarget(controler);
    }
예제 #18
0
    public bool HaveTarget(FSMControler controler)
    {
        if (controler.target != null)
        {
            return(controler.target.gameObject.tag == "RessourceTank");
        }

        return(false);
    }
예제 #19
0
    public override void Act(FSMControler controler)
    {
        if (!controler.target || !controler.target.CompareTag("RessourceTank"))
        {
            FindRessource(controler);
        }

        WalkTowardsRessource(controler);
    }
예제 #20
0
    private void Stop(FSMControler controler)
    {
        Citizen citizen = controler.GetComponent <Citizen>();

        citizen.isWalking = false;
        citizen.GetComponent <FSMControler>().manualTarget = null;
        citizen.GetComponent <FSMControler>().finalTarget  = null;
        controler.agent.isStopped = true;
    }
예제 #21
0
 public void TakeDecision(FSMControler controler)
 {
     foreach (FSMTransition transition in transitions)
     {
         if (transition.Check(controler))
         {
             controler.ChangeState(transition.nextState);
         }
     }
 }
 private void WalkTowardsTarget(FSMControler controler)
 {
     if (controler.target)
     {
         Citizen citizen = controler.GetComponent <Citizen>();
         citizen.refreshSoundBools();
         citizen.isWalking = true;
         controler.agent.SetDestination(controler.target.transform.position);
     }
 }
    public void FindBuildingToDeliver(FSMControler controler)
    {
        Building[] buildings = FindObjectsOfType <Building>();

        Citizen citizen = controler.GetComponent <Citizen>();

        citizen.refreshSoundBools();

        if (controler.manualTarget != null)
        {
            controler.finalTarget = controler.manualTarget;

            return;
        }

        foreach (Building building in buildings)
        {
            if (building.needRessources && building.isPlaced)
            {
                controler.finalTarget = building.gameObject;
                foreach (RessourceTank rt in building.getRessourcesNeeded())
                {
                    controler.GetComponent <Citizen>().ressourcesToTransport.add(rt);
                }
                if (building.needTools)
                {
                    foreach (Tool t in building.getToolsNeeded())
                    {
                        controler.GetComponent <Citizen>().toolsToTransport.add(t);
                    }
                    return;
                }
                else
                {
                    foreach (Tool t in controler.GetComponent <Citizen>().toolsToTransport.toolInventory)
                    {
                        t.neededToTransport = false;
                    }
                }
            }
            else if (building.needTools && building.isPlaced)
            {
                controler.finalTarget = building.gameObject;
                foreach (Tool t in building.getToolsNeeded())
                {
                    controler.GetComponent <Citizen>().toolsToTransport.add(t);
                }
                foreach (RessourceTank rT in controler.GetComponent <Citizen>().ressourcesToTransport.ressourcesList)
                {
                    rT.neededToTransport = false;
                }
                return;
            }
        }
    }
    public override bool Decide(FSMControler controler)
    {
        bool boolBag = bagFull(controler);

        if (boolBag)
        {
            setTargetToCamp(controler);
        }

        return(boolBag);
    }
예제 #25
0
 private bool NearTarget(FSMControler controler)
 {
     if (!controler.target)
     {
         return(false);
     }
     else
     {
         return(controler.agent.remainingDistance <= controler.citizen.citizenSetting.distanceNearTarget && !controler.agent.pathPending);
     }
 }
예제 #26
0
    public override bool Decide(FSMControler controler)
    {
        bool res = BuildingDontNeedResources(controler);

        if (res)
        {
            controler.target      = null;
            controler.finalTarget = null;
        }
        return(res);
    }
예제 #27
0
    /* private void Stock(FSMControler controler)
     * {
     *   if (controler.target.GetComponent<Building>() && controler.citizen.ressources.Count != 0)
     *   {
     *       controler.target.GetComponent<Building>().addRessource(controler.citizen.ressources[0], 1);
     *       controler.citizen.ressources.RemoveAt(0);
     *   }
     * }
     */
    private void Stock(FSMControler controler)
    {
        Building target  = controler.citizen.workPlace.GetComponent <Building>();
        Citizen  citizen = controler.GetComponent <Citizen>();

        citizen.refreshSoundBools();
        foreach (RessourceTank rT in citizen.ressourcesToTransport.getRessourcesNeededTransport())
        {
            Text woodText = GameObject.Find("WoodTotal").GetComponent <Text>();
            woodText.text = (int.Parse(woodText.text) - 1).ToString();
            target.take(rT.ressource, citizen);
        }
    }
예제 #28
0
 public bool Check(FSMControler controler)
 {
     foreach (FSMDecision decision in decisions)
     {
         // Une seule decision FAUSSE renvoie FAUX;
         if (decision.Decide(controler) == false)
         {
             return(false);
         }
     }
     // Si toutes les décisions sont passées -> VRAI
     return(true);
 }
    public bool PriorityTarget(FSMControler controler)
    {
        if ((controler.manualTarget != null) && controler.target != controler.manualTarget)
        {
            controler.target = controler.manualTarget;
            return(true);
        }

        else
        {
            return(false);
        }
    }
    public bool HaveNotEnoughTools(FSMControler controler)
    {
        if (!controler.target)
        {
            return(false);
        }
        Building building = controler.target.gameObject.GetComponent <Building>();

        if (!building)
        {
            return(false);
        }
        return(!building.enoughToolsToBuild);
    }