示例#1
0
    void PickupThrow()
    {
        if (pickupedObject != null)
        {
            pickupedObject.OnThrow();
            pickupedObject = null;
        }
        else
        {
            Debug.Log("uh");
            RaycastHit hit;
            if (Physics.Raycast(raycastPoint.position, transform.TransformDirection(Vector3.forward), out hit, raycastLength))
            {
                Debug.Log(hit.transform.name);

                pickupedObject = hit.transform.GetComponent <IPickupable>();

                if (pickupedObject != null)
                {
                    Debug.Log("Pickup");
                    hit.transform.GetComponent <IPickupable>().PickUp();
                }
            }

            Debug.DrawRay(raycastPoint.transform.position, transform.TransformDirection(Vector3.forward) * hit.distance,
                          Color.yellow);
        }
    }
    private void OnTriggerEnter2D(Collider2D collision)
    {
        IPickupable pickupable = collision.gameObject.GetComponent <IPickupable>();
        //Debug.Log("Trigger: " + collision.gameObject.name);
        Checkpoint c = collision.GetComponent <Checkpoint>();

        if (collision.gameObject.GetComponent <Spike>() != null)
        {
            collision.gameObject.GetComponent <Spike>().MakeDamage(this);
        }

        if (pickupable != null)
        {
            pickupable.OnPickUp(this);
        }
        else if (collision.gameObject.GetComponent <IHazard>() != null)
        {
            collision.gameObject.GetComponent <IHazard>().MakeDamage(this);
        }
        else if (c != null)
        {
            if (!c.activated)
            {
                _checkpointPosition = collision.GetComponent <Checkpoint>().GetCheckpointPosition();
                c.ActivateCheckpoint();
            }
        }
        else if (collision.gameObject.GetComponent <IMovingPlatform>() != null)
        {
            Debug.Log("Parent");
            collision.gameObject.GetComponent <IMovingPlatform>().ParentToPlatform(this.gameObject.transform);
        }
    }
        private void InteractWithItemObject(ItemObject itemObject)
        {
            Debug.Assert(itemObject.Item != null);
            IUsable     usable     = itemObject.Item as IUsable;
            IPickupable pickupable = itemObject.Item as IPickupable;
            IEquipable  equipable  = itemObject.Item as IEquipable;
            IStackable  stackable  = itemObject.Item as IStackable;

            if (usable != null)
            {
                usable.OnUse(_stats, itemObject);
            }
            else if (pickupable != null)
            {
                if (equipable != null && equipable.IsDurable && _equipment.EquipmentTable[equipable.EquipmentType].IsEmpty)
                {
                    equipable.OnEquip(_equipment, _stats);
                }
                else if (stackable != null)
                {
                    stackable.OnStack(_inventory);
                }
                else
                {
                    pickupable.OnPutInInventory(_inventory);
                }
                pickupable.OnRemoveFromGround(itemObject);
            }
        }
    public void PickUp(IPickupable item) // при поднятии предмета
    {
        switch (item.ItemType)
        {
        case PickUpItemType.Healthpack:
        {
            if (item is Healthpack healthPack)
            {
                _endurance += healthPack.HealingPower;         // если подняли лечилку, то увеличиваем здоровье
                EnduranceChanged.Invoke(_endurance);
            }
            break;
        }

        case PickUpItemType.Booster:
        {
            if (item is Boost booster)
            {
                StartCoroutine(BoostPickedUp(booster.BoostTime));         // на время включаем буст
            }
            break;
        }

        default:
            break;
        }
    }
        private void LeftClickItemIcon(object[] eventParams)
        {
            Debug.Assert(eventParams.Length == 1 && eventParams[0] is ItemIcon);
            ItemIcon     itemIcon     = (ItemIcon)eventParams[0];
            SlotPosition slotPosition = itemIcon.Position;
            IPickupable  pickupable   = itemIcon.Item as IPickupable;
            IEquipable   equipable    = itemIcon.Item as IEquipable;

            if (_airItem.IsEmpty)
            {
                if (itemIcon.IsEquipmentIcon)
                {
                    equipable.OnUnequip(_equipment, _stats);
                }
                else if (itemIcon.Item is IStackable)
                {
                    EventManager.TriggerEvent(EventName.OPEN_SPLIT_SCREEN, eventParams);
                    return;
                }
                else
                {
                    pickupable.OnRemoveFromInventory(_inventory, slotPosition);
                }
                pickupable.OnPutInAir(_airItem, slotPosition);
            }
            else
            {
                IPickupable pickupableAir = _airItem.Item as IPickupable;
                if (slotPosition.RowIndex == EquipmentSlot.EQUIPMENT_SLOT_ROW_INDEX)
                {
                    IEquipable equipableAir = _airItem.Item as IEquipable;
                    if (equipableAir == null)
                    {
                        Debug.Log("Not equipable");
                        return;
                    }
                    if ((Equipment.EquipmentType)slotPosition.SlotIndex != equipableAir.EquipmentType)
                    {
                        Debug.Log("Not the same equipment type");
                        return;
                    }
                    if (equipable.IsDurable == false)
                    {
                        Debug.Log("Not durable");
                    }
                    equipable.OnUnequip(_equipment, _stats);
                    pickupableAir.OnRemoveFromAir(_airItem);
                    equipableAir.OnEquip(_equipment, _stats);
                    pickupable.OnPutInAir(_airItem, slotPosition);
                }
                else
                {
                    pickupable.OnRemoveFromInventory(_inventory, slotPosition);
                    pickupableAir.OnRemoveFromAir(_airItem);
                    pickupableAir.OnPutInInventory(_inventory, slotPosition);
                    pickupable.OnPutInAir(_airItem, slotPosition);
                }
            }
        }
        private void UnequipItemNoDurability(object[] eventParams)
        {
            Debug.Assert(eventParams.Length == 1 && eventParams[0] is Item);
            IPickupable pickupable = eventParams[0] as IPickupable;
            IEquipable  equipable  = eventParams[0] as IEquipable;

            equipable.OnUnequip(_equipment, _stats);
            pickupable.OnPutInInventory(_inventory);
        }
    private void OnTriggerEnter(Collider other)
    {
        IPickupable pickup = other.gameObject.GetInterface <IPickupable>();

        if (pickup != null)
        {
            pickup.Pickup(Owner);
        }
    }
        private void LeftClickWorld(object[] eventParams)
        {
            if (_airItem.IsEmpty)
            {
                return;
            }

            IPickupable pickupableAir = _airItem.Item as IPickupable;

            pickupableAir.OnRemoveFromAir(_airItem);
            pickupableAir.OnPutOnGround(transform.position);
        }
