示例#1
0
 public virtual void ResolveCollision(DoorCollisionResponse other)
 {
 }
示例#2
0
        public Door(BasicSprite sprite, Vector2 position, Type type = Type.Open) : base(sprite, position)
        {
            doorType = type;
            var coll = GetComponent <Collider>();

            ECS.Components.CollisionResponse response = new BaseCollisionResponse(this);

            float width  = Level.screen_width;
            float height = Level.screen_height;

            //Debug.WriteLine(position);

            Constants.Direction direction = Constants.Direction.UP;
            if (position.X <= 0)
            {
                direction = Constants.Direction.LEFT;
                name      = "left";
            }
            else if (position.X > (width / 2) && position.Y > 0)
            {
                direction = Constants.Direction.RIGHT;
                name      = "right";
            }
            else if (position.Y >= height)
            {
                direction = Constants.Direction.DOWN;
                name      = "down";
            }
            else if (position.X > 0)
            {
                direction = Constants.Direction.UP;
                name      = "up";
            }


            switch (type)
            {
            case Type.Open:
                response = new DoorCollisionResponse(this, direction);
                doorResponses.Add(response);
                response.enabled = false;
                break;

            case Type.BombWall:
                response = new DoorCollisionResponse(this, direction);
                doorResponses.Add(response);
                response.enabled = false;
                break;

            case Type.Locked:
                response = new DoorCollisionResponse(this, direction);
                doorResponses.Add(response);
                break;

            case Type.Wall:
                response = new RigidCollisionResponse(this);
                break;
            }

            if (type == Type.BombWall || type == Type.Wall)
            {
                if (direction == Constants.Direction.UP)
                {
                    var rect = new RectangleF();
                    //b.X = transform.WorldPosition.X;
                    //b.Y = transform.WorldPosition.Y;
                    Sprite    s     = coll.entity.GetComponent <Sprite>();
                    Rectangle frame = s.sprite.frames[s.sprite.currentFrame];
                    rect.Width = frame.Width * s.sprite.scalar;
                    const float BOMB_WALL_OFFSET = 28f;
                    rect.Height = frame.Height * s.sprite.scalar + BOMB_WALL_OFFSET;
                    //v
                    coll.colliderBounds = new ManualColliderBounds(coll, rect);
                }
            }

            coll.response = response;
        }
示例#3
0
 public override void ResolveCollision(DoorCollisionResponse other)
 {
 }
示例#4
0
        public Door(BasicSprite sprite, Vector2 position, Type type = Type.Open) : base(sprite, position)
        {
            doorType = type;

            ECS.Components.CollisionResponse response = new BaseCollisionResponse(this);
            var       coll  = GetComponent <Collider>();
            Sprite    s     = GetComponent <Sprite>();
            Rectangle frame = s.sprite.frames[s.sprite.currentFrame];
            // set bounds
            var rect = GetRectColliders();

            float width  = Level.screen_width;
            float height = Level.screen_height;

            Constants.Direction direction = Constants.Direction.UP;
            if (position.X <= 0)
            {
                direction = Constants.Direction.LEFT;
                name      = "left";
            }
            else if (position.X > (width / 2) && position.Y > 0)
            {
                direction = Constants.Direction.RIGHT;
                name      = "right";
            }
            else if (position.Y >= height)
            {
                direction = Constants.Direction.DOWN;
                name      = "down";
            }
            else if (position.X > 0)
            {
                direction = Constants.Direction.UP;
                name      = "up";
            }

            // move collider bounds for doors if not a wall
            if (type == Type.Open)
            {
                OpenDoor();
            }
            else
            {
                // set collider bounds
                coll.colliderBounds = new ManualColliderBounds(coll, rect);
            }


            switch (type)
            {
            case Type.Open:
            case Type.BombWall:
                response = new DoorCollisionResponse(this, direction);
                doorResponses.Add(response);
                response.enabled = false;
                break;

            case Type.Locked:
                response = new DoorCollisionResponse(this, direction);
                doorResponses.Add(response);
                break;

            case Type.Wall:
                response            = new RigidCollisionResponse(this);
                coll.colliderBounds = new SpriteColliderBounds(coll);
                break;
            }

            if (type == Type.BombWall || type == Type.Wall)
            {
                if (direction == Constants.Direction.UP)
                {
                    const float BOMB_WALL_OFFSET = 28f;
                    rect.Height = frame.Height * s.sprite.scalar + BOMB_WALL_OFFSET;
                    // sets collider bounds differently for up bomb walls
                    coll.colliderBounds = new ManualColliderBounds(coll, rect);
                }
            }

            coll.response = response;
        }