예제 #1
0
 private void LaundryGarmentReleased(LaundryGarment laundryGarment)
 {
     if (ironingBoard.garmentOnBoard == null && boardTriggerCollider.bounds.Contains(laundryGarment.transform.position))
     {
         PlaceGarmentOnBoard(laundryGarment);
     }
 }
예제 #2
0
 private void OnTriggerExit2D(Collider2D collision)
 {
     if (collision.gameObject.layer == LayerMask.NameToLayer("LaundryGarment"))
     {
         LaundryGarment laundryGarment = collision.gameObject.GetComponentInParent <LaundryGarment>();
         if (laundryGarment != null && laundryGarment.gameObject.activeSelf)
         {
             if (laundryGarment.IsHeld)
             {
                 laundryGarment.OnFoldingSurface = false;
             }
             else
             {
                 Rigidbody2D rb = laundryGarment.GetComponent <Rigidbody2D>();
                 //Does the laundryGarment's new collider touch the trigger?
                 if (laundryGarment.colliders[laundryGarment.garment.currentFoldingStep].bounds.Intersects(GetComponent <Collider2D>().bounds))
                 {
                     rb.gravityScale = 0.0f;
                 }
                 else
                 {
                     rb.gravityScale = 1.0f;
                 }
             }
         }
     }
 }
예제 #3
0
    private void OnTriggerStay2D(Collider2D collision)
    {
        LaundryGarment laundryGarment = collision.GetComponentInParent <LaundryGarment>();

        if (laundryGarment != null && IsHeld(laundryGarment) && (heldLaundryGarment == null || laundryGarment.GetInstanceID() != heldLaundryGarment.GetInstanceID()))
        {
            heldLaundryGarment = laundryGarment;
            lastPosition       = laundryGarment.transform.position;
        }
        else if (laundryGarment != null && !IsHeld(laundryGarment) && (heldLaundryGarment != null && laundryGarment.GetInstanceID() == heldLaundryGarment.GetInstanceID()))
        {
            heldLaundryGarment = null;
        }
        else if (laundryGarment != null && IsHeld(laundryGarment) && (heldLaundryGarment != null && laundryGarment.GetInstanceID() == heldLaundryGarment.GetInstanceID()))
        {
            ParticleSystem.EmissionModule emission = bubbles.emission;
            emission.enabled = washTub.Scrub(laundryGarment.garment, Vector2.Distance(laundryGarment.transform.position, lastPosition));


            ParticleSystem.MainModule main = bubbles.main;
            if (!laundryGarment.garment.Clean)
            {
                main.startColor = Color.Lerp(maxDirtyColor, minDirtyColor, laundryGarment.garment.Cleanliness);
            }
            else
            {
                main.startColor = cleanColor;
            }

            bubbles.transform.position = laundryGarment.transform.position;

            laundryGarment.UpdateAppearance();
            lastPosition = laundryGarment.transform.position;
        }
    }
예제 #4
0
    private IEnumerator DelayedAddToBasket(LaundryGarment laundryGarment)
    {
        //Wait for a frame, in case an overlapping BasketView captures the garment first
        yield return(new WaitForSeconds(0));

        //If the garment was captured by a BasketView, ignore it; otherwise, add it to the basket
        if (laundryGarment != null && laundryGarment.gameObject.activeSelf)
        {
            if (!(placedInBasketView && laundryGarment.GetInstanceID() == placedInBasketViewID))
            {
                if (basketCollider.bounds.Contains(laundryGarment.transform.position))
                {
                    if (basket.AddGarment(laundryGarment.garment))
                    {
                        AudioManager.instance.PlaySound(laundryGarment.garment.fabric.dropSound);
                        laundryGarment.ReturnToPool();
                        animator.SetTrigger("BasketInput");
                    }
                    else
                    {
                        BasketIsFull();
                    }
                }
            }
        }

        //Reset 'placed in basket view' variables
        placedInBasketView   = false;
        placedInBasketViewID = 0;
    }
    private void GrabGarmentFromContainer(Garment garment)
    {
        LaundryGarment laundryGarment = garment.CreateLaundryGarment(cursor.transform.position, cursor.transform.rotation, activeWorkStation.laundryTaskArea.transform);

        target = laundryGarment;
        Grab();
    }
예제 #6
0
 //Returns true is the laundryGarment is currently being held by the cursor.
 private bool IsHeld(LaundryGarment laundryGarment)
 {
     if (LaundryTaskController.instance.grabbedObject != null)
     {
         return(laundryGarment.GetInstanceID() == LaundryTaskController.instance.grabbedObject.GetInstanceID());
     }
     return(false);
 }
