Ejemplo n.º 1
0
    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);
    }
Ejemplo n.º 2
0
        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;	
	}
Ejemplo n.º 5
0
        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);
                    }
                }
            }
        }