Exemple #1
0
        /// <summary>${mapping_Map_method_onApplyTemplate_D}</summary>
        protected override void OnApplyTemplate()
        {
            base.OnApplyTemplate();
            if ((this.rootElement != null) && this.rootElement.Children.Contains(this.Popup))
            {
                this.rootElement.Children.Remove(this.Popup);
            }//Map变化
            this.rootElement = base.GetTemplateChild("RootElement") as Grid;
            if (this.rootElement == null)
            {
                throw new ArgumentException(ExceptionStrings.RootElementIsNull);
            }

            this.backgroundWindow = new Grid();
            this.backgroundWindow.Background = new SolidColorBrush(Color.FromArgb(0, 0xff, 0xff, 0xff));
            this.rootElement.Children.Add(this.backgroundWindow);

            this.rotateTransform = new RotateTransform() { Angle = this.Angle };
            this.transformCanvas = new Canvas()
            {
                RenderTransform = this.rotateTransform,
                RenderTransformOrigin = new Point(0.5, 0.5)
            };
            this.rootElement.Children.Add(this.transformCanvas);
            this.layerCollectionContainer = new Canvas();
            layerCollectionContainer.RenderTransform = new TranslateTransform();
            this.transformCanvas.Children.Add(this.layerCollectionContainer);
            if (base.FlowDirection == FlowDirection.RightToLeft)
            {
                this.transformCanvas.HorizontalAlignment = HorizontalAlignment.Right;
            }
            this.MapStatus = MapStatus.Still;
            this.MapManipulator = MapManipulator.None;
            this.panHelper = new PanAnimation(this);
            this.panHelper.PanAnimationCompleted += this.panHelper_PanAnimationCompleted;
            this.panHelper.Panning += this.panHelper_Panning;
            this.panHelper.PanStarted += panHelper_PanStarted;

            this.ZoomHelper = new ZoomAnimation(this);
            this.ZoomHelper.ZoomStarted += ZoomHelper_ZoomStarted;
            this.ZoomHelper.Zooming += ZoomHelper_Zooming;
            this.ZoomHelper.ZoomCompleted += ZoomHelper_ZoomCompleted;

            base.SizeChanged += new SizeChangedEventHandler(this.Map_SizeChanged);

            BuildMapAction();//在MapActionPart.cs中

            ScreenContainer = new Canvas();
            rootElement.Children.Add(ScreenContainer);
            this.rootElement.Children.Add(this.Popup);

            if ((this.Layers != null) && (this.Layers.Count > 0))
            {
                if (!this.Layers.HasPendingLayers)
                {
                    this.Layers_LayersInitialized(this.Layers, null);
                }
                else
                {
                    foreach (Layer layer in this.Layers)
                    {
                        if (!layer.IsInitialized)
                        {
                            layer.Initialize();
                        }
                    }
                }
            }
        }
Exemple #2
0
 void ZoomHelper_ZoomCompleted(object sender, ZoomAnimationEventArgs e)
 {
     Rectangle2D old = ViewBounds;
     if (MapManipulator == MapManipulator.Program)
     {
         this.MapStatus = MapStatus.ZoomCompleted;
     }
     Point2D origin = new Point2D(e.NowCenter.X - currentSize.Width / 2 * targetResolution, e.NowCenter.Y + currentSize.Height / 2 * targetResolution);
     SetOriginAndResolution(targetResolution, origin, true);
     Rectangle2D bounds = ViewBounds;
     this.LoadLayersInView(false, bounds);
     if (this.MapStatus == MapStatus.ZoomCompleted)
     {
         RaiseViewBoundsChanged();
     }
     else
     {
         RaiseViewBoundsChanging(new ViewBoundsEventArgs(old, ViewBounds));
     }
     if (MapManipulator == MapManipulator.Program)
     {
         this.MapStatus = MapStatus.Still;
         this.MapManipulator = MapManipulator.None;
     }
     else if (MapManipulator == MapManipulator.Device && MapStatus == MapStatus.ZoomCompleted)
     {
         MapStatus = MapStatus.Still;
         MapManipulator = MapManipulator.None;
     }
 }
