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