Example #1
0
 public void SetBlock(int x, int y, Block B)
 {
     try
     {
         BlockTable[x, y] = B;
     }
     catch
     {
         Logger.Write("Invalid usage of SetBlock function in MultiBLockDefinition");
     }
 }
Example #2
0
 public static void RegisterBlock(Block B)
 {
     B.LoadTextures();
     B.CreateShape();
     BlockRegist.Add(B.Id, B);
     //BlockRegistry.Add(new KeyValuePair<int, Block>(B.Id, B));
 }
Example #3
0
        public void SetBackgroundBlock(Vector2 Vect, Block B)
        {
            Vector2 ChunkV = new Vector2((int)Math.Floor((double)Vect.X / ChunkSize), (int)Math.Floor((double)Vect.Y / ChunkSize));

            if (this.Chunks.ContainsKey(ChunkV))
            {
                int PosX = (int)Math.Floor(Vect.X) - (int)ChunkV.X * ChunkSize;
                int PosY = (int)Math.Floor(Vect.Y) - (int)ChunkV.Y * ChunkSize;
                if (PosX < 0) PosX = 15 - PosX;
                if (PosY < 0) PosY = 15 - PosY;
                Chunks[ChunkV].BackgroundBlocks[PosX, PosY] = B;
                Chunks[ChunkV].BackgroundBlockState[PosX, PosY] = 0;

                UpdateBackgroundBlock((int)Math.Floor(Vect.X), (int)Math.Floor(Vect.Y));
                UpdateBackgroundBlock((int)Math.Floor(Vect.X) - 1, (int)Math.Floor(Vect.Y));
                UpdateBackgroundBlock((int)Math.Floor(Vect.X) + 1, (int)Math.Floor(Vect.Y));
                UpdateBackgroundBlock((int)Math.Floor(Vect.X), (int)Math.Floor(Vect.Y) - 1);
                UpdateBackgroundBlock((int)Math.Floor(Vect.X), (int)Math.Floor(Vect.Y) + 1);
            }
            else
            {
                //NOPE
            }
        }
Example #4
0
        public void SetBlock(Vector2 Vect, Block B)
        {
            Vector2 ChunkV = WorldHelper.GetChunkPos(Vect);

            if (this.Chunks.ContainsKey(ChunkV))
            {
                int PosX = (int)Math.Floor(Vect.X) - (int)ChunkV.X * ChunkSize;
                int PosY = (int)Math.Floor(Vect.Y) - (int)ChunkV.Y * ChunkSize;
                if (PosX < 0) PosX = 15 - PosX;
                if (PosY < 0) PosY = 15 - PosY;

                Chunks[ChunkV].Blocks[PosX,PosY] = B;
                Chunks[ChunkV].BlockState[PosX, PosY] = 0;
                Chunks[ChunkV].RemoveShadow(PosX, PosY);
                if (Chunks[ChunkV].TileEntities[PosX, PosY] != null)
                {
                    Chunks[ChunkV].TileEntities[PosX, PosY].Kill();
                }

                if (B.IsSolid)
                {
                    Chunks[ChunkV].CreateShadow(PosX, PosY);
                }

                UpdateBlock((int)Math.Floor(Vect.X), (int) Math.Floor(Vect.Y));
                UpdateBlock((int)Math.Floor(Vect.X) - 1, (int) Math.Floor(Vect.Y));
                UpdateBlock((int)Math.Floor(Vect.X) + 1, (int)Math.Floor(Vect.Y));
                UpdateBlock((int)Math.Floor(Vect.X), (int)Math.Floor(Vect.Y) - 1);
                UpdateBlock((int)Math.Floor(Vect.X), (int)Math.Floor(Vect.Y) + 1);

                Chunks[ChunkV].CalcLights();
            }
            else
            {
                //NOPE
            }
        }
Example #5
0
        public bool PlaceBlock(Block B, Vector2 Vect)
        {
            if (!World.RaycastAny(Position + new Vector2(CollisionX / 2, CollisionY / 2), Vect / 32))
            {
                if (World.GetBlock(Vect) == Block.GetBlock(0))
                {
                    if (B is IEntityBlock)
                    {
                        TileEntity TE =  (B as IEntityBlock).GetNewTE(this.World, Vect * 32 - Vector2.One * 16);
                        TE.Initalize();
                        TE.Position = Vect;
                        if (TE is TileEntities.IMultiBlockTE)
                        {
                            if (!(TE as TileEntities.IMultiBlockTE).CanBePlaced(Vect)) return false;

                        }
                        World.SetBlock(Vect, TE);
                        return true;
                    }
                    else
                    {
                        World.SetBlock(Vect, B);
                        return true;
                    }
                }
            }
            return false;
        }