예제 #7
0
    private void OnTriggerEnter2D(Collider2D collision)
    {
        LaundryGarment laundryGarment = collision.GetComponentInParent <LaundryGarment>();

        if (laundryGarment != null)
        {
            laundryGarment.garment.Dry = false;
            laundryGarment.UpdateAppearance();
        }
    }
예제 #8
0
    void OnLaundryGarmentReleased(LaundryGarment laundryGarment)
    {
        if (!Locked)
        {
            //If BasketView is open
            if (basketView.activeSelf)
            {
                bool alreadyInBasket  = laundryGarments.Contains(laundryGarment);
                bool withinBasketView = basketView.GetComponent <Collider2D>().bounds.Contains(laundryGarment.transform.position);

                if (alreadyInBasket && withinBasketView)
                {
                    Rigidbody2D rb = laundryGarment.GetComponent <Rigidbody2D>();
                    rb.gravityScale = 0.0f;
                    rb.velocity     = Vector3.zero;
                    AudioManager.instance.PlaySound(laundryGarment.garment.fabric.dropSound);
                    if (PlacedInBasketView != null)
                    {
                        PlacedInBasketView(laundryGarment);
                    }
                }
                else if (!alreadyInBasket && withinBasketView)
                {
                    if (basket.AddGarment(laundryGarment.garment, laundryGarment.transform.position - transform.position))
                    {
                        laundryGarment.transform.parent = transform;
                        Rigidbody2D rb = laundryGarment.GetComponent <Rigidbody2D>();
                        rb.gravityScale = 0.0f;
                        rb.velocity     = Vector3.zero;
                        AudioManager.instance.PlaySound(laundryGarment.garment.fabric.dropSound);
                        laundryGarments.Add(laundryGarment);
                    }
                    else
                    {
                        BasketIsFull();
                    }
                    if (PlacedInBasketView != null)
                    {
                        PlacedInBasketView(laundryGarment);
                    }
                }
                else if (alreadyInBasket && !withinBasketView)
                {
                    basket.RemoveGarment(laundryGarment.garment);
                    laundryGarments.Remove(laundryGarment);
                }
            }
            //If BasketView is closed
            //Wait for a frame, in case an overlapping BasketView captures the garment first
            else
            {
                StartCoroutine(DelayedAddToBasket(laundryGarment));
            }
        }
    }
예제 #9
0
 private void OnLaundryGarmentReleased(LaundryGarment laundryGarment)
 {
     if (col.bounds.Contains(laundryGarment.transform.position))
     {
         if (clothesline.HangGarment(index, laundryGarment.garment))
         {
             AudioManager.instance.PlaySound(laundryGarment.garment.fabric.dropSound);
             laundryGarment.ReturnToPool();
         }
     }
 }
예제 #10
0
 private void UpdateContents()
 {
     ClearContents();
     for (int i = 0; i < basket.contents.Count; i++)
     {
         LaundryGarment laundryGarment = basket.contents[i].CreateLaundryGarment(transform.position + 0.5f * basket.positions[i], transform.rotation, GarmentContainer.transform);
         laundryGarment.transform.localScale = new Vector3(0.6f, 0.6f, 1.0f);
         Rigidbody2D rb = laundryGarment.GetComponent <Rigidbody2D>();
         rb.simulated = false;
     }
 }
예제 #11
0
 private void ClearContents()
 {
     for (int i = GarmentContainer.transform.childCount - 1; i >= 0; i--)
     {
         LaundryGarment laundryGarment = GarmentContainer.transform.GetChild(i).GetComponent <LaundryGarment>();
         laundryGarment.transform.localScale = new Vector3(1.0f, 1.0f, 1.0f);
         Rigidbody2D rb = laundryGarment.GetComponent <Rigidbody2D>();
         rb.simulated = true;
         laundryGarment.ReturnToPool();
     }
 }
예제 #12
0
 private void OnLaundryGarmentReleased(LaundryGarment laundryGarment)
 {
     //Place garment on machine
     if (col.bounds.Contains(laundryGarment.transform.position))
     {
         if (sewingMachine.PlaceGarment(laundryGarment.garment))
         {
             AudioManager.instance.PlaySound(laundryGarment.garment.fabric.dropSound);
             laundryGarment.ReturnToPool();
         }
     }
 }
