public override IEnumerator OnEnd() { yield return(base.OnEnd()); ToolCode prevToolCode = toolsManager.DefaultTool; // Даем мешок с добычей toolsManager.SetDefaultTool(nextTaskDefaultTool); // Определяем правый нижний участок базы - куда будем нести добычу basePositionRequest.MakeRequest(new ParamsObject(baseTile), out List <Vector2> basePositions); Vector2 baseGates = basePositions.Aggregate(basePositions[0], (picked, next) => { return(next.x > picked.x || next.y < picked.y ? next : picked); }); CharacterTask returnToBaseTask = actionData.taskManager.ActivateTask(Utils.MaskToLayer(baseLayer), baseGates); // Ждем пока доставит добычу на базу yield return(returnToBaseTask.Execute()); // Добавляем деньги moneyVariable.Plus(maxIterations * actionData.SkillValue); // Убираем мешок, возвращаем предыдущий иструмент toolsManager.SetDefaultTool(prevToolCode); cellLayoutRequest.MakeRequest(new ParamsObject(actionData.endPosition), out LayerMask newTaskLayer); // После возвращения на базу выполняем новое задание с той же точкой (если ресурсы еще не разработаны - // доразработает, если уже - то дойдет) actionData.taskManager.ExecuteTask(newTaskLayer, actionData.endPosition); }
public void ActivateCharacterTask(ResourceActivationContext context, CharacterTask task) { IPlayerTaskDriver driver = null; if (CreateCharacterTaskDriver != null) { driver = CreateCharacterTaskDriver(context, task); } else { driver = new PlayerTaskDriver <CharacterTask, IMinigameDriver>(context, task); } ActivatePlayerTaskDriver(context, driver); }
private IEnumerator ExecuteTaskEnumerator(int taskLayer, Vector2 taskPoint) { if (activeTask != null) { yield return(activeTask.Cancel()); } activeTask = null; // Если клик по активному персонажу, то просто останавливаем выполнение if (!checkIfCharacterOnCellRequest.MakeRequest(taskPoint, new Vector2(transform.position.x, transform.position.y))) { activeTask = ActivateTask(taskLayer, taskPoint); if (activeTask != null) { yield return(activeTask.Execute()); } } }
ScriptedAction BuildLineFromCharacterTask(CharacterTask c){ GameObject SAGO = new GameObject(c.characterName+"-"+c.nodeName+"-"+c.posture+"-"+c.lookAt+"-"+c.animatedInteraction); ScriptedAction SA = SAGO.AddComponent<ScriptedAction>(); SA.type = ScriptedAction.actionType.characterTask; SA.objectName = c.characterName; SA.moveToName = c.nodeName; SA.stringParam = c.posture; SA.stringParam2 = c.lookAt; SA.stringParam3 = c.animatedInteraction; SA.fadeLength = c.delay; SA.waitForCompletion = false; // we'll set this to true for the last line of a list of CT's return SA; }
void MouseClicked() { if (DebugWindowOpen) { return; } if (Input.GetMouseButtonDown(0)) { Vector3 castStart = mousePosition; castStart.z = -10.0f; RaycastHit2D[] raycastHits = Physics2D.CircleCastAll(mousePosition, 30.0f, Vector2.zero); // Detected inspected objects foreach (var hit in raycastHits) { GameObject obj = hit.collider.gameObject; if (obj == this) { continue; } PixelCollider pixelCollider = obj.GetComponent <PixelCollider>(); if (pixelCollider != null) { if (pixelCollider.inspectChildObjects) { continue; } PixelCollider characterCollider = this.GetComponentInChildren <PixelCollider>(); if (pixelCollider.GetPixelRoom() != characterCollider.GetPixelRoom()) { continue; } if (pixelCollider.transform.parent.name == "VirtualObject") { continue; } if (pixelCollider.transform.parent.name == "Player") { continue; } bool withinCollider = pixelCollider.CheckForWithinCollider(mousePosition); if (withinCollider) { Debug.Log(pixelCollider.transform.parent.name); NavigateObject(pixelCollider.GetPixelRoom(), pixelCollider); // Inspect Object PixelCollision pc = new PixelCollision(); pc.pixelCollider = pixelCollider; pc.direction = Direction.All; CharacterTask inspectTask = new CharacterTask(GameTask.TaskType.INSPECT, pc); characterTasks.Enqueue(inspectTask); return; } } } // Detected inspected rooms (for navigation) foreach (var hit in raycastHits) { GameObject obj = hit.collider.gameObject; if (obj == this) { continue; } PixelRoom pixelRoom = obj.GetComponent <PixelRoom>(); if (pixelRoom != null) { PixelCollider pixelCollider = gameObject.GetComponentInChildren <PixelCollider>(); if (pixelCollider == null) { continue; } if (pixelCollider.GetPixelRoom() != pixelRoom) { continue; } Debug.Log(pixelRoom.name); // Navigate Maze Room CharacterTask characterTask = new CharacterTask(GameTask.TaskType.WALKTO, mousePosition); characterTasks.Enqueue(characterTask); } } } }