示例#9
0
 public void InteractWith(PlayerController playerController)
 {
     if (playerController.CurrentPickup != null)
     {
         IPickupable garbage             = playerController.CurrentPickup;
         garbage.GetTransform().position = target.position;
         PlayAnimation();
     }
     else
     {
         // Feedback nothing to throw away
     }
 }
示例#10
0
    private void Update()
    {
        bool justClicked = Input.GetMouseButtonDown(0);
        bool clicked     = Input.GetMouseButton(0);

        var raycastTarget = Raycast();

        if (pickup == null)
        {
            if (justClicked)
            {
                if (raycastTarget == null)
                {
                    return;
                }

                var pickupable = raycastTarget.GetComponent <IPickupable>();
                var clickable  = raycastTarget.GetComponent <IClickable>();


                if (pickupable != null)
                {
                    pickup = pickupable;
                    pickup.PickUp();
                }
                else
                {
                    clickable?.Click();
                }
            }
        }
        else
        {
            if (pickup.GetTransform() == null)
            {
                pickup = null;
                return;
            }

            Vector3 force = (GetMousePos() - pickup.GetTransform().position) * holdForce * Time.deltaTime;

            pickup.GetRigidbody().AddForce(force);
            pickup.GetRigidbody().velocity = pickup.GetRigidbody().velocity * 0.9f;

            if (!clicked)
            {
                pickup.Release();
                pickup = null;
            }
        }
    }
