Пример #1
0
    void OnLeftMousePressed()
    {
        //Debug.Log(ChatPanel.HideCode + "OnLeftMousePressed");

        int layerMask = 1 << LayerMask.NameToLayer("Monster");

        if (Physics.Raycast(Camera.main.ScreenPointToRay(center), out RaycastHit hit, 5f, layerMask))
        {
            if (Time.time - lastAttackTime > attackInterval)
            {
                Monster monster      = hit.transform.GetComponent <Monster>();
                float   attackDamage = 1f;
                if (handItem != null)
                {
                    attackDamage = handItem.attackDamage;
                }
                monster.health -= attackDamage;
                Vector3 hitForce = transform.forward + Vector3.up;
                monster.AddForce(hitForce * attackStrength);
                monster.OnHit();

                if (monster.health <= 0)
                {
                    SoundManager.Play3DSound("Zombie_Death", monster.gameObject);
                }
                else
                {
                    SoundManager.Play3DSound("Zombie_Hurt", monster.gameObject);
                }
                //Debug.Log("monster health = " + monster.health);

                lastAttackTime = Time.time;
            }
        }

        if (WireFrameHelper.render)
        {
            handAnimator.CrossFade("hand-interact", 0);

            breakingTime += Time.deltaTime;

            NBTBlock targetGenerator = WireFrameHelper.generator;

            bool  match = false;
            float speed = 1;
            if (handItem != null)
            {
                if (handItem.IsMatch(targetGenerator.blockMaterial))
                {
                    match = true;
                    speed = handItem.toolSpeed;
                }
            }
            if (!match)
            {
                match = targetGenerator.blockMaterial == BlockMaterial.Ground ||
                        targetGenerator.blockMaterial == BlockMaterial.Wood ||
                        targetGenerator.blockMaterial == BlockMaterial.Glass;
            }
            float breakNeedTime = targetGenerator.hardness * (match ? 1.5f : 5f) / speed;

            if (breakNeedTime == 0)
            {
                BreakBlock(WireFrameHelper.pos);
            }
            else if (breakNeedTime > 0)
            {
                int curStage = Mathf.FloorToInt(breakingTime / (breakNeedTime / 12));
                if (stage != curStage)
                {
                    stage = curStage;
                    UpdateBreakingEffect(targetGenerator, WireFrameHelper.pos, stage);
                }
                if (stage >= 10)
                {
                    BreakBlock(WireFrameHelper.pos);
                    if (handItem != null && handItem.durability != -1)
                    {
                        InventorySystem.items[ItemSelectPanel.curIndex].damage++;

                        if (InventorySystem.items[ItemSelectPanel.curIndex].damage >= handItem.durability)
                        {
                            InventorySystem.items[ItemSelectPanel.curIndex].id     = null;
                            InventorySystem.items[ItemSelectPanel.curIndex].damage = 0;
                            InventorySystem.items[ItemSelectPanel.curIndex].count  = 0;
                            SoundManager.Play2DSound("Player_Tool_Break");
                        }
                        ItemSelectPanel.instance.RefreshUI();
                    }
                }
            }
            else
            {
                breakingTime = 0;
                HideBreakingEffect();
            }
        }
        else
        {
            breakingTime = 0;
            HideBreakingEffect();
        }
    }