예제 #1
0
파일: Map.cs 프로젝트: mrhaboobi/CaveStory
        public List <CollisionTile> GetCollidingTiles(Rectangle rectangle, TileInfo.SideType direction)
        {
            TileUnit firstPrimary = Units.GameToTile(rectangle.Side(TileInfo.OppositeSide(direction)));
            TileUnit lastPrimary  = Units.GameToTile(rectangle.Side(direction));
            int      primaryIncr  = TileInfo.IsMax(direction) ? 1 : -1;

            bool     horizontal = TileInfo.Horizontal(direction);
            TileUnit sMin       = Units.GameToTile(horizontal ? rectangle.Top : rectangle.Left);
            TileUnit sMid       = Units.GameToTile(horizontal ? rectangle.Center.Y : rectangle.Center.X);
            TileUnit sMax       = Units.GameToTile(horizontal ? rectangle.Bottom : rectangle.Right);

            bool                 sPositive      = sMid - sMin < sMax - sMid;
            int                  secondaryIncr  = sPositive ? 1 : -1;
            TileUnit             firstSecondary = sPositive ? sMin : sMax;
            TileUnit             lastSecondary  = sPositive ? sMin : sMax;
            List <CollisionTile> collisionTiles = new List <CollisionTile>();

            for (TileUnit primary = firstPrimary; primary != lastPrimary + primaryIncr; primary = Convert.ToUInt32(Convert.ToInt32(primary) + primaryIncr))
            {
                for (TileUnit secondary = firstSecondary; secondary != lastSecondary + secondaryIncr; secondary = Convert.ToUInt32(Convert.ToInt32(secondary) + secondaryIncr))
                {
                    TileUnit row = !horizontal ? primary : secondary;
                    TileUnit col = horizontal ? primary : secondary;
                    collisionTiles.Add(new CollisionTile(row, col, tiles[Convert.ToInt32(row)][Convert.ToInt32(col)].tileType));
                }
            }
            return(collisionTiles);
        }
예제 #2
0
        public void InitializeSprite(ContentManager Content, PolarStarSpriteState spriteState)
        {
            TileUnit tileY = spriteState.HorizontalFacing == SpriteState.HorizontalFacing.Left ?
                             Convert.ToUInt32(LeftOffset) : Convert.ToUInt32(RightOffset);

            switch (spriteState.VerticalFacing)
            {
            case SpriteState.VerticalFacing.Horizontal:
                tileY += HorizontalOffset;
                break;

            case SpriteState.VerticalFacing.Up:
                tileY += UpOffset;
                break;

            case SpriteState.VerticalFacing.Down:
                tileY += DownOffset;
                break;

            case SpriteState.VerticalFacing.LastVerticalFacing:
                break;
            }
            sprites[spriteState] = new Sprite(Content, SpritePath,
                                              Units.GameToPixel(PolarStarIndex * GunWidth), Units.TileToPixel(tileY),
                                              Units.GameToPixel(GunWidth), Units.GameToPixel(GunHeight));
        }
예제 #3
0
        public void InitializeSprite(ContentManager Content, BatSpriteState spriteState)
        {
            TileUnit tileY = spriteState.HorizontalFacing == CaveStory.SpriteState.HorizontalFacing.Right ? (uint)3 : (uint)2;

            sprites[spriteState] = new AnimatedSprite(Content, "Npc\\NpcCemet",
                                                      Units.TileToPixel(2), Units.TileToPixel(tileY),
                                                      Units.TileToPixel(1), Units.TileToPixel(1),
                                                      FlyFps, NumFlyFrames);
        }
예제 #4
0
 public override void Draw(SpriteBatch spriteBatch)
 {
     for (TileUnit x = 0; x < Game1.ScreenWidth; x += BackgroundSize)
     {
         for (TileUnit y = 0; y < Game1.ScreenHeight; y += BackgroundSize)
         {
             spriteBatch.Draw(tex, new Vector2(Units.TileToPixel(x), Units.TileToPixel(y)), Color.White);
         }
     }
 }
