/// <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); } } }