Exemplo n.º 1
0
    void FindBuildMaterials(BuildMaterial.Type type)
    {
        // find closest build material source
        if (gm.buildMaterialSources.Count > 0)
        {
            currentTask = Task.GatherMaterials;

            List <BuildMaterialSource> materialSourcesReady = new List <BuildMaterialSource>();
            foreach (BuildMaterialSource bms in gm.buildMaterialSources)
            {
                if (bms.materialsCurrent > 0 && !bms.hc.characterWhoTargeted && bms.materialType == type)
                {
                    materialSourcesReady.Add(bms);
                }
            }

            BuildMaterialSource closestSource = null;
            float distance = 1000;

            if (materialSourcesReady.Count > 0)
            {
                // find closest tree with fruits
                foreach (BuildMaterialSource bms in materialSourcesReady)
                {
                    float newDistance = Vector3.Distance(bms.transform.position, transform.position);
                    if (newDistance <= distance)
                    {
                        distance      = newDistance;
                        closestSource = bms;
                    }
                }

                if (closestSource != null)
                {
                    closestSource.hc.characterWhoTargeted = hc;
                    targetObject = closestSource.hc;
                    hc.movement.Move(closestSource.gameObject);
                    StartCoroutine(GetDistanceToTarget());
                }
                else
                {
                    Invoke("ChooseTask", 1);
                }
            }
        }
    }
Exemplo n.º 2
0
    public void PickUpMaterial(BuildMaterial.Type type)
    {
        BuildMaterial closestMaterial = null;
        float         distance        = 1000;

        List <BuildMaterial> materialsOnLevel = new List <BuildMaterial>();

        if (type == BuildMaterial.Type.Rock)
        {
            materialsOnLevel = new List <BuildMaterial>(gm.rock);
        }
        else if (type == BuildMaterial.Type.Wood)
        {
            materialsOnLevel = new List <BuildMaterial>(gm.wood);
        }

        foreach (BuildMaterial bm in materialsOnLevel)
        {
            if (!bm.usedInBuilding)
            {
                float newDistance = Vector3.Distance(transform.position, bm.transform.position);
                if (newDistance <= distance)
                {
                    distance        = newDistance;
                    closestMaterial = bm;
                }
            }
        }

        if (closestMaterial != null)
        {
            closestMaterial.hc.characterWhoTargeted = hc;
            targetObject = closestMaterial.hc;
            hc.movement.Move(closestMaterial.gameObject);
            StartCoroutine(GetDistanceToTarget());
        }
        else
        {
            Invoke("ChooseTask", 1);
        }
    }