예제 #5
0
파일: Map.cs 프로젝트: mrhaboobi/CaveStory
 public void Draw(SpriteBatch spriteBatch)
 {
     for (TileUnit row = 0; row < tiles.Count; row++)
     {
         for (TileUnit col = 0; col < tiles[Convert.ToInt32(row)].Count; col++)
         {
             if (tiles[Convert.ToInt32(row)][Convert.ToInt32(col)].sprite != null)
             {
                 tiles[Convert.ToInt32(row)][Convert.ToInt32(col)].sprite.Draw(spriteBatch,
                                                                               Units.TileToGame(col), Units.TileToGame(row));
             }
         }
     }
 }
예제 #6
0
파일: Map.cs 프로젝트: mrhaboobi/CaveStory
        public static Map CreateTestMap(ContentManager Content)
        {
            Map map = new Map();

            map.backdrop = new FixedBackdrop("bkBlue", Content);

            TileUnit numRows = 15;
            TileUnit numCols = 20;

            map.tiles = new List <List <Tile> >();
            for (int i = 0; i < numRows; i++)
            {
                map.backgroundTiles.Add(new List <Sprite>());
                map.tiles.Add(new List <Tile>());
                for (int j = 0; j < numCols; j++)
                {
                    map.backgroundTiles[i].Add(null);
                    map.tiles[i].Add(new Tile());
                }
            }

            Sprite   sprite = new Sprite(Content, "Stage/PrtCave", Units.TileToPixel(1), 0, Units.TileToPixel(1), Units.TileToPixel(1));
            BitArray tmp    = TileInfo.CreateTileType();

            tmp.Set((int)TileInfo.TileFlag.Wall, true);
            Tile     tile = new Tile(tmp, sprite);
            TileUnit row  = 11;

            for (TileUnit col = 0; col < numCols; col++)
            {
                map.tiles[Convert.ToInt32(row)][Convert.ToInt32(col)] = tile;
            }
            map.tiles[10][5] = tile;
            map.tiles[9][4]  = tile;
            map.tiles[8][3]  = tile;
            map.tiles[7][2]  = tile;
            map.tiles[10][3] = tile;

            Sprite chainTop = new Sprite(Content, "Stage/PrtCave", Units.TileToPixel(11), Units.TileToPixel(2),
                                         Units.TileToPixel(1), Units.TileToPixel(1));
            Sprite chainMiddle = new Sprite(Content, "Stage/PrtCave", Units.TileToPixel(12), Units.TileToPixel(2),
                                            Units.TileToPixel(1), Units.TileToPixel(1));
            Sprite chainBottom = new Sprite(Content, "Stage/PrtCave", Units.TileToPixel(13), Units.TileToPixel(2),
                                            Units.TileToPixel(1), Units.TileToPixel(1));

            map.backgroundTiles[8][2]  = chainTop;
            map.backgroundTiles[9][2]  = chainMiddle;
            map.backgroundTiles[10][2] = chainBottom;
            return(map);
        }
예제 #7
0
파일: Map.cs 프로젝트: mrhaboobi/CaveStory
 public void DrawBackground(SpriteBatch spriteBatch)
 {
     backdrop.Draw(spriteBatch);
     for (TileUnit row = 0; row < backgroundTiles.Count; row++)
     {
         for (TileUnit col = 0; col < backgroundTiles[Convert.ToInt32(row)].Count; col++)
         {
             if (backgroundTiles[Convert.ToInt32(row)][Convert.ToInt32(col)] != null)
             {
                 backgroundTiles[Convert.ToInt32(row)][Convert.ToInt32(col)].Draw(spriteBatch,
                                                                                  Units.TileToGame(col), Units.TileToGame(row));
             }
         }
     }
 }
