Esempio n. 1
0
        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());
                    }
                }
            }
        }
Esempio n. 2
0
        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();
        }
Esempio n. 3
0
        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");
            }
        }
Esempio n. 4
0
        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"];
        }