Esempio n. 1
0
    /// <summary>
    /// Comprueba si puede construir.
    /// Si no puede tendrá que buscar los recursos necesarios para construir.
    /// Si no tiene los recursos necesarios desactivará la acción.
    /// </summary>
    /// <param name="action"></param>
    public void ComprobarInventarioAction(GameAction action)
    {
        if (ComprobarAcceso(action))
        {
            return;
        }

        Personaje worker = action.worker;

        //Pones la cantidad de objetos que tienes encima en el inventario
        //Si aún te falta va a buscar los objetos necesarios.
        //Recuperas los recursos sobrantes.
        ResourceInfo[] info = worker.inventario.GetResources(action.recursosNecesarios);
        if (info != null && info.Length != 0)
        {
            for (int i = 0; i < info.Length; i++)
            {
                int sobrante = action.AddResource(info[i].type, info[i].quantity);

                if (sobrante > 0)
                {
                    worker.inventario.AddResource(info[i].type, sobrante);
                }
            }
        }


        if (!action.CanBuild())
        {
            IntVector2 _pos = manager.path.PathFind(worker, new PathSetting(action.recursosNecesarios)).GetFinalPosition();

            if (_pos != IntVector2.Zero)
            {
                worker.AddAction(manager.actions.CreateAction(_pos, HERRAMIENTA.Custom, TIPOACCION.Almacenar, worker, true, action.prioridad, null), 0);
                worker.AddAction(manager.actions.CreateAction(_pos, HERRAMIENTA.Custom, TIPOACCION.SacarAlmacen, worker, true, action.prioridad, action.recursosNecesarios), 1);
            }
            else
            {
                Debug.LogWarning("ActionMethods::ComprobarConstruccion error: No ha encontrado los recursos necesarios en los baules actuales. La acción se detendrá.");
                actions.actionsQueue.ReturnAction(action);
            }
        }
    }
Esempio n. 2
0
    public void AssignCharacter(Personaje character)
    {
        if (character == null)
        {
            return;
        }

        if (worker != null)
        {
            Debug.LogWarning("AssignCharacter: La accion: " + tipo.ToString() + " con herramienta: " + herramienta.ToString() + " ya tiene personaje ligado. Ligado: " + worker.name + " Nuevo: " + character.name);
            return;
        }

        worker = character;
        //Añade la acción directamente a su cola de acciones.
        character.AddAction(this);

        if (originalSprite != null)
        {
            queue.ChangeColor(this, new Color(0.6f, 0.6f, 0.6f, 0.8f));
        }
    }