예제 #8
0
 private FlashingPickup(ContentManager Content,
                        GameUnit centerX, GameUnit centerY,
                        TileUnit sourceX, TileUnit sourceY,
                        Rectangle rectangle,
                        int value, Pickup.PickupType type)
 {
     sprite = new Sprite(Content, SpriteName,
                         Units.TileToPixel(sourceX), Units.TileToPixel(sourceY),
                         Units.TileToPixel(1), Units.TileToPixel(1));
     flashSprite = new Sprite(Content, SpriteName,
                              Units.TileToPixel(sourceX + 1), Units.TileToPixel(sourceY),
                              Units.TileToPixel(1), Units.TileToPixel(1));
     dissipatingSprite = new Sprite(Content, SpriteName,
                                    Units.TileToPixel(DissipatingSourceX), Units.TileToPixel(DissipatingSourceY),
                                    Units.TileToPixel(1), Units.TileToPixel(1));
     x              = centerX - Units.HalfTile;
     y              = centerY - Units.HalfTile;
     timer          = new Timer(LifeTime, true);
     flashPeriod    = StartPeriod;
     this.rectangle = rectangle;
     this.value     = value;
     this.type      = type;
 }
예제 #9
0
 private FlashingPickup(ContentManager Content,
     GameUnit centerX, GameUnit centerY,
     TileUnit sourceX, TileUnit sourceY,
     Rectangle rectangle,
     int value, Pickup.PickupType type)
 {
     sprite = new Sprite(Content, SpriteName,
         Units.TileToPixel(sourceX), Units.TileToPixel(sourceY),
         Units.TileToPixel(1), Units.TileToPixel(1));
     flashSprite = new Sprite(Content, SpriteName,
         Units.TileToPixel(sourceX + 1), Units.TileToPixel(sourceY),
         Units.TileToPixel(1), Units.TileToPixel(1));
     dissipatingSprite = new Sprite(Content, SpriteName,
         Units.TileToPixel(DissipatingSourceX), Units.TileToPixel(DissipatingSourceY),
         Units.TileToPixel(1), Units.TileToPixel(1));
     x = centerX - Units.HalfTile;
     y = centerY - Units.HalfTile;
     timer = new Timer(LifeTime, true);
     flashPeriod = StartPeriod;
     this.rectangle = rectangle;
     this.value = value;
     this.type = type;
 }
예제 #10
0
 public static GameUnit TileToGame(TileUnit tile)
 {
     return(tile * TileSize);
 }
예제 #11
0
파일: Units.cs 프로젝트: coler706/CaveStory
 public static GameUnit TileToGame(TileUnit tile)
 {
     return tile * TileSize;
 }
예제 #12
0
 public CollisionTile(TileUnit row, TileUnit col, BitArray tileType)
 {
     this.row      = row;
     this.col      = col;
     this.tileType = tileType;
 }
예제 #13
0
        public void InitializeSprite(ContentManager Content, SpriteState spriteState)
        {
            TileUnit tileY = spriteState.horizontalFacing == SpriteState.HorizontalFacing.Left ?
                             Convert.ToUInt32(CharacterFrame) : Convert.ToUInt32(1 + CharacterFrame);

            TileUnit tileX = 0;

            switch (spriteState.motionType)
            {
            case SpriteState.MotionType.Walking:
                tileX = Convert.ToUInt32(WalkFrame);
                break;

            case SpriteState.MotionType.Standing:
                tileX = Convert.ToUInt32(StandFrame);
                break;

            case SpriteState.MotionType.Interacting:
                tileX = Convert.ToUInt32(BackFrame);
                break;

            case SpriteState.MotionType.Jumping:
                tileX = Convert.ToUInt32(JumpFrame);
                break;

            case SpriteState.MotionType.Falling:
                tileX = Convert.ToUInt32(FallFrame);
                break;

            case SpriteState.MotionType.LastMotionType:
                break;
            }

            switch (spriteState.verticalFacing)
            {
            case SpriteState.VerticalFacing.Horizontal:
                break;

            case SpriteState.VerticalFacing.Up:
                tileX += Convert.ToUInt32(UpFrameOffset);
                break;

            case SpriteState.VerticalFacing.Down:
                tileX = Convert.ToUInt32(DownFrame);
                break;

            default:
                break;
            }

            if (spriteState.motionType == SpriteState.MotionType.Walking)
            {
                switch (spriteState.strideType)
                {
                case SpriteState.StrideType.StrideMiddle:
                    break;

                case SpriteState.StrideType.StrideLeft:
                    tileX += 1;
                    break;

                case SpriteState.StrideType.StrideRight:
                    tileX += 2;
                    break;

                default:
                    break;
                }
                sprites.Add(spriteState, new Sprite(Content, SpriteFilePath,
                                                    Units.TileToPixel(tileX), Units.TileToPixel(tileY),
                                                    Units.TileToPixel(1), Units.TileToPixel(1)));
            }
            else
            {
                sprites.Add(spriteState, new Sprite(Content, SpriteFilePath,
                                                    Units.TileToPixel(tileX), Units.TileToPixel(tileY),
                                                    Units.TileToPixel(1), Units.TileToPixel(1)));
            }
        }
