public override void SetData(BlockTypeEnum blockType) { base.SetData(blockType); BlockShapeCustom blockShapeCustom = blockShape as BlockShapeCustom; BlockBaseCrop.InitCropVert(blockShapeCustom.vertsAdd); }
protected override void UseForPlayer(Player player, ItemsBean itemData, ItemUseTypeEnum useType) { //检测玩家前方是否有方块 if (player.playerRay.RayToChunkBlock(out RaycastHit hit, out Vector3Int targetBlockPosition)) { ChunkComponent chunkForHit = hit.collider.GetComponentInParent <ChunkComponent>(); if (chunkForHit != null) { //获取位置和方向 player.playerRay.GetHitPositionAndDirection(hit, out Vector3Int targetPosition, out Vector3Int closePosition, out BlockDirectionEnum direction); Vector3Int localPosition = targetPosition - chunkForHit.chunk.chunkData.positionForWorld; //获取原位置方块 Block tagetBlock = chunkForHit.chunk.chunkData.GetBlockForLocal(localPosition); //如果不能种地 if (tagetBlock.blockInfo.plant_state == 0) { return; } //种植位置 Vector3Int upLocalPosition = localPosition + Vector3Int.up; //获取上方方块 Block upBlock = chunkForHit.chunk.chunkData.GetBlockForLocal(upLocalPosition); //如果上方有方块 则无法种植 if (upBlock != null && upBlock.blockType != BlockTypeEnum.None) { return; } //种植的方块 ItemsInfoBean itemsInfo = GetItemsInfo(itemData.itemId); BlockTypeEnum plantBlockType = (BlockTypeEnum)itemsInfo.type_id; //初始化meta数据 BlockMetaCrop blockCropData = new BlockMetaCrop(); blockCropData.isStartGrow = false; blockCropData.growPro = 0; string metaData = BlockBaseCrop.ToMetaData(blockCropData); //替换为种植 chunkForHit.chunk.SetBlockForLocal(upLocalPosition, plantBlockType, BlockDirectionEnum.UpForward, metaData); //扣除道具 UserDataBean userData = GameDataHandler.Instance.manager.GetUserData(); userData.AddItems(itemData, -1); //刷新UI UIHandler.Instance.RefreshUI(); } } }
/// <summary> /// 获取UVAdd /// </summary> public virtual Vector2[] GetUVsAddForCrop(Chunk chunk, Vector3Int localPosition, BlockInfoBean blockInfo) { BlockBean blockData = chunk.GetBlockData(localPosition); BlockMetaCrop blockCropData = BlockBaseCrop.FromMetaData <BlockMetaCrop>(blockData.meta); Vector2 uvStartPosition = GetUVStartPosition(blockInfo, blockCropData); Vector2[] uvsAdd = new Vector2[] { new Vector2(uvStartPosition.x, uvStartPosition.y), new Vector2(uvStartPosition.x, uvStartPosition.y + uvWidth), new Vector2(uvStartPosition.x + uvWidth, uvStartPosition.y + uvWidth), new Vector2(uvStartPosition.x + uvWidth, uvStartPosition.y), new Vector2(uvStartPosition.x, uvStartPosition.y), new Vector2(uvStartPosition.x, uvStartPosition.y + uvWidth), new Vector2(uvStartPosition.x + uvWidth, uvStartPosition.y + uvWidth), new Vector2(uvStartPosition.x + uvWidth, uvStartPosition.y) }; return(uvsAdd); }
/// <summary> /// 获取生长UV /// </summary> public virtual Vector2 GetUVStartPosition(BlockInfoBean blockInfo, BlockMetaCrop blockCropData) { BlockBaseCrop blockCrop = block as BlockBaseCrop; List <Vector2Int[]> listUVData = blockCrop.GetListGrowUV(); Vector2 uvStartPosition; if (listUVData.IsNull()) { uvStartPosition = Vector2.zero; } else if (blockCropData.growPro >= blockCrop.GetCropLifeCycle()) { //如果生长周期大于UV长度 则取最后一个 Vector2Int[] itemUVData = listUVData[listUVData.Count - 1]; uvStartPosition = new Vector2(uvWidth * itemUVData[blockCropData.uvIndex].y, uvWidth * itemUVData[blockCropData.uvIndex].x); } else { Vector2Int[] itemUVData = listUVData[blockCropData.growPro]; //按生长周期取UV uvStartPosition = new Vector2(uvWidth * itemUVData[blockCropData.uvIndex].y, uvWidth * itemUVData[blockCropData.uvIndex].x); } return(uvStartPosition); }
public BlockShapeCropCrossOblique() : base() { BlockBaseCrop.InitCropVert(vertsAdd); }
public BlockShapeCropWell() : base() { BlockBaseCrop.InitCropVert(vertsAdd); }