예제 #13
0
 public LaundryGarment SpawnLaundryGarment(Vector3 position, Transform parent, Garment garment)
 {
     for (int i = 0; i < LaundryGarmentPools.Length; i++)
     {
         if (LaundryGarmentPools[i].GarmentPoolType == garment.type)
         {
             LaundryGarment laundryGarment = LaundryGarmentPools[i].GetLaundryGarment(position, parent, garment);
             laundryGarment.UpdateAppearance();
             return(laundryGarment);
         }
     }
     return(null);
 }
예제 #14
0
    private void EnableBasketView()
    {
        basketCollider.enabled = false;
        basketView.SetActive(true);
        OpenBasketView(this);
        //Instantiate all Garments on top of it in their given positions on the Basket object.
        laundryGarments = new List <LaundryGarment>();

        for (int i = 0; i < basket.contents.Count; i++)
        {
            LaundryGarment laundryGarment = basket.contents[i].CreateLaundryGarment(basket.positions[i] + transform.position, transform.rotation, transform);
            laundryGarments.Add(laundryGarment);
        }
    }
 private void OnTriggerEnter2D(Collider2D collision)
 {
     if (collision.gameObject.layer == LayerMask.NameToLayer("LaundryGarment"))
     {
         LaundryGarment laundryGarment = collision.GetComponentInParent <LaundryGarment>();
         if (laundryGarment != null && !laundryGarment.IsHeld && laundryGarment.GetComponent <Rigidbody2D>().gravityScale != 0.0f)
         {
             if (sewingMachine.PlaceGarment(laundryGarment.garment))
             {
                 AudioManager.instance.PlaySound(laundryGarment.garment.fabric.dropSound);
                 laundryGarment.ReturnToPool();
             }
         }
     }
 }
예제 #16
0
    protected virtual void OnLaundryGarmentReleased(LaundryGarment laundryGarment)
    {
        if (HasGravity)
        {
            laundryGarment.GetComponent <Rigidbody2D>().gravityScale = 1.0f;
        }
        else
        {
            laundryGarment.GetComponent <Rigidbody2D>().gravityScale = 0.0f;
        }

        if (LaundryGarmentReleased != null)
        {
            LaundryGarmentReleased(laundryGarment);
        }
    }
예제 #17
0
    public LaundryGarment GetLaundryGarment(Vector3 position, Transform parent, Garment garment)
    {
        GameObject obj = SpawnObject(position);

        if (obj != null)
        {
            LaundryGarment laundryGarment = obj.GetComponent <LaundryGarment>();
            laundryGarment.transform.parent = parent;
            laundryGarment.garment          = garment;
            return(laundryGarment);
        }

        //In the unlikely event that there are no LaundryGarments left in the pool, instantiate a new one
        Instantiate(garment.laundryGarmentPrefab, position, Quaternion.identity, parent);

        return(null);
    }
예제 #18
0
 private void OnLaundryGarmentReleased(LaundryGarment laundryGarment)
 {
     //If released within open door bounds, add garment to machine
     if (dryer.state == DryerState.DoorOpen && GetComponent <Collider2D>().bounds.Contains(laundryGarment.transform.position))
     {
         if (dryer.AddGarment(laundryGarment.garment))
         {
             AudioManager.instance.PlaySound(laundryGarment.garment.fabric.dropSound);
             laundryGarment.ReturnToPool();
             animator.SetTrigger("BasketInput");
         }
         else
         {
             animator.SetTrigger("BasketFull");
         }
     }
 }
예제 #19
0
    public void ReturnToPool(LaundryGarment laundryGarment)
    {
        GarmentType type = laundryGarment.garment.type;

        Rigidbody2D rb = laundryGarment.GetComponent <Rigidbody2D>();

        rb.gravityScale = 0.0f;
        rb.velocity     = Vector3.zero;

        laundryGarment.garment = null;
        for (int i = 0; i < LaundryGarmentPools.Length; i++)
        {
            if (LaundryGarmentPools[i].GarmentPoolType == type)
            {
                laundryGarment.transform.parent = LaundryGarmentPools[i].transform;
                laundryGarment.gameObject.SetActive(false);
            }
        }
    }