示例#11
0
 void Pickup(GameObject obj)
 {
     if (currentMode == PlayerMode.PLAYER)
     {
         Rigidbody2D picked = obj.GetComponent <Rigidbody2D> ();
         pickedUp = obj.GetComponent <IPickupable>();
         picked.transform.localRotation = Quaternion.identity;
         picked.velocity             = new Vector2(0f, 0f);
         picked.bodyType             = RigidbodyType2D.Kinematic;
         picked.constraints          = RigidbodyConstraints2D.FreezeAll;
         obj.transform.parent        = transform;
         obj.transform.localPosition = new Vector3(0f, 0.52f, 0f);
         currentMode = PlayerMode.PICKUP;
     }
 }
示例#12
0
 void OnTriggerStay2D(Collider2D coll)
 {
     if (coll.gameObject.GetComponent <IPickupable> () != null && Input.GetKeyDown(KeyCode.Joystick1Button17) && pickedUp == null)
     {
         coll.gameObject.GetComponent <IPickupable> ().Pickup(gameObject);
     }
     if (coll.gameObject.GetComponent <IStashTarget> () != null && Input.GetKeyDown(KeyCode.Joystick1Button17) && pickedUp != null)
     {
         if (pickedUp.GetGameObject().GetComponent <IStashable> () != null)
         {
             coll.gameObject.GetComponent <IStashTarget> ().StashInside(pickedUp.GetGameObject().GetComponent <IStashable>());
             pickedUp.GetGameObject().transform.parent = null;
             pickedUp.GetGameObject().SetActive(false);
             pickedUp = null;
         }
     }
 }
示例#13
0
        private void DropItem(object[] eventParams)
        {
            Debug.Assert(eventParams.Length == 1 && eventParams[0] is ItemIcon);
            ItemIcon     itemIcon     = (ItemIcon)eventParams[0];
            SlotPosition slotPosition = itemIcon.Position;
            IPickupable  pickupable   = itemIcon.Item as IPickupable;
            IEquipable   equipable    = itemIcon.Item as IEquipable;

            if (slotPosition.RowIndex == EquipmentSlot.EQUIPMENT_SLOT_ROW_INDEX)
            {
                equipable.OnUnequip(_equipment, _stats);
            }
            else
            {
                pickupable.OnRemoveFromInventory(_inventory, itemIcon.Position);
            }
            pickupable.OnPutOnGround(transform.position);
        }
示例#14
0
        private void ReturnAirItem(object[] eventParams)
        {
            if (_airItem.IsEmpty)
            {
                return;
            }

            SlotPosition originalPosition = _airItem.OriginalPosition;
            Item         itemAir          = _airItem.Item;
            IPickupable  pickupableAir    = itemAir as IPickupable;
            IEquipable   equipableAir     = itemAir as IEquipable;
            IStackable   stackableAir     = itemAir as IStackable;

            pickupableAir.OnRemoveFromAir(_airItem);

            if (originalPosition.RowIndex == EquipmentSlot.EQUIPMENT_SLOT_ROW_INDEX)
            {
                Equipment.EquipmentType equipmentType = (Equipment.EquipmentType)originalPosition.SlotIndex;

                if (_equipment.EquipmentTable[equipmentType].IsEmpty)
                {
                    equipableAir.OnEquip(_equipment, _stats);
                }
                else
                {
                    pickupableAir.OnPutInInventory(_inventory);
                }
            }
            else
            {
                if (stackableAir != null)
                {
                    stackableAir.OnStack(_inventory, originalPosition);
                }
                else if (_inventory.IsItemEmpty(originalPosition))
                {
                    pickupableAir.OnPutInInventory(_inventory, originalPosition);
                }
                else
                {
                    pickupableAir.OnPutInInventory(_inventory);
                }
            }
        }
        public void ConsumeItem(SlotPosition slotPosition)
        {
            Item        item       = GetItem(slotPosition);
            IPickupable pickupable = item as IPickupable;
            IStackable  stackable  = item as IStackable;

            if (stackable != null)
            {
                stackable.Count -= 1;
            }
            if (stackable == null || stackable.Count == 0)
            {
                pickupable.OnRemoveFromInventory(this, slotPosition);
            }
            UpdateCapacity();

            EventManager.TriggerEvent(EventName.UPDATE_INVENTORY);

            Debug.Log(this.ToString());
        }
