Esempio n. 1
0
    private void Update()
    {
        var moveForce = Vector3.zero;

        for (int i = 0; i < cats.Count; i++)
        {
            var cat       = cats[i];
            var direction = (transform.position - cat.transform.position);
            var distance  = direction.magnitude;

            if (distance > forgetRadius)
            {
                forgetCats.Add(cat);
            }
        }

        foreach (var cat in forgetCats)
        {
            cats.Remove(cat);
            if (chosenCat && chosenCat.Equals(cat))
            {
                chosenCat = null;
            }
        }
        forgetCats.Clear();

        if (chooseTimer > 0)
        {
            chooseTimer -= Time.deltaTime;
        }

        if ((!chosenCat || chooseTimer <= 0) && cats.Count > 0)
        {
            var index = Random.Range(0, cats.Count);
            chosenCat   = cats[index];
            chooseTimer = Random.Range(chooseTimeMin, chooseTimeMax);
        }

        if (chosenCat)
        {
            var chosenDirection = (transform.position - chosenCat.transform.position);
            var dirNorm         = chosenDirection.normalized;
            moveForce   += dirNorm * fleeForce;
            moveForce.y += fleeForce * 0.1f;
        }

        if (moveForce.magnitude > maxForce)
        {
            moveForce = moveForce.normalized * maxForce;
        }
        if (fleeWhileSticked || !stickyScript.stuckToVicky)
        {
            stickyScript.rb.AddForce(Time.deltaTime * moveForce);
        }

        if (!fleeWhileSticked && stickyScript.stuckToVicky)
        {
            cats.Clear();
        }
    }
Esempio n. 2
0
 public void AttachObject(ObjectStickScript objectScript)
 {
     if (chargeCooldown > 0 || stickedObjects.Contains(objectScript))
     {
         return;
     }
     AddFixedJoint(gameObject, objectScript.rb);
     stickedObjects.Add(objectScript);
     objectScript.stuckToVicky = true;
 }
Esempio n. 3
0
 public void AttachObjectToAnother(ObjectStickScript anchorScript, ObjectStickScript extendedScript)
 {
     if (chargeCooldown > 0 || !stickedObjects.Contains(anchorScript) || stickedObjects.Contains(extendedScript))
     {
         return;
     }
     AddFixedJoint(anchorScript.gameObject, extendedScript.rb);
     stickedObjects.Add(extendedScript);
     extendedScript.stuckToVicky = true;
 }