Exemple #1
0
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (birdStateEnum == BirdStateEnum.flyToSeed && collision.tag == targetTag)
        {
            colliderObject = collision.GetComponent <ColliderObject>();
            if (colliderObject == null)
            {
                Debug.LogError("collider does not exist on " + collision.gameObject);
                return;
            }
            colliderObject.RemoveCollider();
            colliderObject.transform.rotation = Quaternion.identity;
            colliderObject.transform.position = transform.Find("beak").position;
            colliderObject.transform.parent   = transform;
            birdStateEnum = BirdStateEnum.flyToNest;

            //hide nest cover
            nestCover.SetActive(false);

            flyStartPosition = transform.position;
            target           = nestStop.position;
            direction        = (target - flyStartPosition).normalized;
            speed           /= 2f;
        }
    }
    private void InitializeColliders()
    {
        if (this.colliderBuffer != null)
        {
            this.colliderBuffer.Release();
        }

        // Initialize collider buffer
        if (this.headColliders.Length > 0)
        {
            ColliderObject[] colliders = new ColliderObject[this.headColliders.Length];
            this.colliderBuffer = new ComputeBuffer(this.headColliders.Length, 32);
            for (int i = 0; i < this.headColliders.Length; i++)
            {
                // Scale collider information
                float   scale          = Mathf.Max(new float[] { this.headColliders[i].transform.lossyScale.x, this.headColliders[i].transform.lossyScale.y, this.headColliders[i].transform.lossyScale.z });
                Vector3 colliderCenter = this.headColliders[i].transform.TransformPoint(this.headColliders[i].center);
                Vector3 p1             = colliderCenter - (this.headColliders[i].transform.up * ((this.headColliders[i].height * scale / 2) - (this.headColliders[i].radius * scale)));
                Vector3 p2             = colliderCenter + (this.headColliders[i].transform.up * ((this.headColliders[i].height * scale / 2) - (this.headColliders[i].radius * scale)));

                p1 = this.transform.InverseTransformPoint(p1);
                p2 = this.transform.InverseTransformPoint(p2);

                colliders[i]    = new ColliderObject();
                colliders[i].p1 = new Vector4(p1.x, p1.y, p1.z, this.headColliders[i].radius * scale);
                colliders[i].p2 = new Vector4(p2.x, p2.y, p2.z, colliders[i].p1.w * colliders[i].p1.w);

                Debug.Log("Collider " + i + ": " + colliders[i].p1 + " " + colliders[i].p2);
            }

            this.colliderBuffer.SetData(colliders);
        }
    }
    public static void ReturnCollider(ColliderObject obj)
    {
        obj.go.SetActive(false);
        obj.go.transform.parent = tform;
        obj.mc.sharedMesh       = null;

        freeColliders.Push(obj);
    }
Exemple #4
0
 protected void OnTriggerEnter2D(Collider2D collision)
 {
     if (spiderStateEnum == SpiderStateEnum.rushToSeed && collision.tag == targetTag)
     {
         ColliderObject colliderObject = collision.GetComponent <ColliderObject>();
         colliderObject.RemoveCollider();
         colliderObject.rb.transform.SetParent(transform, true);
         spiderStateEnum = SpiderStateEnum.moveBack;
     }
 }
Exemple #5
0
 // called on children getting merged by their parent
 void OnGettingMerged()
 {
     Object.Destroy(obj.mf.mesh);
     SplitManager.ReturnObject(obj);
     if (col != null)
     {
         SplitManager.ReturnCollider(col);
         col = null;
     }
     dead = true;
 }
    public static ColliderObject GetCollider()
    {
        if (freeColliders.Count > 0)
        {
            ColliderObject free = freeColliders.Pop();
            free.go.SetActive(true);
            return(free);
        }

        return(new ColliderObject());
    }
Exemple #7
0
        static JObject SerializerSphereCollider(ColliderObject collider)
        {
            var attribute = collider.Attribute as SphereColliderAttribute;
            var jCollider = new JObject();

            jCollider["type"]       = "SPHARE";
            jCollider["frame_name"] = collider.FrameName;
            jCollider["offset"]     = collider.Offset.Serialize();
            jCollider["radius"]     = attribute.Radius;
            return(jCollider);
        }
Exemple #8
0
        static JObject SerializerBoxCollider(ColliderObject collider)
        {
            var attribute = collider.Attribute as BoxColliderAttribute;
            var jCollider = new JObject();

            jCollider["type"]       = "BOX";
            jCollider["frame_name"] = collider.FrameName;
            jCollider["offset"]     = collider.Offset.Serialize();
            jCollider["width"]      = attribute.Width;
            jCollider["height"]     = attribute.Height;
            jCollider["depth"]      = attribute.Depth;
            return(jCollider);
        }
