Esempio n. 1
0
    /// <summary>
    /// Craftea el objeto que estuviera en cola.
    /// </summary>
    public void Craftear(Estructura build, GameAction action)
    {
        if (ComprobarAcceso(action) || build == null)
        {
            return;
        }

        Crafteable craftTable = build.GetComponent <Crafteable>();

        if (craftTable == null)
        {
            Debug.LogWarning("Craftear::ActionMethods error: Eso no es mesa de crafteo...");
            return;
        }

        Craft crafteo = craftTable.GetThisCraft();

        if (crafteo == null)
        {
            return;
        }

        foreach (ResourceInfo info in crafteo.requisitos)
        {
            action.worker.inventario.RemoveResource(info.type, info.quantity);
        }
        action.worker.inventario.AddResource(crafteo.obtencion.type, crafteo.obtencion.quantity);

        craftTable.FinishCraft();

        if (craftTable.HasMoreCrafts())
        {
            actions.CreateAction(action, action.worker, true, action.prioridad, craftTable.GetThisCraft().requisitos);
        }
    }
Esempio n. 2
0
    /// <summary>
    /// Crea un saco con objetos proximo
    /// Este saco no sirve para almacenar de manera persistente los objetos
    /// Cuando se hace de noche este saco desaparece (Por lo que necesita ser almacenado
    /// en un baul antes de que eso ocurra).
    /// </summary>
    public void  CrearSaco(IntVector2 pos, int maxSteps, ResourceInfo[] inventario)
    {
        int count = 0;

        for (int i = 0; i < inventario.Length; i++)
        {
            count += inventario[i].quantity;
        }

        if (count == 0)
        {
            return;
        }

        pos = path.PathFind(pos, maxSteps, new PathSetting(PATHTYPE.huecoLibre)).GetFinalPosition();

        Estructura estructura = CreateBuild(pos, sackPrefab);

        if (estructura != null)
        {
            Recurso _recurso = estructura.GetComponent <Recurso>();
            _recurso.CreateResource(inventario);
            _recurso.transform.localScale = Vector3.Lerp(new Vector3(0.25f, 0.25f, 1), Vector3.one, ((float)_recurso.actualQuantity) / 250);
        }
    }
Esempio n. 3
0
    public void ExtraerAgua(Estructura build, GameAction action)
    {
        if (ComprobarAcceso(action))
        {
            return;
        }

        Agua agua = build.GetComponent <Agua>();

        action.worker.aguaTotal.TomarAgua(action.worker.aguaTotal.litrosMaximo, agua.agua);
    }
Esempio n. 4
0
    public void Regar(Estructura build, GameAction action)
    {
        if (ComprobarAcceso(action))
        {
            return;
        }

        Huerto huerto = build.GetComponent <Huerto>();

        if (huerto != null)
        {
            huerto.Regar(action.worker.aguaTotal);
        }
    }
Esempio n. 5
0
    public void Plantar(Estructura build, GameAction action)
    {
        if (ComprobarAcceso(action))
        {
            return;
        }

        Huerto huerto = build.GetComponent <Huerto>();

        if (huerto != null)
        {
            huerto.Cultivar(action.recursosNecesarios[0].type);
        }
    }
Esempio n. 6
0
    /// <summary>
    /// Pesca un pez
    /// </summary>
    public void Pescar(Estructura build, GameAction action)
    {
        if (ComprobarAcceso(action))
        {
            return;
        }

        Agua agua = build.GetComponent <Agua>();

        if (agua != null)
        {
            bool obtenido = agua.Pescar();
            if (obtenido)
            {
                action.worker.inventario.AddResource(RECURSOS.Pescado, 1);
                action.worker.BuscarAlmacenCercano();
            }

            action.worker.AddAction(actions.CreateAction(action, action.worker, true));
        }
    }
