示例#1
0
    private void Update()
    {
        if (!activated)
        {
            return;
        }

        if (target == null || !target.gameObject.activeInHierarchy) // Don't have target or target is no longer active
        {
            Behavior_Spawner spawner = script_room.GetRandomSpawner();
            Behavior_Node    node    = spawner.GetActiveNode();
            if (node)
            {
                SetTarget(node);
                ref_ai_seeker.StartPath(transform.position, target.transform.position, OnPathReady);
                timeout_count      = 0f;
                last_activate_time = 0f;
                reached_target     = false;
            }
        }
        else if (!reached_target) // Have valid target but have not reached it yet
        {
            if (ref_self_rbody.velocity.magnitude <= Parameters_Interactables.Instance.worker_stuck_velocity_threshold)
            {
                timeout_count += Time.deltaTime;

                if (timeout_count >= Parameters_Interactables.Instance.worker_stuck_timeout_seconds)
                {
                    target = null;
                    //ref_ai_seeker.StartPath(transform.position, target.transform.position, OnPathReady);
                    //timeout_count = 0f;
                }
            }
            else
            {
                timeout_count = 0f;
            }
        }
        else // Reached target
        {
            float e_time = Time.time - last_activate_time;
            if (e_time >= activate_delay_seconds)
            {
                target.Activate(this);
                last_activate_time = Time.time;
            }
        }
    }
示例#2
0
    private void Update()
    {
        if (mining)
        {
            float base_mining_power = Time.deltaTime * Manager_Main.Instance.GetMiningLevel() * Manager_Main.Instance.GetToolSpeedup();

            if (activate_tool.type == Manager_Main.Tool_Type.Staff)
            {
                // Chaining
                HashSet <int>            processed_targets = new HashSet <int>();
                Queue <Behavior_Spawner> targets           = new Queue <Behavior_Spawner>();
                targets.Enqueue(ref_parent_spawner);

                while (targets.Count > 0)
                {
                    Behavior_Spawner target = targets.Dequeue();
                    target.DecreaseDurability(base_mining_power * mining_multiplier);
                    processed_targets.Add(target.gameObject.GetInstanceID());

                    Collider2D[] nearby_objs_colli = Physics2D.OverlapCircleAll(target.gameObject.transform.position, staff_chain_radius + Manager_Main.Instance.GetMiningLevel() * staff_mine_level_scale);
                    foreach (Collider2D colli in nearby_objs_colli)
                    {
                        if (colli.tag == "Node")
                        {
                            Behavior_Spawner new_target = colli.GetComponent <Behavior_Node>().GetSpawner();
                            if (!processed_targets.Contains(new_target.gameObject.GetInstanceID()))
                            {
                                // Unprocessed Target
                                targets.Enqueue(new_target);
                            }
                        }
                    }
                }
            }
            else
            {
                ref_parent_spawner.DecreaseDurability(base_mining_power * mining_multiplier);
            }
        }
    }
示例#3
0
    private void Update()
    {
        if (mining)
        {
            float base_mining_power = Time.deltaTime * Manager_Main.Instance.GetMiningLevel() * Manager_Main.Instance.GetToolSpeedup(activate_tool);

            if (activate_tool.type == Manager_Main.Tool_Type.Staff)
            {
                // Chaining
                HashSet <int>            processed_targets = new HashSet <int>();
                Queue <Behavior_Spawner> targets           = new Queue <Behavior_Spawner>();
                targets.Enqueue(script_parent_spawner);

                while (targets.Count > 0)
                {
                    Behavior_Spawner target = targets.Dequeue();
                    target.DecreaseDurability(base_mining_power * mining_multiplier);
                    target.PlayParticleLightning();
                    processed_targets.Add(target.gameObject.GetInstanceID());

                    Collider2D[] nearby_objs_colli = Physics2D.OverlapCircleAll(target.gameObject.transform.position, Parameters_Mining.Instance.staff_chain_radius + Manager_Main.Instance.GetMiningLevel() * Parameters_Mining.Instance.staff_mine_level_scale);
                    foreach (Collider2D colli in nearby_objs_colli)
                    {
                        if (colli.tag == "Node")
                        {
                            Behavior_Node    new_node    = colli.GetComponent <Behavior_Node>();
                            Behavior_Spawner new_spawner = new_node.GetSpawner();

                            if (!processed_targets.Contains(new_spawner.gameObject.GetInstanceID()))
                            {
                                // Unprocessed Target
                                targets.Enqueue(new_spawner);
                                new_node.Grow();
                            }
                        }
                    }
                }
            }
            else if (activate_tool.type == Manager_Main.Tool_Type.Torch)
            {
                float e_time = Time.time - mining_start_time;
                if (e_time >= mining_auto_off)
                {
                    mining = false;
                }
                else
                {
                    script_parent_spawner.DecreaseDurability(base_mining_power * mining_multiplier);

                    // Effect
                    script_parent_spawner.PlayParticleFire();
                }
            }
            else
            {
                script_parent_spawner.DecreaseDurability(base_mining_power * mining_multiplier);
            }

            // Play effect
            Grow();
        }
    }