Exemple #3
0
        private void MakeGame()
        {
            var            getfile       = this.getfile;
            var            gamedata      = new GameDataCsv();
            var            clientgame    = w;
            ICurrentSeason currentseason = clientgame;

            gamedata.CurrentSeason = currentseason;
            var network        = w;
            var mapstorage     = clientgame;
            var config3d       = new Config3d();
            var mapManipulator = new MapManipulator();
            var the3d          = new The3d();

            the3d.d_GetFile      = getfile;
            the3d.d_Config3d     = config3d;
            the3d.d_ViewportSize = w;
            w.d_The3d            = the3d;
            var          localplayerposition = w;
            var          physics             = new CharacterPhysics();
            var          internetgamefactory = this;
            ICompression compression         = new CompressionGzip(); //IsSinglePlayer ? (ICompression)new CompressionGzip() : new CompressionGzip();

            network.d_Compression = compression;
            network.d_ResetMap    = this;
            if (IsSinglePlayer)
            {
                var socket = new SocketDummy()
                {
                    network = this.dummyNetwork
                };
                network.main = socket;
            }
            else
            {
                network.main = new SocketNet(new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp));
            }
            var terrainTextures = new TerrainTextures();

            terrainTextures.d_GetFile = getfile;
            terrainTextures.d_The3d   = the3d;
            bool IsMono = Type.GetType("Mono.Runtime") != null;

            terrainTextures.d_TextureAtlasConverter = new TextureAtlasConverter();
            if (IsMono)
            {
                terrainTextures.d_TextureAtlasConverter.d_FastBitmapFactory = () => { return(new FastBitmapDummy()); };
            }
            else
            {
                terrainTextures.d_TextureAtlasConverter.d_FastBitmapFactory = () => { return(new FastBitmap()); };
            }
            terrainTextures.Start();
            w.d_TerrainTextures = terrainTextures;
            var blockrenderertorch = new BlockRendererTorch();

            blockrenderertorch.d_TerainRenderer = terrainTextures;
            blockrenderertorch.d_Data           = gamedata;
            //InfiniteMapChunked map = new InfiniteMapChunked();// { generator = new WorldGeneratorDummy() };
            var map = w;
            var terrainchunktesselator = new TerrainChunkTesselator();

            terrainchunktesselator.d_Config3d          = config3d;
            terrainchunktesselator.d_Data              = gamedata;
            terrainchunktesselator.d_MapStorage        = clientgame;
            terrainchunktesselator.d_MapStoragePortion = map;
            terrainchunktesselator.d_MapStorageLight   = clientgame;
            w.d_TerrainChunkTesselator = terrainchunktesselator;
            var frustumculling = new FrustumCulling()
            {
                d_GetCameraMatrix = the3d
            };

            w.d_Batcher = new MeshBatcher()
            {
                d_FrustumCulling = frustumculling
            };
            w.d_FrustumCulling   = frustumculling;
            w.BeforeRenderFrame += (a, b) => { frustumculling.CalcFrustumEquations(); };
            terrainchunktesselator.d_BlockRendererTorch = blockrenderertorch;
            terrainchunktesselator.d_TerrainTextures    = terrainTextures;
            //w.d_Map = clientgame.mapforphysics;
            w.d_Physics        = physics;
            w.d_Clients        = clientgame;
            w.d_Data           = gamedata;
            w.d_DataMonsters   = new GameDataMonsters(getfile);
            w.d_GetFile        = getfile;
            w.d_Config3d       = config3d;
            w.d_MapManipulator = mapManipulator;
            w.PickDistance     = 4.5f;
            var skysphere = new SkySphere();

            skysphere.d_MeshBatcher = new MeshBatcher()
            {
                d_FrustumCulling = new FrustumCullingDummy()
            };
            skysphere.d_LocalPlayerPosition = localplayerposition;
            skysphere.d_The3d = the3d;
            w.skysphere       = skysphere;
            var textrenderer = new ManicDigger.Renderers.TextRenderer();

            w.d_TextRenderer = textrenderer;
            Inventory inventory = Inventory.Create();

            weapon = new WeaponBlockInfo()
            {
                d_Data = gamedata, d_Terrain = terrainTextures, d_Viewport = w, d_Map = clientgame, d_Shadows = w, d_Inventory = inventory, d_LocalPlayerPosition = w
            };
            w.d_Weapon = new WeaponRenderer()
            {
                d_Info = weapon, d_BlockRendererTorch = blockrenderertorch, d_LocalPlayerPosition = w
            };
            var playerrenderer = new CharacterRendererMonsterCode();

            playerrenderer.Load(new List <string>(MyStream.ReadAllLines(getfile.GetFile("player.mdc"))));
            w.d_CharacterRenderer = playerrenderer;
            particle = new ParticleEffectBlockBreak()
            {
                d_Data = gamedata, d_Map = clientgame, d_Terrain = terrainTextures
            };
            w.particleEffectBlockBreak = particle;
            w.ENABLE_FINITEINVENTORY   = false;
            w.d_Shadows       = w;
            clientgame.d_Data = gamedata;
            clientgame.d_CraftingTableTool = new CraftingTableTool()
            {
                d_Map = mapstorage
            };
            clientgame.d_Audio       = audio;
            clientgame.d_RailMapUtil = new RailMapUtil()
            {
                d_Data = gamedata, d_MapStorage = clientgame
            };
            clientgame.d_MinecartRenderer = new MinecartRenderer()
            {
                d_GetFile = getfile, d_The3d = the3d
            };
            clientgame.d_TerrainTextures = terrainTextures;
            clientgame.d_GetFile         = getfile;
            var craftingrecipes = new CraftingRecipes();

            craftingrecipes.data      = gamedata;
            w.d_CraftingRecipes       = craftingrecipes;
            network.d_CraftingRecipes = craftingrecipes;
            w.Reset(10 * 1000, 10 * 1000, 128);
            clientgame.d_Map = map;
            PlayerSkinDownloader playerskindownloader = new PlayerSkinDownloader();

            playerskindownloader.d_Exit     = exit;
            playerskindownloader.d_The3d    = the3d;
            playerskindownloader.skinserver = "http://fragmer.net/md/skins/";
            w.playerskindownloader          = playerskindownloader;
            w.d_FpsHistoryGraphRenderer     = new HudFpsHistoryGraphRenderer()
            {
                d_Draw = the3d, d_ViewportSize = w
            };
            w.d_Screenshot = new Screenshot()
            {
                d_GameWindow = maingamewindow
            };
            w.d_FrustumCulling   = frustumculling;
            physics.d_Map        = clientgame.mapforphysics;
            physics.d_Data       = gamedata;
            audio.d_GetFile      = getfile;
            audio.d_GameExit     = exit;
            this.map             = map;
            the3d.d_Terrain      = terrainTextures;
            the3d.d_TextRenderer = textrenderer;
            w.d_CurrentShadows   = this;
            var sunmoonrenderer = new SunMoonRenderer()
            {
                d_Draw2d = the3d, d_LocalPlayerPosition = w, d_GetFile = getfile, d_The3d = the3d
            };

            w.d_SunMoonRenderer          = sunmoonrenderer;
            clientgame.d_SunMoonRenderer = sunmoonrenderer;
            this.heightmap = new InfiniteMapChunked2d()
            {
                d_Map = map
            };
            heightmap.Restart();
            network.d_Heightmap = heightmap;
            this.light          = new InfiniteMapChunkedSimple()
            {
                d_Map = map
            };
            light.Restart();
            this.terrainchunktesselator      = terrainchunktesselator;
            w.d_TerrainChunkTesselator       = terrainchunktesselator;
            terrainchunktesselator.d_Shadows = w;
            if (fullshadows)
            {
                UseShadowsFull();
            }
            else
            {
                UseShadowsSimple();
            }
            w.d_HudChat = new ManicDigger.Gui.HudChat()
            {
                d_Draw2d = the3d, d_ViewportSize = w
            };

            var dataItems = new GameDataItemsBlocks()
            {
                d_Data = gamedata
            };
            var inventoryController = clientgame;
            var inventoryUtil       = new InventoryUtil();
            var hudInventory        = new HudInventory();

            hudInventory.dataItems      = dataItems;
            hudInventory.inventory      = inventory;
            hudInventory.inventoryUtil  = inventoryUtil;
            hudInventory.controller     = inventoryController;
            hudInventory.viewport_size  = w;
            hudInventory.mouse_current  = w;
            hudInventory.the3d          = the3d;
            hudInventory.getfile        = getfile;
            hudInventory.ActiveMaterial = w;
            hudInventory.viewport3d     = w;
            w.d_Inventory             = inventory;
            w.d_InventoryController   = inventoryController;
            w.d_InventoryUtil         = inventoryUtil;
            inventoryUtil.d_Inventory = inventory;
            inventoryUtil.d_Items     = dataItems;

            clientgame.d_Inventory = inventory;
            w.d_HudInventory       = hudInventory;
            if (Debugger.IsAttached)
            {
                new DependencyChecker(typeof(InjectAttribute)).CheckDependencies(
                    w, audio, gamedata, clientgame, network, mapstorage, getfile,
                    config3d, mapManipulator, w, the3d, exit,
                    localplayerposition, physics,
                    internetgamefactory, blockrenderertorch, playerrenderer,
                    map, terrainchunktesselator);
            }
        }