示例#16
0
        private void EquipItem(object[] eventParams)
        {
            Debug.Assert(eventParams.Length == 1 && eventParams[0] is ItemIcon);

            if (_airItem.IsEmpty == false)
            {
                Debug.Log("Air Item is not null");
                return;
            }

            ItemIcon    itemIcon   = (ItemIcon)eventParams[0];
            IPickupable pickupable = itemIcon.Item as IPickupable;
            IEquipable  equipable  = itemIcon.Item as IEquipable;

            if (equipable == null)
            {
                Debug.Log("Not equipable");
                return;
            }
            if (equipable.IsDurable == false)
            {
                Debug.Log("Not durable");
            }

            if (itemIcon.IsEquipmentIcon)
            {
                equipable.OnUnequip(_equipment, _stats);
                pickupable.OnPutInInventory(_inventory);
            }
            else
            {
                Item equippedItem = _equipment.EquipmentTable[equipable.EquipmentType].Item;
                pickupable.OnRemoveFromInventory(_inventory, itemIcon.Position);
                if (equippedItem != null)
                {
                    ((IEquipable)equippedItem).OnUnequip(_equipment, _stats);
                    ((IPickupable)equippedItem).OnPutInInventory(_inventory, itemIcon.Position);
                }
                equipable.OnEquip(_equipment, _stats);
            }
        }
示例#17
0
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (!collision.CompareTag("WeaponGround"))
        {
            IPickupable itemComponent = collision.GetComponent <IPickupable>();
            if (itemComponent != null && loot == null)
            {
                Physics2D.IgnoreCollision(collider2D, collision);
                loot = collision.gameObject;
                GameObject newItem = Instantiate(collision.gameObject, EnemyTorso.transform);

                newItem.GetComponent <Collider2D>().enabled    = false;
                newItem.GetComponent <MonoBehaviour>().enabled = false;
                newItem.transform.localPosition = Vector3.left * .60f;
                newItem.transform.right         = newItem.transform.up;
                newItem.transform.localScale   /= 4;

                collision.gameObject.SetActive(false);
            }
        }
    }
示例#18
0
    void OnAction()
    {
        IPickupable target = targetRef.Get();

        if (carrying)
        {
            target.OnDrop(this);
            carrying = false;
        }
        else
        {
            if (target.CanPickup(this))
            {
                target.OnPickup(this);
                carrying = true;
            }
            else
            {
                Debug.Log("Woops - can't pick up " + target.GetName() + " yet");
            }
        }
    }
示例#19
0
    void OnTriggerStay2D(Collider2D collider)
    {
        if (collider.gameObject.CompareTag("Checkout"))
        {
            message = "Press E or Mouse 2 to Checkout";
            if (Input.GetKeyDown(KeyCode.Mouse1) || Input.GetKeyDown(KeyCode.E))
            {
                UIManager.instance.EndGame(true, collider.gameObject.name);
                message = "";
            }
        }

        else
        {
            if (collider.CompareTag("WeaponGround"))
            {
                message = "Press E or Mouse 2 to Equip";
                if (Input.GetKeyDown(KeyCode.Mouse1) || Input.GetKeyDown(KeyCode.E))
                {
                    IPickupable itemComponent = collider.GetComponent <IPickupable>();
                    if (itemComponent != null)
                    {
                        DropWeapon();
                        itemComponent.pickUp();
                        defaultWeapon.gameObject.SetActive(false);
                        message = "";
                    }
                }
            }
            else
            {
                IPickupable itemComponent = collider.GetComponent <IPickupable>();
                if (itemComponent != null)
                {
                    itemComponent.pickUp();
                }
            }
        }
    }
        public void Pickup(IPickupable target)
        {
            // Drop carried thing so new thing can be picked up
            if (Carrying)
            {
                Drop();
            }
            else
            {
                // If not carrying, hand will be disabled so need to enable it
                Enable();
            }

            // Position will be the position of last Drop() so need to move to cursor again -> otherwise, won't move til next update
            MoveToCursor();

            held = target;
            previousParent = target.gameObject.transform.parent;            // Remember previous parent so hierarchy can be restored on Drop()
            held.gameObject.transform.position = transform.position;        // Set object as child and match position
            held.gameObject.transform.parent = transform;
            held.OnPickUp();
        }
