Example #1
0
        private void UpdateOmokBoard()
        {
            IPlayer    player     = clientAPI.World.Player;
            PlayerData playerData = PlayerManager.Instance.GetOrAddPlayerData(player);

            // Update renderer if no longer looking at Omok board
            BlockPos selectedOmokBoardPos = playerData.SelectedOmokBoardPos;
            bool     isSelectingBlock     = (player.CurrentBlockSelection != null);

            if (selectedOmokBoardPos == null)
            {
                return;
            }

            // Execute if the player is either not looking at a block, or if the current selected block isn't an Omok board
            if (!isSelectingBlock || (isSelectingBlock && player.CurrentBlockSelection.Position != playerData.SelectedOmokBoardPos))
            {
                if (player.Entity.World.BlockAccessor.GetBlockEntity(selectedOmokBoardPos) is BEOmokTableTop beOmok)
                {
                    RendererOmok rendererOmok = beOmok.OmokRenderer;
                    if (rendererOmok != null && rendererOmok.AvailableMovesMesh != null && !rendererOmok.AvailableMovesMesh.Disposed)
                    {
                        rendererOmok.DisposeAvailableMovesMesh();
                    }
                }
            }
        }
        // Loads all available moves
        public override void OnBeingLookedAt(IPlayer byPlayer, BlockSelection blockSel, bool firstTick)
        {
            if (api.Side == EnumAppSide.Client)
            {
                ICoreClientAPI cAPI = (ICoreClientAPI)api;

                BlockPos       blockPos = blockSel.Position;
                BEOmokTableTop beOmok   = (BEOmokTableTop)cAPI.World.BlockAccessor.GetBlockEntity(blockPos);

                if (beOmok == null)
                {
                    return;
                }

                RendererOmok renderer = beOmok.OmokRenderer;

                // Load available space mesh if the looked at spot is free
                if (beOmok == null || !IsViableSpace(beOmok, blockSel, out int pieceX, out int pieceZ))
                {
                    renderer.DisposeAvailableMovesMesh();
                    return;
                }

                // Store Selected Omok Board Position
                PlayerData playerData = PlayerManager.Instance.GetOrAddPlayerData(byPlayer);
                playerData.SelectedOmokBoardPos = blockPos;

                renderer.LoadAvailableMovesMesh(cAPI, byPlayer, blockSel.Position, pieceX, pieceZ);
            }

            base.OnBeingLookedAt(byPlayer, blockSel, firstTick);
        }