public EntityPlayerSP GetPlayer(World world)
        {
            EntityPlayerSP player = new EntityPlayerSP(world, pos);

            SharpCraft.Instance.Camera.pitch = pitch;
            SharpCraft.Instance.Camera.yaw   = yaw;

            for (int i = 0; i < hotbar.Length; i++)
            {
                if (TryParseStack(world, hotbar[i], out var stack))
                {
                    player.Hotbar[i] = stack;
                }
            }

            for (int i = 0; i < inventory.Length; i++)
            {
                if (TryParseStack(world, inventory[i], out var stack))
                {
                    player.Inventory[i] = stack;
                }
            }

            player.Health = healthPercentage;

            return(player);
        }
        public WorldPlayerNode(EntityPlayerSP player)
        {
            pitch = SharpCraft.Instance.Camera.pitch;
            yaw   = SharpCraft.Instance.Camera.yaw;
            pos   = player.Pos;

            hotbar    = new ItemStackNode[player.Hotbar.Length];
            inventory = new ItemStackNode[player.Inventory.Length];

            for (var i = 0; i < player.Hotbar.Length; i++)
            {
                ItemStack stack = player.Hotbar[i];

                if (TryParseStack(player, stack, out var node))
                {
                    hotbar[i] = node;
                }
            }
            for (var i = 0; i < player.Inventory.Length; i++)
            {
                ItemStack stack = player.Inventory[i];

                if (TryParseStack(player, stack, out var node))
                {
                    inventory[i] = node;
                }
            }

            healthPercentage = player.Health;
        }
示例#3
0
        public void UpdateLoad(EntityPlayerSP player, int renderDistance, bool important)
        {
            World world = SharpCraft.Instance.World;

            ChunkPos playerChunkPos = ChunkPos.FromWorldSpace(SharpCraft.Instance.Player.Pos);

            for (int z = -renderDistance; z <= renderDistance; z++)
            {
                for (int x = -renderDistance; x <= renderDistance; x++)
                {
                    ChunkPos pos = new ChunkPos(playerChunkPos.x + x, playerChunkPos.z + z);
                    if (pos.DistanceTo(player.Pos.Xz) < renderDistance * Chunk.ChunkSize)
                    {
                        if (world.GetChunk(pos) == null)
                        {
                            if (important)
                            {
                                NotifyImportantLoad(pos);
                            }
                            else
                            {
                                NotifyLoad(pos);
                            }
                        }
                    }
                }
            }

            LoadChunks();
            BuildChunks();
        }
 private void ResetDestroyProgress(EntityPlayerSP player)
 {
     foreach (DestroyProgress progress in DestroyProgresses.Values)
     {
         if (progress.Player == player)
         {
             DestroyProgresses.TryRemove(progress.Pos, out DestroyProgress removed);
         }
     }
 }
        public void Disconnect()
        {
            ParticleRenderer = null;
            SkyboxRenderer   = null;

            World?.SaveAllChunks();
            World?.DestroyChunkModels();

            Player = null;

            World?.ChunkData.Cleanup();
            World?.LoadManager.Cleanup();
            World = null;
        }
        public void LoadWorld(string saveName)
        {
            if (World != null)
            {
                return;
            }

            ParticleRenderer = new ParticleRenderer();
            SkyboxRenderer   = new SkyboxRenderer();

            World loadedWorld = WorldLoader.LoadWorld(saveName);

            if (loadedWorld == null)
            {
                Console.WriteLine("DEBUG: generating World");

                BlockPos playerPos = new BlockPos(MathUtil.NextFloat(-100, 100), 10, MathUtil.NextFloat(-100, 100));

                World = new World("MyWorld", "Tomlow's Fuckaround",
                                  SettingsManager.GetValue("worldseed").GetHashCode());

                Player = new EntityPlayerSP(World, playerPos.ToVec());

                World.AddEntity(Player);

                Player.SetItemStackInInventory(0, new ItemStack(new ItemBlock(BlockRegistry.GetBlock <BlockCraftingTable>())));
                Player.SetItemStackInInventory(1, new ItemStack(new ItemBlock(BlockRegistry.GetBlock <BlockFurnace>())));
                Player.SetItemStackInInventory(2, new ItemStack(new ItemBlock(BlockRegistry.GetBlock <BlockCobbleStone>())));
                Player.SetItemStackInInventory(3, new ItemStack(new ItemBlock(BlockRegistry.GetBlock <BlockPlanks>())));
                Player.SetItemStackInInventory(4, new ItemStack(new ItemBlock(BlockRegistry.GetBlock <BlockGlass>())));
                Player.SetItemStackInInventory(5, new ItemStack(new ItemBlock(BlockRegistry.GetBlock <BlockCraftingTable>())));
                Player.SetItemStackInInventory(6, new ItemStack(new ItemBlock(BlockRegistry.GetBlock <BlockSlab>())));
                Player.SetItemStackInInventory(7, new ItemStack(new ItemBlock(BlockRegistry.GetBlock <BlockLadder>())));
                Player.SetItemStackInInventory(8, new ItemStack(new ItemBlock(BlockRegistry.GetBlock <BlockTallGrass>())));
            }
            else
            {
                World = loadedWorld;
            }

            ResetMouse();

            MouseState state = OpenTK.Input.Mouse.GetState();

            _mouseLast = new Point(state.X, state.Y);
        }
        public static World LoadWorld(string saveName)
        {
            BinaryFormatter bf = new BinaryFormatter();

            string dir = $"{SharpCraft.Instance.GameFolderDir}saves/{saveName}";

            if (!Directory.Exists(dir))
            {
                return(null);
            }

            World world = null;

            try
            {
                WorldDataNode   wdn;
                WorldPlayerNode wpn;

                using (FileStream fs = File.OpenRead(dir + "/player.dat"))
                {
                    fs.Position = 0;
                    wpn         = (WorldPlayerNode)bf.Deserialize(fs);
                }

                using (FileStream fs = File.OpenRead(dir + "/level.dat"))
                {
                    fs.Position = 0;
                    wdn         = (WorldDataNode)bf.Deserialize(fs);
                }

                world = wdn.GetWorld(saveName);

                EntityPlayerSP player = wpn.GetPlayer(world);

                world.AddEntity(player);
                world.LoadChunk(new BlockPos(player.Pos).ChunkPos());
                SharpCraft.Instance.Player = player;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.StackTrace);
            }

            return(world);
        }
示例#8
0
        public void Update(EntityPlayerSP player, int renderDistance)
        {
            if (player == null)
            {
                return;
            }

            LoadManager.LoadImportantChunks();
            LoadManager.UpdateLoad(player, renderDistance, _initalLoad);
            _initalLoad = false;

            foreach (Chunk chunk in Chunks.Values)
            {
                chunk.Update();

                if (chunk.Pos.DistanceTo(player.Pos.Xz) > renderDistance * Chunk.ChunkSize + 50)
                {
                    UnloadChunk(chunk.Pos);
                }
            }

            UpdateEntities();
        }
        private bool TryParseStack(EntityPlayerSP player, ItemStack stack, out ItemStackNode node)
        {
            if (stack == null || stack.IsEmpty)
            {
                node = null;
                return(false);
            }

            node = new ItemStackNode();

            if (stack.Item is ItemBlock itemBlock) //TODO - IMPORTANT! at this moment this is always true, will need to add another function for the items or something
            {
                node.IsBlock     = true;
                node.LocalItemID = player.World.GetLocalBlockId(itemBlock.Block.UnlocalizedName);
                node.Count       = stack.Count;
                node.Meta        = stack.Meta;
            }
            else
            {
                //TODO
            }

            return(true);
        }