Exemple #9
0
    public void Update()
    {
        if (hasChildren)
        {
            if (ShouldMerge())
            {
                Merge();
            }
            else
            {
                for (int i = 0; i < 8; i++)
                {
                    children[i].Update();
                }
            }
        }
        else if (!splitting && ShouldSplit())
        {
            //SplitManager.AddToSplitList(this);
            SplitCompute();
        }
        else if (splitting && childMeshCount >= 8)
        {
            SplitResolveCompute();
        }
        else
        {
            // if at max depth, have valid mesh, and close to cam then should have a collider
            if (depth == MAX_DEPTH && !emptyMesh && obj.mf.sharedMesh && GetSqrDistToCamFromCenter() < colliderGenDistance * colliderGenDistance)
            {
                if (col == null)       // if collider is null then spawn one
                {
                    col = SplitManager.GetCollider();
                    col.go.transform.SetParent(obj.go.transform, false);
                    col.go.transform.localPosition = Vector3.zero;
                    col.go.transform.localRotation = Quaternion.identity;
                    col.mc.sharedMesh = obj.mf.sharedMesh;
                }
            }
            else if (col != null)       // otherwise if have collider then return it
            {
                SplitManager.ReturnCollider(col);
                col = null;
            }
        }

        SetGeomorph();
    }
Exemple #10
0
    // Update is called once per frame
    void Update()
    {
        switch (spiderStateEnum)
        {
        case SpiderStateEnum.wait:
            if (targetObject.transform.position.y < transform.position.y &&
                targetObject.transform.position.y > transform.position.y - detectHeightRange &&
                targetObject.transform.position.x > transform.position.x - detectWidthRange &&
                targetObject.transform.position.x < transform.position.x + detectWidthRange &&
                !web.caughtSeed)
            {
                spiderStateEnum = SpiderStateEnum.rushToSeed;
                targetY         = targetObject.transform.position.y - 1;
            }
            break;

        case SpiderStateEnum.rushToSeed:
            rb.MovePosition(transform.position + -Vector3.up * moveDownSpeed * Time.deltaTime);
            if (transform.position.y < targetY)
            {
                spiderStateEnum = SpiderStateEnum.moveBack;
            }
            break;

        case SpiderStateEnum.moveBack:
            rb.MovePosition(transform.position + Vector3.up * moveUpSpeed * Time.deltaTime);
            if (transform.position.y >= originPosition.y)
            {
                ColliderObject colliderObject = targetObject.GetComponent <ColliderObject>();
                colliderObject.RecoverCollider();
                colliderObject.rb.transform.SetParent(null, true);
                spiderStateEnum = SpiderStateEnum.end;
            }
            break;
        }
    }
Exemple #11
0
        private MetaFile(JObject jObj, string projectDir)
        {
            if (!jObj.ContainsKey("mesh"))
            {
                throw new Exception("has no mesh attribute");
            }
            if (jObj["mesh"].Type != JTokenType.String)
            {
                throw new Exception("has no mesh attribute");
            }
            MeshFilePath = projectDir + jObj.Value <string>("mesh");
            if (!jObj.ContainsKey("anim"))
            {
                throw new Exception("has no anim attribute");
            }
            if (jObj["anim"].Type != JTokenType.Object)
            {
                throw new Exception("has no anim attribute");
            }
            var anims = jObj["anim"] as JObject;

            foreach (var item in anims)
            {
                int index = item.Value.Value <int>();
                animationTable.Add(index, item.Key);
            }

            if (!jObj.ContainsKey("collider"))
            {
                throw new Exception("has no collider attribute");
            }
            var jColliders = jObj["collider"];

            if (jColliders.Type != JTokenType.Object)
            {
                throw new Exception("has no collider attribute");
            }
            foreach (var item in (jColliders as JObject))
            {
                String  name      = item.Key;
                JObject jCollider = item.Value as JObject;
                var     collider  = new ColliderObject();
                collider.FrameName = jCollider.Value <string>("frame_name");

                collider.Offset = Offset.Parse(jCollider["offset"] as JObject);
                switch (jCollider.Value <string>("type"))
                {
                case "BOX":
                    collider.Type = ColliderType.Box;
                    {
                        var attribute = collider.Attribute as BoxColliderAttribute;
                        attribute.Depth  = jCollider.Value <float>("depth");
                        attribute.Height = jCollider.Value <float>("height");
                        attribute.Width  = jCollider.Value <float>("width");
                    }
                    break;

                case "SPHARE":
                    collider.Type = ColliderType.Sphere;
                    {
                        var attribute = collider.Attribute as SphereColliderAttribute;
                        attribute.Radius = jCollider.Value <float>("radius");
                    }
                    break;
                }
                collider.Name = name;
                colliderList.Add(name, collider);
            }
        }