示例#1
0
    void OnMoveCollisionEnter(EntityHeroMoveController ctrl, Collision2D coll)
    {
        //check if it's a side collision
        //if(!ctrl.isSlopSlide && (ctrl.collisionFlags & CollisionFlags.Sides) != CollisionFlags.None)
        //ctrl.moveHorizontal *= -1.0f;

        //check for heat controller
        bool isFound = false;

        for (int i = 0; i < mHeatCollides.Count; i++)
        {
            if (mHeatCollides[i].coll == coll.collider)
            {
                isFound = true;
                break;
            }
        }

        if (!isFound)
        {
            var heatCtrl = coll.collider.GetComponent <HeatController>();
            if (heatCtrl)
            {
                if (mHeatCollides.IsFull)
                {
                    mHeatCollides.Expand();
                }

                mHeatCollides.Add(new HeatController.Contact(coll.collider, heatCtrl));
            }
        }
    }
示例#2
0
    void OnCollisionEnter2D(Collision2D collision)
    {
        var coll = collision.collider;

        //check if already contained
        for (int i = 0; i < mCollisionContacts.Count; i++)
        {
            if (mCollisionContacts[i].coll == coll)
            {
                return;
            }
        }

        //add
        HeatController heat = coll.GetComponent <HeatController>();

        if (heat)
        {
            if (mCollisionContacts.IsFull)
            {
                mCollisionContacts.Expand();
            }

            mCollisionContacts.Add(new Contact(coll, heat));
        }
    }
示例#3
0
            public void Expand(string group, int num)
            {
                mCapacity += num;

                if (mCapacity > maxCapacity)
                {
                    int diff = mCapacity - maxCapacity;

                    maxCapacity = mCapacity;

                    mActives.Expand(diff);
                    mAvailable.Expand(diff);
                }

                for (int i = 0; i < num; i++)
                {
                    var pdc = PoolDataController.Generate(name, template, group, mInactiveHolder);
                    mAvailable.Add(pdc);
                }
            }
示例#4
0
    void OnTriggerEnter2D(Collider2D collision)
    {
        if (IsKillable(collision))
        {
            if (mKillableCache.IsFull)
            {
                mKillableCache.Expand();
            }

            mKillableCache.Add(new KillableCache(collision));
        }
        else
        {
            if (mSurfaceCache.IsFull)
            {
                mSurfaceCache.Expand();
            }

            var newSurfaceCache = new SurfaceCache(collision);
            mSurfaceCache.Add(newSurfaceCache);

            ComputeSurface(true);
        }
    }
示例#5
0
    void OnTriggerEnter2D(Collider2D collision)
    {
        //check if already contained
        for (int i = 0; i < mTriggerContacts.Count; i++)
        {
            if (mTriggerContacts[i].coll == collision)
            {
                return;
            }
        }

        //add
        HeatController heat = collision.GetComponent <HeatController>();

        if (heat)
        {
            if (mTriggerContacts.IsFull)
            {
                mTriggerContacts.Expand();
            }

            mTriggerContacts.Add(new Contact(collision, heat));
        }
    }
示例#6
0
    void GenerateColls(Collision2D col, bool resetCount)
    {
        if (resetCount)
        {
            mColls.Clear();
        }

        Vector2 up = dirHolder.up;

        int contactCount = col.GetContacts(mContactPoints);

        for (int i = 0; i < contactCount; i++)
        {
            ContactPoint2D contact = mContactPoints[i];

            Collider2D whichColl = col.collider;// contact.thisCollider != collider ? contact.thisCollider : contact.otherCollider;

            Vector2        n  = contact.normal;
            Vector2        p  = contact.point;
            CollisionFlags cf = GenCollFlag(up, contact);

            //check if already exists
            int ind = -1;
            for (int j = 0; j < mColls.Count; j++)
            {
                CollideInfo inf = mColls[j];
                if (inf.collider == whichColl)
                {
                    //if(cf == CollisionFlags.None)
                    //cf = GenCollFlag(up, contact);

                    if (inf.flag == cf)
                    {
                        ind = j;
                        break;
                    }
                }
            }

            var newCollInf = new CollideInfo()
            {
                collider     = whichColl,
                contactPoint = p,
                normal       = n,
                flag         = cf,
            };

            if (ind == -1)  //add new
            {
                if (mColls.Count == mColls.Capacity)
                {
                    mColls.Expand();
                }

                mColls.Add(newCollInf);
            }
            else //update info
            {
                mColls[ind] = newCollInf;
            }
        }
    }