Example #1
0
        protected void CheckCollisions(float timeMult)
        {
            if (health <= 0)
            {
                return;
            }

            TileMap tiles = levelHandler.TileMap;

            if (tiles != null)
            {
                AABB adjustedAABB = AABBInner + new Vector2(speedX * timeMult, speedY * timeMult);
                if (tiles.CheckWeaponDestructible(ref adjustedAABB, WeaponType, strength) > 0)
                {
                    if (WeaponType != WeaponType.Freezer)
                    {
                        if (owner != null)
                        {
                            owner.AddScore(50);
                        }
                    }

                    DecreaseHealth(1);
                }
                else if (!tiles.IsTileEmpty(ref AABBInner, false))
                {
                    EventMap events  = levelHandler.EventMap;
                    bool     handled = false;
                    if (events != null)
                    {
                        Vector3  pos         = Transform.Pos;
                        ushort[] eventParams = null;
                        switch (events.GetEventByPosition(pos.X + speedX * timeMult, pos.Y + speedY * timeMult, ref eventParams))
                        {
                        case EventType.ModifierRicochet:
                            if (lastRicochetFrame + 2 < Time.FrameCount)
                            {
                                lastRicochet      = null;
                                lastRicochetFrame = Time.FrameCount;
                                OnRicochet();
                                handled = true;
                            }
                            break;
                        }
                    }

                    if (!handled)
                    {
                        OnHitWall();
                    }
                }
            }
        }
Example #2
0
        protected bool CanMoveToPosition(float x, float y)
        {
            Vector3 pos = Transform.Pos;

            int direction = (IsFacingLeft ? -1 : 1);

            EventMap events = api.EventMap;

            Hitbox h1 = currentHitbox + new Vector2(x, y - 3);
            Hitbox h2 = currentHitbox + new Vector2(x, y + 3);
            Hitbox h3 = currentHitbox + new Vector2(x + direction * (currentHitbox.Right - currentHitbox.Left) / 2, y + 12);

            ushort[] p = null;
            return((api.IsPositionEmpty(this, ref h1, true) || api.IsPositionEmpty(this, ref h2, true)) &&
                   (events != null && events.GetEventByPosition(pos.X + x, pos.Y + y, ref p) != EventType.AreaStopEnemy) &&
                   !api.IsPositionEmpty(this, ref h3, true));
        }
Example #3
0
        protected bool CanMoveToPosition(float x, float y)
        {
            Vector3 pos = Transform.Pos;

            int direction = (IsFacingLeft ? -1 : 1);

            EventMap events = levelHandler.EventMap;

            AABB aabbA = AABBInner + new Vector2(x, y - 3);
            AABB aabbB = AABBInner + new Vector2(x, y + 3);

            if (!levelHandler.IsPositionEmpty(this, ref aabbA, true) && !levelHandler.IsPositionEmpty(this, ref aabbB, true))
            {
                return(false);
            }

            AABB aabbDir = AABBInner + new Vector2(x + direction * (AABBInner.UpperBound.X - AABBInner.LowerBound.X) * 0.5f, y + 12);

            ushort[] p = null;
            return((events == null || events.GetEventByPosition(pos.X + x, pos.Y + y, ref p) != EventType.AreaStopEnemy) && !levelHandler.IsPositionEmpty(this, ref aabbDir, true));
        }
Example #4
0
        protected void CheckCollisions()
        {
            TileMap tiles = api.TileMap;

            if (tiles != null)
            {
                float timeMult = Time.TimeMult;

                Hitbox hitbox = currentHitbox + new Vector2(speedX * timeMult, speedY * timeMult);

                if (tiles.CheckWeaponDestructible(ref hitbox, WeaponType, strength) > 0)
                {
                    if (WeaponType != WeaponType.Freezer)
                    {
                        if (owner != null)
                        {
                            owner.AddScore(50);
                        }
                    }

                    DecreaseHealth(1);
                }
                else if (!tiles.IsTileEmpty(ref hitbox, false))
                {
                    EventMap events = api.EventMap;
                    if (events != null)
                    {
                        Vector3  pos         = Transform.Pos;
                        ushort[] eventParams = null;
                        switch (events.GetEventByPosition(pos.X + speedX * timeMult, pos.Y + speedY * timeMult, ref eventParams))
                        {
                        case EventType.ModifierRicochet:
                            lastRicochet = null;
                            OnRicochet();
                            break;
                        }
                    }
                }
            }
        }