Esempio n. 1
0
        public void ForceInvokeChunkChange()
        {
            World.GlobalToLocal(this.WObject.Position, out Vector3I cpos, out _);

            Ticket tck = Ticket.GetTicket(cpos.XY);

            if (tck != null)
            {
                Chunk c = tck.Chunk;

                if (c != null)
                {
                    if (previousChunk != null && (previousChunk != c))
                    {
                        OnChangeChunk?.Invoke(c);
                    }
                }

                previousChunk = c;
            }

            else
            {
                tck = Ticket.CreateTicket(cpos.X, cpos.Y, 30, TicketTypes.Player, TicketPreviousDirection.None, true, -1);
            }
        }
Esempio n. 2
0
        public static Block GetBlock(Vector3I position, int dimension = 0)
        {
            GlobalToLocal(position, out Vector3I cpos, out Vector3I bpos);

            return(Ticket.GetTicket(cpos.XY)?.Chunk[bpos.X, bpos.Y, bpos.Z]);
        }
Esempio n. 3
0
        public static void PlayerTickNeighbors(Chunk chunk, Vector3I position)
        {
            Chunk    tickChunk;
            Vector3I tickPosition;

            // West block //
            if (position.X == 0) // if edge
            {
                tickChunk = Ticket.GetTicket(chunk.Position.XY + Vector2I.Left)?.Chunk;

                tickPosition = new Vector3I(15, position.Y, position.Z);
            }
            else
            {
                tickChunk = chunk;

                tickPosition = new Vector3I(position.X - 1, position.Y, position.Z);
            }

            if (tickChunk)
            {
                World.TickOnNextTick.Add(new TickWaitItem(TickType.Block, tickChunk, tickPosition, chunk[tickPosition.X, tickPosition.Y, tickPosition.Z]));
            }


            // East block //
            if (position.X == 15) // if edge
            {
                tickChunk = Ticket.GetTicket(chunk.Position.XY + Vector2I.Right)?.Chunk;

                tickPosition = new Vector3I(0, position.Y, position.Z);
            }
            else
            {
                tickChunk = chunk;

                tickPosition = new Vector3I(position.X + 1, position.Y, position.Z);
            }

            if (tickChunk)
            {
                World.TickOnNextTick.Add(new TickWaitItem(TickType.Block, tickChunk, tickPosition, chunk[tickPosition.X, tickPosition.Y, tickPosition.Z]));
            }


            // North block //
            if (position.Z == 15) // if edge
            {
                tickChunk = Ticket.GetTicket(chunk.Position.XY + Vector2I.Up)?.Chunk;

                tickPosition = new Vector3I(position.X, position.Y, 0);
            }
            else
            {
                tickChunk = chunk;

                tickPosition = new Vector3I(position.X, position.Y, position.Z + 1);
            }

            if (tickChunk)
            {
                World.TickOnNextTick.Add(new TickWaitItem(TickType.Block, tickChunk, tickPosition, chunk[tickPosition.X, tickPosition.Y, tickPosition.Z]));
            }


            // South block //
            if (position.Z == 0) // if edge
            {
                tickChunk = Ticket.GetTicket(chunk.Position.XY + Vector2I.Down)?.Chunk;

                tickPosition = new Vector3I(position.X, position.Y, 15);
            }
            else
            {
                tickChunk = chunk;

                tickPosition = new Vector3I(position.X, position.Y, position.Z - 1);
            }

            if (tickChunk)
            {
                World.TickOnNextTick.Add(new TickWaitItem(TickType.Block, tickChunk, tickPosition, chunk[tickPosition.X, tickPosition.Y, tickPosition.Z]));
            }


            if (position.Y != 0)
            {
                tickChunk = chunk;

                tickPosition = new Vector3I(position.X, position.Y - 1, position.Z);

                World.TickOnNextTick.Add(new TickWaitItem(TickType.Block, chunk, tickPosition, chunk[tickPosition.X, tickPosition.Y, tickPosition.Z]));
            }

            if (position.Y != 255)
            {
                tickChunk = chunk;

                tickPosition = new Vector3I(position.X, position.Y + 1, position.Z);

                World.TickOnNextTick.Add(new TickWaitItem(TickType.Block, tickChunk, tickPosition, chunk[tickPosition.X, tickPosition.Y, tickPosition.Z]));
            }
        }