示例#21
0
        private void LeftClickItemSlot(object[] eventParams)
        {
            Debug.Assert(eventParams.Length == 1 && eventParams[0] is SlotPosition);
            SlotPosition slotPosition = (SlotPosition)eventParams[0];

            if (_airItem.IsEmpty)
            {
                return;
            }

            IPickupable pickupable = _airItem.Item as IPickupable;

            if (slotPosition.RowIndex == EquipmentSlot.EQUIPMENT_SLOT_ROW_INDEX)
            {
                IEquipable equipable = _airItem.Item as IEquipable;
                if (equipable == null)
                {
                    Debug.Log("Not equipable");
                    return;
                }
                if ((Equipment.EquipmentType)slotPosition.SlotIndex != equipable.EquipmentType)
                {
                    Debug.Log("Not the same equipment type");
                    return;
                }
                if (equipable.IsDurable == false)
                {
                    Debug.Log("Not durable");
                }
                pickupable.OnRemoveFromAir(_airItem);
                equipable.OnEquip(_equipment, _stats);
            }
            else
            {
                pickupable.OnRemoveFromAir(_airItem);
                pickupable.OnPutInInventory(_inventory, slotPosition);
            }
        }
示例#22
0
        private void SplitStackableItem(object[] eventParams)
        {
            Debug.Assert(eventParams.Length == 2 && eventParams[0] is ItemIcon && eventParams[1] is int);
            ItemIcon     itemIcon     = (ItemIcon)eventParams[0];
            int          splitCount   = (int)eventParams[1];
            Item         item         = itemIcon.Item;
            SlotPosition slotPosition = itemIcon.Position;
            IStackable   stackable    = (IStackable)item;

            if (splitCount == stackable.Count)
            {
                IPickupable pickupable = (IPickupable)item;
                pickupable.OnRemoveFromInventory(_inventory, slotPosition);
                pickupable.OnPutInAir(_airItem, slotPosition);
            }
            else
            {
                Item splitItem = item.Copy();
                ((IStackable)splitItem).Count = splitCount;
                ((IPickupable)splitItem).OnPutInAir(_airItem, slotPosition);
                stackable.OnSplit(_inventory, slotPosition, splitCount);
            }
        }
示例#23
0
    public IEnumerator TestPillCooldown()
    {
        GameObject pillGo = new GameObject();

        pillGo.AddComponent <Pill>();
        IPickupable pickup = pillGo.GetComponent <IPickupable>();

        Assert.IsNotNull(pickup);

        TestGrabber grabber = new TestGrabber();

        Assert.IsTrue(pickup.CanPickup(grabber));
        pickup.OnPickup(grabber);
        Assert.IsFalse(pickup.CanPickup(grabber));

        pickup.OnDrop(grabber);
        // Should not be pickupable for 1 second of cooldown.
        Assert.IsFalse(pickup.CanPickup(grabber));

        // Wait for cooldown - then should be pickupable.
        yield return(new WaitForSeconds(1.1f));

        Assert.IsTrue(pickup.CanPickup(grabber));
    }
示例#24
0
        private void Update()
        {
            RaycastHit hitInfo;
            Ray        ray = Camera.main.ScreenPointToRay(new Vector2(Screen.width * 0.5f, Screen.height * 0.5f));

            if (Physics.Raycast(ray, out hitInfo, _maxPickupRange, _pickableItemLayers))
            {
                IPickupable pickableItem = hitInfo.collider.GetComponent <IPickupable>();

                // Show text that tells the user to press a button to pickup.
                _pickupText.gameObject.SetActive(true);
                _pickupText.text = string.Format("Press 'LMB' to pickup <color=#EB6721>{0}</color>", pickableItem.DisplayName);

                if (Input.GetMouseButtonDown(0))
                {
                    // Pickup item
                    pickableItem.Pickup(gameObject);
                }
            }
            else
            {
                _pickupText.gameObject.SetActive(false);
            }
        }
