private void handleDragging(PlayerAction.Action action) { PlayerAction.Dragging dragClick = (PlayerAction.Dragging)action; Ray dragRay = dragClick.getRay(); Vector3?dragBlock = world.getBlockAlongRay(dragRay); if (dragBlock.HasValue) { BlockLoc currentDragBlock = new BlockLoc((int)((Vector3)dragBlock).X, (int)((Vector3)dragBlock).Y, (int)((Vector3)dragBlock).Z); IEnumerable <BlockLoc> draggedBlocks; if (dragClick.getDragType() == PlayerAction.Dragging.DragType.excavate) { draggedBlocks = world.GetBlocksBoundBy(player.getFirstBlockInDrag(), currentDragBlock); } else { draggedBlocks = world.getSurfaceBlocksBoundBy(player.getFirstBlockInDrag(), currentDragBlock); } float draggedBlockOpacity = .5f; foreach (BlockLoc test in draggedBlocks) { switch (dragClick.getDragType()) { case PlayerAction.Dragging.DragType.farm: WorldMarkupHandler.addFlagPathWithPosition(ContentDistributor.getEmptyString() + @"worldMarkup\farmMarker.chr", test.toWorldSpaceVector3() + new Vector3(.5f, .5f, .5f)); break; case PlayerAction.Dragging.DragType.storeWheat: WorldMarkupHandler.addCharacter(ResourceBlock.getPathForResourceType(ResourceBlock.ResourceType.Wheat), test.toWorldSpaceVector3() + new Vector3(.5f, 1.5f, .5f), 1f / 7f, draggedBlockOpacity); WorldMarkupHandler.addCharacter(ResourceBlock.getPathForResourceType(ResourceBlock.ResourceType.Wheat), test.toWorldSpaceVector3() + new Vector3(.5f, 2.5f, .5f), 1f / 7f, draggedBlockOpacity); break; case PlayerAction.Dragging.DragType.storeWood: WorldMarkupHandler.addCharacter(ResourceBlock.getPathForResourceType(ResourceBlock.ResourceType.Wood), test.toWorldSpaceVector3() + new Vector3(.5f, 1.5f, .5f), 1f / 7f, draggedBlockOpacity); WorldMarkupHandler.addCharacter(ResourceBlock.getPathForResourceType(ResourceBlock.ResourceType.Wood), test.toWorldSpaceVector3() + new Vector3(.5f, 2.5f, .5f), 1f / 7f, draggedBlockOpacity); break; case PlayerAction.Dragging.DragType.storeStone: WorldMarkupHandler.addCharacter(ResourceBlock.getPathForResourceType(ResourceBlock.ResourceType.standardBlock), test.toWorldSpaceVector3() + new Vector3(.5f, 1.5f, .5f), 1f / 7f, draggedBlockOpacity); WorldMarkupHandler.addCharacter(ResourceBlock.getPathForResourceType(ResourceBlock.ResourceType.standardBlock), test.toWorldSpaceVector3() + new Vector3(.5f, 2.5f, .5f), 1f / 7f, draggedBlockOpacity); break; case PlayerAction.Dragging.DragType.excavate: WorldMarkupHandler.addFlagPathWithPosition(ContentDistributor.getEmptyString() + @"worldMarkup\redCubeOutline.chr", test.toWorldSpaceVector3() + new Vector3(.5f, .5f, .5f), 1.1f / 7f); break; default: throw new Exception("unhandled dragType " + dragClick.getDragType()); } } } }
public static void display(GameWorld.World world, Player player, Character doNotDisplay) { DisplayParameters displayParameters = new DisplayParameters(); if (player.wantsStockpilesDisplayed()) { displayParameters.addParameter(DisplayParameter.drawStockpiles); } RasterizerState rs = new RasterizerState(); rs.CullMode = CullMode.None; device.RasterizerState = rs; device.BlendState = BlendState.Opaque; setStatesForMainDraw(player); world.runPreDrawCalculations(); RasterizerState rasterizerState = new RasterizerState(); rasterizerState.FillMode = FillMode.Solid; rasterizerState.CullMode = CullMode.None; device.RasterizerState = rasterizerState; device.Clear(ClearOptions.Target | ClearOptions.DepthBuffer, Color.DarkSlateBlue, 1.0f, 0); device.SetRenderTarget(renderTarget); device.BlendState = BlendState.NonPremultiplied; device.DepthStencilState = new DepthStencilState() { DepthBufferEnable = true }; display3DObjects(world, player, doNotDisplay, effect, displayParameters); effect.Parameters["xWorld"].SetValue(Matrix.Identity); mainRenderImage = (Texture2D)renderTarget; device.SetRenderTarget(null); device.Clear(ClearOptions.Target | ClearOptions.DepthBuffer, Color.DarkSlateBlue, 1.0f, 0); spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.Opaque, SamplerState.PointClamp, DepthStencilState.Default, RasterizerState.CullNone); spriteBatch.Draw(mainRenderImage, new Vector2(0, 0), Color.White); spriteBatch.End(); WorldMarkupHandler.resetWorldMarkup(); }
public void display3D() { if (isEmbodyingCharacter()) { if (selectedCharacter.isCarryingItem()) { ResourceBlock.ResourceType type = selectedCharacter.getLoad(); String blockChrPath = ResourceBlock.getPathForResourceType(type); Vector3 centerOfFloatingCube = getPlayerAimingAtPointAtDistance(.7f, currentMouseState); WorldMarkupHandler.addFlagPathWithPosition(blockChrPath, centerOfFloatingCube, 1f / 7f / 12f); } } if (selectedCharacter != null && !isEmbodyingCharacter()) { Compositer.addFlagForThisFrame(selectedCharacter.getLocation() + new Vector3(0, 1.1f, 0), "white"); } }
private static void display3DObjects(GameWorld.World world, Player player, Character doNotDisplay, Effect effectToUse, DisplayParameters displayParameters) { effect.Parameters["xOpacity"].SetValue(1f); world.displayActors(device, effectToUse, doNotDisplay); world.displayIslands(device, effectToUse, new BoundingFrustum(viewMatrix * getPerspectiveMatrix(1000)), displayParameters); player.display3D(); foreach (AnimatedBodyPartGroup group in CharactersForThisFrame) { group.draw(device, effectToUse); } CharactersForThisFrame.Clear(); effect.Parameters["xProjection"].SetValue(getPerspectiveMatrix(2000)); sky.draw(device, effectToUse, viewMatrix, getPerspectiveMatrix(2000), player.getCameraLoc()); effect.Parameters["xProjection"].SetValue(getPerspectiveMatrix(1000)); ocean.draw(device, viewMatrix, getPerspectiveMatrix(1000), player.getCameraLoc(), ambientBrightness); effect.CurrentTechnique = effect.Techniques["Instanced"]; WorldMarkupHandler.drawCharacters(device, effect); effect.CurrentTechnique = effect.Techniques["Colored"]; }