Esempio n. 1
0
            protected override void Update()
            {
                if (!Enabled)
                {
                    return;
                }

                base.Update();

                var currentTime = Time.Current;

                var isCreateShow = !Children.Any() ||
                                   (Children.LastOrDefault() as SnowSprite)?.CreateTime
                                   + 1000 / SnowGenerateParSecond < currentTime;

                // If can generate new snow
                if (isCreateShow && EnableNewSnow)
                {
                    var currentAlpha = (float)random.Next(0, 255) / 255;
                    var width        = (int)DrawWidth;
                    var newFlake     = new SnowSprite
                    {
                        Anchor          = Anchor.TopCentre,
                        Origin          = Anchor.Centre,
                        Colour          = Color4.White,
                        Position        = new Vector2(random.Next(-width / 2, width / 2), -40),
                        Depth           = 1,
                        CreateTime      = currentTime,
                        Size            = new Vector2(50, 50),
                        Scale           = new Vector2(1, 1) * SnowSize,
                        Alpha           = currentAlpha,
                        HorizontalSpeed = random.Next(-100, 100) + WingAffection * 10
                    };
                    Add(newFlake);
                }

                // Update each snow position
                foreach (var drawable in Children)
                {
                    if (!(drawable is SnowSprite snow))
                    {
                        continue;
                    }

                    snow.X += snow.HorizontalSpeed / 1000f;
                    snow.Y += 1 * Speed;

                    // Recycle
                    if (snow.CreateTime + SnowExpireTime < currentTime)
                    {
                        Children.ToList().Remove(snow);
                    }
                }
            }
        public void SnowFallingAnimation(int numberOfSnowflakes)
        {
            int FrameWidth  = 95;
            int FrameHeight = 95;

            // Create a NameScope for this page so that
            // Storyboards can be used.
            NameScope.SetNameScope(this, new NameScope());
            Canvas        containerCanvas = new Canvas();
            List <string> sprites         = new List <string>();

            for (int i = 1; i <= numberOfSnowflakes; i++)
            {
                string spriteName = "SnowSprite" + i.ToString("0000");
                AnimatingSprites.Add(spriteName);

                RectangleGeometry myRectangleGeometry = new RectangleGeometry();

                var randomStartY   = RandomNumber(0, (int)this.MainGrid.ActualWidth - FrameWidth);
                int randomStartX   = -RandomNumber(FrameHeight, FrameHeight * 4);
                var randomDuration = RandomNumber(1000, 4000);

                myRectangleGeometry.Rect = new Rect(randomStartY, randomStartX, FrameWidth, FrameHeight);
                // Assign the geometry a name so that
                // it can be targeted by a Storyboard.
                this.RegisterName(
                    spriteName, myRectangleGeometry);

                Sprite sprite = new SnowSprite(FrameWidth, FrameHeight, 1000, 4000, "SnowSprite.png", randomStartY, randomStartX);
                var    p      = sprite.DoThing(myRectangleGeometry, this.MainGrid, spriteName, this);
                sprite.AnimationComplete += HalloweenSpiderRectAnimation_Completed;


                // Start the storyboard when the Path loads.



                containerCanvas.Children.Add(p);

                Content = containerCanvas;
            }
        }
Esempio n. 3
0
        private async Task OnCreateResourcesAsync(EngineCreateResourcesEventArgs e)
        {
            var grass     = GrassSprite.Resolve(Entity);
            var snow      = SnowSprite.Resolve(Entity);
            var rock      = RockSprite.Resolve(Entity);
            var heightMap = _terrain.HeightMap.Resolve(Entity);

            if (!heightMap.IsPreScaled || !grass.IsPreScaled || !snow.IsPreScaled || !rock.IsPreScaled)
            {
                throw new ArgumentException("The heightmap, grass, snow and rock textures must be prescaled in order to be used for terrain rendering");
            }

            // Calculate average colors (these are used at small zoom levels)
            _grassColor = GetAverageColor(e.Sender, grass.Image);
            _snowColor  = GetAverageColor(e.Sender, snow.Image);
            _rockColor  = GetAverageColor(e.Sender, rock.Image);

            _normalHeightMap = await RenderNormalHeightMapAsync(e.Sender, heightMap.Image, _terrain.Height - _terrain.BaseHeight);

            var wrap       = CanvasEdgeBehavior.Wrap;
            var grassTiled = new BorderEffect {
                Source = grass.Image, ExtendX = wrap, ExtendY = wrap, CacheOutput = true
            };
            var snowTiled = new BorderEffect {
                Source = snow.Image, ExtendX = wrap, ExtendY = wrap, CacheOutput = true
            };
            var rockTiled = new BorderEffect {
                Source = rock.Image, ExtendX = wrap, ExtendY = wrap, CacheOutput = true
            };

            var shaderBytes = await Utilities.ReadBytesFromUriAsync(new Uri("ms-appx:///Shaders/TerrainShader.bin"));

            _terrainMap = new PixelShaderEffect(shaderBytes)
            {
                Source1     = _normalHeightMap,
                Source2     = grassTiled,
                Source3     = snowTiled,
                Source4     = rockTiled,
                CacheOutput = true
            };
        }