Esempio n. 7
0
    public GameAction CreateAction(IntVector2 pos, HERRAMIENTA herramienta, TIPOACCION type, Personaje character = null, bool repeatable = false, int prioridad = -1, ResourceInfo[] recNecesarios = null)
    {
        if (pos.x < 0 || pos.y < 0 || pos.x >= manager.totalSize.x || pos.y >= manager.totalSize.y)
        {
            return(null);
        }

        if (herramienta == HERRAMIENTA.Cancelar || herramienta == HERRAMIENTA.Priorizar)
        {
            repeatable = true;
        }

        //Mira si esta acción ya ha sido seleccionada por una acción anterior.
        //Se puede crear la acción para que se pueda realizar la misma acción con más de un personaje al mismo tiempo.
        if (!repeatable && actionsQueue.IsActionCreated(pos))
        {
            return(null);
        }


        if (prioridad == -1)
        {
            prioridad = (int)manager.barraprioridad.value;
        }
        else
        {
            prioridad = Mathf.Clamp(prioridad, 0, 4);
        }

        Node       nodo  = manager.GetNode(pos);
        Estructura build = (nodo != null) ? nodo.GetBuild() : null;

        GameAction action = new GameAction(type, herramienta, manager.GetNode(pos), null, 0, prioridad, actionsQueue);

        float  customTime = (build != null) ? build.tiempoTotal : 1;
        Sprite customIcon = null;

        switch (herramienta)
        {
        case HERRAMIENTA.Recolectar:
            if (build == null)
            {
                return(null);
            }

            Recurso _resource = build.GetComponent <Recurso>();

            if (_resource != null)
            {
                if (_resource.actualQuantity <= 0)      //Si el recurso está vacio no te permite usarlo.
                {
                    return(null);
                }
                type = _resource.actionType;

                switch (type)
                {
                case TIPOACCION.Minar:
                    action.SetExperience(ATRIBUTO.Mineria, 5);
                    break;

                case TIPOACCION.Talar:
                    action.SetExperience(ATRIBUTO.Recoleccion, 3);
                    break;
                }

                action.RegisterAction(ACTIONEVENT.OnCompleted, (gameAction) => { methods.ExtraerRecursos(_resource, gameAction); });
            }
            else
            {
                return(null);
            }

            break;

        case HERRAMIENTA.Arar:
            if (build != null)
            {
                return(null);
            }

            type       = TIPOACCION.Arar;
            customTime = manager.farm.tiempoArar;

            action.RegisterAction(ACTIONEVENT.OnCompleted, (gameAction) => { methods.ArarTierra(manager.farm.huertoPrefab, gameAction); });

            action.SetExperience(ATRIBUTO.Constitucion, 1);

            break;

        case HERRAMIENTA.Construir:
            if (build != null)
            {
                return(null);
            }

            type = TIPOACCION.Construir;

            int id = manager.build.selectID;

            //TODO: Poner personalizado la cantidad de experiencia ha recibir.
            action.SetExperience(ATRIBUTO.Construccion, 5);

            //Almacena los recursos necesarios para la construcción de la estructura.
            recNecesarios = new ResourceInfo[manager.build.construcciones[id].recursosNecesarios.Length];
            for (int i = 0; i < recNecesarios.Length; i++)
            {
                recNecesarios[i] = new ResourceInfo(manager.build.construcciones[id].recursosNecesarios[i].recurso, manager.build.construcciones[id].recursosNecesarios[i].cantidadNecesaria);
            }

            customTime = manager.build.construcciones[id].tiempo;
            customIcon = manager.build.construcciones[id].spriteModelo;

            action.RegisterAction(ACTIONEVENT.OnAwake, (gameAction) => { methods.ComprobarInventarioAction(gameAction); });
            action.RegisterAction(ACTIONEVENT.BeforeStart, (gameAction) => { methods.ComprobarInventarioAction(gameAction); });
            action.RegisterAction(ACTIONEVENT.OnCompleted, (gameAction) => { methods.Construir(id, gameAction); });
            action.RegisterAction(ACTIONEVENT.OnCanceled, (gameAction) => { methods.DevolverRecursos(gameAction); });

            break;

        case HERRAMIENTA.Priorizar:
            foreach (GameAction _action in actionsQueue.actions.Keys)
            {
                if (_action != null && (Vector2)_action.node.GetPosition() == pos)
                {
                    _action.ChangePriority(prioridad);
                    actionsQueue.ChangeSingleIconToPriority(_action);

                    return(null);
                }
            }

            return(null);

        case HERRAMIENTA.Destruir:
            if (build == null || !build.esDestruible)
            {
                return(null);
            }

            type       = TIPOACCION.Destruir;
            customTime = build.tiempoDestruccion;

            action.RegisterAction(ACTIONEVENT.OnCompleted, (GameAction) => { manager.RemoveBuildInMap(build.transform.position, 0.5f); });

            action.SetExperience(ATRIBUTO.Construccion, 1);

            break;


        case HERRAMIENTA.Cancelar:
            foreach (GameAction _action in actionsQueue.actions.Keys)
            {
                if (_action != null && (Vector2)_action.node.GetPosition() == pos)
                {
                    _action.RealizeAction(ACTIONEVENT.OnCanceled);
                    RemoveAction(_action);
                    return(null);
                }
            }

            return(null);

        case HERRAMIENTA.Custom:
            //Herramienta especial. Para realizar cosas que con las anteriores no se pueden (Como extraer cosas del almacen).

            switch (type)
            {
            case TIPOACCION.Almacenar:
                Almacen _almacen = build.GetComponent <Almacen>();

                if (_almacen != null)
                {
                    action.RegisterAction(ACTIONEVENT.OnCompleted, (gameAction) => { methods.AlmacenarRecursos(_almacen, gameAction); });
                }
                else
                {
                    return(null);
                }


                break;

            case TIPOACCION.SacarAlmacen:
                _almacen = build.GetComponent <Almacen>();

                if (_almacen != null)
                {
                    action.RegisterAction(ACTIONEVENT.OnCompleted, (gameAction) => { methods.SacarContenidoAlmacen(recNecesarios, _almacen, gameAction); });
                }
                else
                {
                    return(null);
                }

                break;

            case TIPOACCION.VaciarAlmacen:
                _almacen = build.GetComponent <Almacen>();

                if (_almacen.inventario.Count > 0)
                {
                    customTime = 0.5f;
                    customIcon = manager.GetIconSprite(TIPOACCION.SacarAlmacen);

                    action.RegisterAction(ACTIONEVENT.OnCompleted, (gameAction) => { methods.VaciarAlmacen(_almacen, gameAction); });
                }
                else
                {
                    return(null);
                }
                break;

            case TIPOACCION.Plantar:
                customTime = 0.50f;
                action.RegisterAction(ACTIONEVENT.OnAwake, (gameAction) => { methods.ComprobarInventarioAction(gameAction); });
                action.RegisterAction(ACTIONEVENT.BeforeStart, (gameAction) => { methods.ComprobarInventarioAction(gameAction); });

                action.RegisterAction(ACTIONEVENT.OnCompleted, (gameAction) => { methods.Plantar(build, gameAction); });

                break;

            case TIPOACCION.ExtraerAgua:
                customTime = 0.5f;
                action.RegisterAction(ACTIONEVENT.OnCompleted, (gameAction) => { methods.ExtraerAgua(build, gameAction); });

                break;

            case TIPOACCION.Pescar:
                type = TIPOACCION.Pescar;
                action.SetExperience(ATRIBUTO.Recoleccion, 1);

                action.RegisterAction(ACTIONEVENT.OnCompleted, (gameAction) => { methods.Pescar(build, gameAction); });
                break;

            case TIPOACCION.Regar:
                customTime = 0.25f;
                action.RegisterAction(ACTIONEVENT.OnAwake, (gameAction) => { methods.ComprobarAgua(gameAction); });
                action.RegisterAction(ACTIONEVENT.BeforeStart, (gameAction) => { methods.ComprobarAgua(gameAction); });

                action.RegisterAction(ACTIONEVENT.OnCompleted, (gameAction) => { methods.Regar(build, gameAction); });

                break;

            case TIPOACCION.Craftear:

                action.SetExperience(ATRIBUTO.Ingenio, 1);

                action.RegisterAction(ACTIONEVENT.OnAwake, (gameAction) => { methods.ComprobarInventarioAction(gameAction); });
                action.RegisterAction(ACTIONEVENT.BeforeStart, (gameAction) => { methods.ComprobarInventarioAction(gameAction); });
                action.RegisterAction(ACTIONEVENT.OnCompleted, (gameAction) => { methods.Craftear(build, gameAction); });
                action.RegisterAction(ACTIONEVENT.OnCanceled, (gameAction) => { methods.DevolverRecursos(gameAction); });

                break;
            }

            break;

        default:
            Debug.LogWarning("Herramienta no programada aún");
            return(null);
        }

        GameObject     icon_go      = GameObject.Instantiate(manager.actionIconPrefab);
        SpriteRenderer actionRender = icon_go.GetComponent <SpriteRenderer>();

        icon_go.transform.position = (Vector3)pos;

        actionRender.sprite = (customIcon == null) ? manager.GetIconSprite(type) : customIcon;

        action.SetTime(customTime);
        action.SetSprite(actionRender.sprite);
        action.SetResources(recNecesarios);

        action.AssignCharacter(character);
        actionsQueue.AddAction(action, actionRender);

        return(action);
    }