예제 #20
0
    private void OnLaundryGarmentReleased(LaundryGarment laundryGarment)
    {
        bool progress = false;

        switch (step)
        {
        case 1:
            if (laundryGarment.garment.Clean)
            {
                progress = true;
            }
            break;

        case 2:
            if (laundryGarment.garment.Clean && laundryGarment.garment.Dry)
            {
                progress = true;
            }
            break;

        case 3:
            if (laundryGarment.garment.Pressed)
            {
                progress = true;
            }
            break;

        case 4:
            if (laundryGarment.garment.Folded)
            {
                progress = true;
            }
            break;

        default:
            break;
        }
        if (progress && delayedNextStep == null)
        {
            delayedNextStep = DelayedNextStep(1.0f);
            StartCoroutine(delayedNextStep);
        }
    }
예제 #21
0
    private void PlaceGarmentOnBoard(LaundryGarment laundryGarment)
    {
        //Unfold garment if folded
        //If pair of socks, separate them, then spawn the extra sock as a LaundryGarment
        if (laundryGarment.garment is GarmentSock && laundryGarment.garment.Folded)
        {
            GarmentSock sock  = (GarmentSock)laundryGarment.garment;
            GarmentSock other = sock.SeparatePair();
            other.CreateLaundryGarment(laundryGarment.transform.position, laundryGarment.transform.rotation, laundryGarment.transform.parent);
        }
        laundryGarment.garment.currentFoldingStep = 0;

        ironingBoard.garmentOnBoard = laundryGarment.garment;
        AudioManager.instance.PlaySound(laundryGarment.garment.fabric.dropSound);
        laundryGarment.ReturnToPool();
        garmentRenderer.UpdateAppearance();
        pressingProgress = 0.0f;
        burnTimer        = 0.0f;
        graceTimer       = 0.0f;
    }
예제 #22
0
    private void OnTriggerStay2D(Collider2D collision)
    {
        Iron iron = collision.GetComponent <Iron>();

        if (iron != null && !iron.onIroningBoard)
        {
            iron.PlaceOnIroningBoard();
        }

        if (collision.gameObject.layer == LayerMask.NameToLayer("LaundryGarment"))
        {
            LaundryGarment laundryGarment = collision.GetComponentInParent <LaundryGarment>();
            if (laundryGarment != null && !laundryGarment.IsHeld && laundryGarment.GetComponent <Rigidbody2D>().gravityScale != 0.0f)
            {
                if (ironingBoard.garmentOnBoard == null)
                {
                    PlaceGarmentOnBoard(laundryGarment);
                }
            }
        }
    }
예제 #23
0
 private void OnTriggerStay2D(Collider2D collision)
 {
     if (!laundryBasket.Locked && !laundryBasket.basketView.activeSelf)
     {
         if (collision.gameObject.layer == LayerMask.NameToLayer("LaundryGarment"))
         {
             LaundryGarment laundryGarment = collision.GetComponentInParent <LaundryGarment>();
             if (laundryGarment != null && !laundryGarment.IsHeld && laundryGarment.GetComponent <Rigidbody2D>().gravityScale != 0.0f)
             {
                 if (laundryBasket.basket.AddGarment(laundryGarment.garment))
                 {
                     AudioManager.instance.PlaySound(laundryGarment.garment.fabric.dropSound);
                     laundryGarment.ReturnToPool();
                     animator.SetTrigger("BasketInput");
                 }
                 else
                 {
                     animator.SetTrigger("BasketFull");
                 }
             }
         }
     }
 }
예제 #24
0
    private void OnTriggerStay2D(Collider2D collision)
    {
        if (collision.gameObject.layer == LayerMask.NameToLayer("LaundryGarment"))
        {
            LaundryGarment laundryGarment = collision.gameObject.GetComponentInParent <LaundryGarment>();
            if (!laundryGarment.IsHeld)
            {
                Rigidbody2D rb = laundryGarment.GetComponent <Rigidbody2D>();
                rb.velocity     = Vector3.zero;
                rb.gravityScale = 0.0f;

                if (laundryGarment.OnFoldingSurface == table.FoldingLocked)
                {
                    laundryGarment.OnFoldingSurface = !table.FoldingLocked;
                    if (soundCoroutine == null)
                    {
                        soundCoroutine = DropSound(laundryGarment.garment.fabric.dropSound);
                        StartCoroutine(soundCoroutine);
                    }
                }
            }
        }
    }
예제 #25
0
 //When a LaundryGarment is placed in a BasketView, remember it
 private void OnPlacedInBasketView(LaundryGarment laundryGarment)
 {
     placedInBasketView   = true;
     placedInBasketViewID = laundryGarment.GetInstanceID();
 }