Ejemplo n.º 1
0
    private void DoTask()
    {
        if (Chunk == null)
        {
            Debug.LogError("Cannot do task if we do not know in which chunk we are. :o");
            return;
        }

        if (taskTarget)
        {
            var taskCompleted = Chunk.IsTaskCompleted(this, taskTarget);
            if (taskCompleted)
            {
                Unlock();
            }
            else
            {
                if (!Chunk.CanExecuteTask(this, taskTarget, out var reason))
                {
                    if (reason == TaskExecutionStatus.OutOfRange)
                    {
                        GotoPosition(taskTarget.transform.position);
                    }

                    if (reason == TaskExecutionStatus.InsufficientResources)
                    {
                        Debug.LogWarning(PlayerName + " is out of resources and won't gain any crafting exp.");
                    }

                    return;
                }

                if (Chunk.ExecuteTask(this, taskTarget))
                {
                    return;
                }
            }
        }

        taskTarget = Chunk.GetTaskTarget(this);
        if (!taskTarget)
        {
            return;
        }

        Chunk.TargetAcquired(this, taskTarget);

        if (!Chunk.CanExecuteTask(this, taskTarget, out var exeTaskReason))
        {
            if (exeTaskReason == TaskExecutionStatus.OutOfRange)
            {
                GotoPosition(taskTarget.transform.position);
            }
        }
    }