示例#25
0
 public override void HoldObject(IPickupable pickup)
 {
     throw new NotImplementedException();
 }
 public void Pickup(IPickupable held, Action OnDrop, Action OnCancel)
 {
     dropCallback = OnDrop;
     cancelCallback = OnCancel;
     Pickup(held);
 }
示例#27
0
 public void SwapItem(IPickupable otherItem)
 {
     PickedUpObj.GetComponent <IPickupable>().Drop(this);
     otherItem.Pickup(this);
 }
 void Clear()
 {
     held = null;
     previousParent = null;
     dropCallback = null;
     cancelCallback = null;
 }
 public abstract void HoldObject(IPickupable pickup);
示例#30
0
 private void DoPickup(IPickupable pickupable, CookingPlayer pawn)
 {
     pickupable.HoldingPlayer = pawn;
     CarriedProp = pickupable as ModelEntity;
 }
示例#31
0
        private bool CanPickup(IPickupable pickupable)
        {
            Log.Info("Can Pickup called");

            return(LastPickup.Relative >= 1 && !pickupable.HoldingPlayer.IsValid && !CarriedProp.IsValid);
        }
 public void Pickup(IPickupable held, Action OnDrop)
 {
     dropCallback = OnDrop;
     Pickup(held);
 }
示例#33
0
 public void Throw()
 {
     myAnim.SetBool("throwing", true);
     pickedUp.Throw(facingRight, 10f);
     pickedUp = null;
 }
示例#34
0
 private void CheckPickup()
 {
     if (actionButtonDown)
     {
         //If we have an object...
         if (currentItem != null)
         {
             //And we look at something...
             IHolder    holder = null;
             RaycastHit hit;
             if (UnityEngine.Physics.Raycast(cam.transform.position, cam.transform.forward, out hit, pickupRange))
             {
                 //If it's a holder
                 holder = hit.collider.gameObject.GetComponent <IHolder>();
             }
             //If it isn't null..
             if (holder != null && !holder.CheckHoldingObject())
             {
                 //Make it hold our released object
                 IPickupable releasedObject = ReleaseObject();
                 releasedObject.GetGameObject().transform.position = hit.point + hit.normal * 0.1f;
                 holder.HoldObject(releasedObject);
                 audioSource.Play();
             }
             else
             {
                 //Otherwise release our object
                 IPickupable releasedItem       = ReleaseObject();
                 GameObject  releasedGameObject = releasedItem.GetGameObject();
                 if (hit.collider != null)
                 {
                     releasedGameObject.transform.position = hit.point + hit.normal * 0.1f;
                     releasedGameObject.transform.rotation = Quaternion.LookRotation(hit.normal, Vector3.up);
                 }
             }
         }
         else
         {
             //If we don't have an object and we are looking at something...
             RaycastHit hit;
             if (UnityEngine.Physics.Raycast(cam.transform.position, cam.transform.forward, out hit, pickupRange))
             {
                 //If the item is a pickup...
                 IPickupable pickup = hit.collider.gameObject.GetComponent <IPickupable>();
                 if (pickup != null)
                 {
                     //Pick up the object
                     HoldObject(pickup);
                 }
                 else
                 {
                     //And we look at a holder...
                     IHolder holder = hit.collider.gameObject.GetComponent <IHolder>();
                     if (holder != null)
                     {
                         //And it holds an object...
                         if (holder.CheckHoldingObject())
                         {
                             //Get it from the holder
                             IPickupable releasedObject = holder.ReleaseObject();
                             releasedObject.GetGameObject().transform.position = hit.point + hit.normal * 0.1f;
                             HoldObject(releasedObject);
                         }
                     }
                 }
             }
         }
     }
 }