예제 #14
0
 public static PixelUnit TileToPixel(TileUnit tile)
 {
     return(GameToPixel(TileToGame(tile)));
 }
예제 #15
0
파일: Units.cs 프로젝트: coler706/CaveStory
 public static PixelUnit TileToPixel(TileUnit tile)
 {
     return GameToPixel(TileToGame(tile));
 }
예제 #16
0
파일: Map.cs 프로젝트: mrhaboobi/CaveStory
        public static Map CreateSlopeTestMap(ContentManager Content)
        {
            Map map = new Map();

            map.backdrop = new FixedBackdrop("bkBlue", Content);

            TileUnit numRows = 15;
            TileUnit numCols = 20;

            map.tiles = new List <List <Tile> >();
            for (int i = 0; i < numRows; i++)
            {
                map.backgroundTiles.Add(new List <Sprite>());
                map.tiles.Add(new List <Tile>());
                for (int j = 0; j < numCols; j++)
                {
                    map.backgroundTiles[i].Add(null);
                    map.tiles[i].Add(new Tile());
                }
            }

            BitArray tmp = TileInfo.CreateTileType();

            tmp.Set((int)TileInfo.TileFlag.Wall, true);
            Tile wallTile = new Tile(tmp, new Sprite(Content, "Stage/PrtCave", Units.TileToPixel(1), 0, Units.TileToPixel(1), Units.TileToPixel(1)));

            Tile[] slopeTiles = new Tile[(int)SlopeTiles.NumSlopes];
            for (int i = 0; i < (int)SlopeTiles.NumSlopes; i++)
            {
                BitArray a = TileInfo.CreateTileType();
                a.Set((int)TileInfo.TileFlag.Slope, true);
                a.Set(i / 2 % 2 == 0 ? (int)TileInfo.TileFlag.LeftSlope : (int)TileInfo.TileFlag.RightSlope, true);
                a.Set(i / 4 == 0 ? (int)TileInfo.TileFlag.TopSlope : (int)TileInfo.TileFlag.BottomSlope, true);
                a.Set((i + 1) / 2 % 2 == 0 ? (int)TileInfo.TileFlag.TallSlope : (int)TileInfo.TileFlag.ShortSlope, true);
                slopeTiles[i] = new Tile(a, new Sprite(Content, "Stage/PrtCave",
                                                       Units.TileToPixel((uint)(2 + i % 4)), Units.TileToPixel((uint)(i / 4)),
                                                       Units.TileToPixel(1), Units.TileToPixel(1)));
            }
            TileUnit row = 11;
            TileUnit col;

            for (col = 0; col < numCols; col++)
            {
                map.tiles[Convert.ToInt32(row)][Convert.ToInt32(col)] = wallTile;
            }
            row--;
            col = 0;
            map.tiles[Convert.ToInt32(row)][Convert.ToInt32(col++)] = wallTile;
            map.tiles[Convert.ToInt32(row)][Convert.ToInt32(col++)] = slopeTiles[(int)SlopeTiles.LBT];
            map.tiles[Convert.ToInt32(row)][Convert.ToInt32(col++)] = slopeTiles[(int)SlopeTiles.RBT];
            map.tiles[Convert.ToInt32(row)][Convert.ToInt32(col++)] = wallTile;
            map.tiles[Convert.ToInt32(row)][Convert.ToInt32(col++)] = slopeTiles[(int)SlopeTiles.LBS];
            col++;
            map.tiles[Convert.ToInt32(row)][Convert.ToInt32(col++)]     = slopeTiles[(int)SlopeTiles.RBS];
            map.tiles[Convert.ToInt32(row)][Convert.ToInt32(col++)]     = slopeTiles[(int)SlopeTiles.RBT];
            map.tiles[Convert.ToInt32(row)][Convert.ToInt32(col++)]     = wallTile;
            map.tiles[Convert.ToInt32(row)][Convert.ToInt32(col++)]     = slopeTiles[(int)SlopeTiles.LBT];
            map.tiles[Convert.ToInt32(row)][Convert.ToInt32(col++)]     = slopeTiles[(int)SlopeTiles.LBS];
            map.tiles[Convert.ToInt32(row)][Convert.ToInt32(col++)]     = slopeTiles[(int)SlopeTiles.RBS];
            map.tiles[Convert.ToInt32(row)][Convert.ToInt32(col++)]     = slopeTiles[(int)SlopeTiles.RBT];
            map.tiles[Convert.ToInt32(row)][Convert.ToInt32(col)]       = wallTile;
            map.tiles[Convert.ToInt32(row - 1)][Convert.ToInt32(col++)] = slopeTiles[(int)SlopeTiles.RBS];
            map.tiles[Convert.ToInt32(row)][Convert.ToInt32(col)]       = wallTile;
            map.tiles[Convert.ToInt32(row - 1)][Convert.ToInt32(col++)] = slopeTiles[(int)SlopeTiles.RBT];
            map.tiles[Convert.ToInt32(row - 1)][Convert.ToInt32(col++)] = wallTile;
            col++;
            map.tiles[Convert.ToInt32(row)][Convert.ToInt32(col++)] = slopeTiles[(int)SlopeTiles.RBS];
            map.tiles[Convert.ToInt32(row)][Convert.ToInt32(col++)] = wallTile;
            col  = 0;
            row -= 3;
            map.tiles[Convert.ToInt32(row - 1)][Convert.ToInt32(col)] = wallTile;
            map.tiles[Convert.ToInt32(row)][Convert.ToInt32(col++)]   = wallTile;
            map.tiles[Convert.ToInt32(row - 1)][Convert.ToInt32(col)] = wallTile;
            map.tiles[Convert.ToInt32(row)][Convert.ToInt32(col++)]   = slopeTiles[(int)SlopeTiles.LTT];
            map.tiles[Convert.ToInt32(row - 1)][Convert.ToInt32(col)] = wallTile;
            map.tiles[Convert.ToInt32(row)][Convert.ToInt32(col++)]   = slopeTiles[(int)SlopeTiles.LTS];
            map.tiles[Convert.ToInt32(row - 1)][Convert.ToInt32(col)] = wallTile;
            map.tiles[Convert.ToInt32(row)][Convert.ToInt32(col++)]   = slopeTiles[(int)SlopeTiles.RTS];
            map.tiles[Convert.ToInt32(row - 1)][Convert.ToInt32(col)] = wallTile;
            map.tiles[Convert.ToInt32(row)][Convert.ToInt32(col++)]   = slopeTiles[(int)SlopeTiles.RTT];
            map.tiles[Convert.ToInt32(row - 1)][Convert.ToInt32(col)] = wallTile;
            map.tiles[Convert.ToInt32(row)][Convert.ToInt32(col++)]   = wallTile;
            return(map);
        }
예제 #17
0
 public CollisionTile(TileUnit row, TileUnit col, BitArray tileType)
 {
     this.row = row;
     this.col = col;
     this.tileType = tileType;
 }