Пример #1
0
        private Sprite MakeSprite(
            JsonSprite def,
            Dictionary <string, JsonSpriteStaticDefinition> defs,
            SpriteForm xResource)
        {
            var sprite = new Sprite(xResource);

            var staticDef = defs[def.Type];

            sprite.Body.BodyType = FarseerPhysics.Dynamics.BodyType.Static;
            sprite.Name          = def.Type;
            sprite.Frames        = staticDef.Frames;
            sprite.Position      = new Vector2(def.Position[0], def.Position[1]);
            sprite.Center        = new Vector2(staticDef.Center[0], staticDef.Center[1]);
            sprite.Rotation      = MathUtil.DegreesToRadians(def.Angle);
            sprite.Alpha         = def.Alpha;

            // Shapes
            sprite.SetShapes(staticDef.Shapes
                             .Select(x => x.Create(sprite.Center))
                             .ToArray());

            sprite.Children.AddRange(
                staticDef.Children.Select(child =>
                                          MakeSprite(child, defs, xResource)));
            sprite.Children.AddRange(
                def.Children.Select(child =>
                                    MakeSprite(child, defs, xResource)));

            // Behaviors
            //sprite.Behaviors["default"] = new AutoFrameBehavior(sprite);
#if DEBUG
            sprite.AddBehavior(new AutoBorderBehavior());
#endif
            var finalBehaviors = new Dictionary <string, Dictionary <string, object> >();
            foreach (var behavior in staticDef.Behaviors)
            {
                finalBehaviors.Add(behavior.Key, behavior.Value);
            }
            foreach (var behavior in def.Behaviors)
            {
                finalBehaviors[behavior.Key] = behavior.Value;
            }

            foreach (var behavior in finalBehaviors)
            {
                sprite.AddBehavior(BehaviorExtensions.Create(behavior.Key, behavior.Value));
            }

            return(sprite);
        }
Пример #2
0
        private void miFont_Click(object sender, System.EventArgs e)
        {
            if (m_lbl == null)
            {
                Endogine.Text.FontGenerator fg = new Endogine.Text.FontGenerator();
                fg.Font = new Font("Verdana", 24);
                fg.PensAndBrushes.Add(new LinearGradientBrush(new Rectangle(0, 0, 20, 20), Color.FromArgb(255, 0, 0), Color.FromArgb(0, 0, 255), 45, false));
                fg.PensAndBrushes.Add(new System.Drawing.Pen(System.Drawing.Color.FromArgb(255, 255, 255), 1.8f));
                fg.DefinedCharacters = Endogine.Text.FontGenerator.GetCharSet(Endogine.Text.FontGenerator.CharSet.Default, false, false);
                //fg.UseStyleTemplate("Test1");
                //fg.FontSize = 36;
                //fg.DefinedCharacters = Endogine.Text.FontGenerator.GetCharSet(Endogine.Text.FontGenerator.CharSet.Default, false, false);

                m_lbl = new Endogine.Forms.Label();
                m_lbl.FontGenerator    = fg;
                m_lbl.CharacterSpacing = 2;
                m_lbl.Text             = "Kerning: VA";
                m_lbl.Loc = new EPointF(40, 40);

                ////Add a swing behavior to each sprite. Behaviors can be added to any sprite.
                for (int i = 0; i < m_lbl.Sprites.Count; i++)
                {
                    Sprite sp = m_lbl.Sprites[i];
                    sp.TextureFilter = Sprite.TextureFilters.High;
                    sp.AddBehavior(new BhSwing(i * 5));
                }
            }
            else
            {
                m_lbl.Dispose();
                m_lbl = null;
            }
        }
Пример #3
0
        private void CreateNew(int a_nLocX)
        {
            Sprite sp = new Sprite();

            sp.Name = "Obstacle";
            sp.LocZ = 5;
            //TODO: new animation system
            MemberSpriteBitmap mb = (MemberSpriteBitmap)EndogineHub.Instance.CastLib.GetOrCreate("asteroid01");

            //mb.NumFramesPerAxis = new EPoint(7,6);
            sp.Member = mb;

            if (a_nLocX <= 0)
            {
                a_nLocX = GameMain.Instance.CaveWalls.GetMaxX();
            }
            float[] walls = GameMain.Instance.CaveWalls.GetWallsYOnX(a_nLocX);

            Random rnd = new Random();

            sp.Loc = new EPointF(a_nLocX, (walls[1] - walls[0]) * (float)rnd.NextDouble() + walls[0]);
            //sp.AutoAnimator.StepSize = 0.1f;
            sp.Scaling = new EPointF(0.3f, 0.3f);

            BhReportWhenOutside bh = new BhReportWhenOutside();

            sp.AddBehavior(bh);
            bh.Outside += new CaveHunter.BhReportWhenOutside.OutsideDelegate(bh_Outside);

            m_obstacles.Add(sp);
        }
Пример #4
0
        public void MarkNode(TreeNode a_node)
        {
            if (a_node == null)
            {
                return;
            }

            Sprite sp = this.SpriteFromNode(a_node);

            if (sp != null)
            {
                //check if there's already a marker on the sprite:
                if (this._markedSprites.Contains(sp))
                {
                    ////yes, so remove it:
                    this._markedSprites.Remove(sp);
                    //TODO: it shouldn't be a behavior, but a plain child sprite. Easier to manage...
                    BhSpriteTransformer bhXform = (BhSpriteTransformer)sp.GetBehaviorByIndex(0);
                    bhXform.Dispose();
                    a_node.ForeColor = Color.Black;
                }
                else
                {
                    //no; add a transformer:
                    BhSpriteTransformer bhXform = new BhSpriteTransformer();
                    sp.AddBehavior(bhXform);
                    bhXform.Init();
                    a_node.ForeColor = Color.Red;
                    this._markedSprites.Add(sp);
                }
            }
        }
Пример #5
0
        public override void Update(float dt)
        {
            var res = Sprite.XResource;
            var win = Sprite.Window;

            var pos = res.InvertTransformPoint(win.GlobalTransform, win.MouseClientPosition);

            if (win.MouseState.Buttons[0] &&
                win.KeyboardState.IsPressed(SharpDX.DirectInput.Key.LeftShift) &&
                pos != _lastCenter)
            {
                _lastCenter = pos;

                var child = new Sprite(win);
                child.Body.BodyType = FarseerPhysics.Dynamics.BodyType.Dynamic;
                child.Position      = pos;
                child.Name          = "Debug";
                child.Center        = new Vector2(15, 15);
                child.AddBehavior(new AutoBorderBehavior());
                child.SetShapes(new CircleShape(14.0f)
                {
                    Center = child.Center,
                });
                child.Frames = new[]
                {
                    "./Resources/Sprites/Nail.png"
                };
                Sprite.Children.Add(child);
            }
        }
Пример #6
0
        private void PopButton_Activated()
        {
            var logoSprite = new Sprite(SpriteConst.BelowTheStars, Width / 2, Height * 0.2f, Width * 0.33f, Height * 0.2f, new SKPaint {
                Color = new SKColor(255, 255, 255), BlendMode = SKBlendMode.Plus
            });

            logoSprite.Opacity = 0.7f;
            logoSprite.AddBehavior(new ToastBehavior(0, 0.3f, 1, 500, 500));
            AddChild(logoSprite);
        }
Пример #7
0
        protected override void OnActivated(object parameter = null)
        {
            Task.Run(async() =>
            {
                await Task.Delay(2000);
                var tapToPlay = new TapToPlay();
                AddChild(tapToPlay);
                tapToPlay.Down += OnTapped;
            });


            _logoSprite = new Sprite(SpriteConst.BelowTheStars, Width / 2, Height * 0.2f, Width * 0.33f, Height * 0.2f, new SKPaint {
                Color = new SKColor(255, 255, 255), BlendMode = SKBlendMode.Plus
            });
            _logoSprite.Opacity = 0.7f;
            _logoSprite.AddBehavior(new ToastBehavior(0, 0.3f, 1, 5000, 5000));

            _smallPlanetSprite = new Sprite(SpriteConst.SmallPlanet, Width / 2, Height * 0.8f, Width * 0.37f, Width * 0.37f, new SKPaint {
                Color = new SKColor(255, 255, 255), BlendMode = SKBlendMode.Plus
            });
            _smallPlanetSprite.Opacity = 0.5f;
            _smallPlanetSprite.AddBehavior(new ToastBehavior(0, 0.2f, 1, 10000, 15000));
            _smallPlanetSprite.Angle = (float)Math.PI * 1f / 4f;

            _mediumPlanetSprite = new Sprite(SpriteConst.MediumPlanet, Width / 2, Height * 0.5f, Width * 0.55f, Width * 0.5f, new SKPaint {
                Color = new SKColor(255, 255, 255), BlendMode = SKBlendMode.Plus
            });
            _mediumPlanetSprite.Opacity = 0.1f;
            _mediumPlanetSprite.AddBehavior(new ToastBehavior(0, 0.3f, 1, 0, 12000));
            _mediumPlanetSprite.Angle = (float)Math.PI * 1f / 4f;

            _bigPlanetSprite = new Sprite(SpriteConst.MediumPlanet, Width / 2, Height * 0.15f, Width * 0.78f, Width * 0.78f, new SKPaint {
                Color = new SKColor(255, 255, 255), BlendMode = SKBlendMode.Plus
            });
            _bigPlanetSprite.Opacity = 0.05f;
            _bigPlanetSprite.AddBehavior(new ToastBehavior(0, -0.3f, 1, 10000, 4000));
            _bigPlanetSprite.Angle = (float)Math.PI * 1f / 4f;

            AddChild(_smallPlanetSprite);


            AddChild(_mediumPlanetSprite);


            AddChild(_bigPlanetSprite);


            AddChild(_logoSprite);
        }
Пример #8
0
        private void CreateNewTiles(int a_nLocX)
        {
            //use perlin noise to generate wall structure
            ArrayList aNoise = new ArrayList();

            for (int x = 0; x < m_nTileWidth; x++)
            {
                aNoise.Add(0f);
            }
            m_noise.Offset = new EPointF(a_nLocX, 0);
            m_noise.FillArray(aNoise);

            PointF[] aPoints1 = new PointF[m_nTileWidth];
            PointF[] aPoints2 = new PointF[m_nTileWidth];
            for (int x = 0; x < m_nTileWidth; x++)
            {
                m_fCaveHeight *= 0.9997f;
                float fAllowedY = m_rctPlayArea.Height - m_fCaveHeight;
                m_fMidY = ((float)aNoise[x]) * fAllowedY;

                float[] yPair = new float[] { m_fMidY, m_fMidY + m_fCaveHeight };

                aPoints1[x] = new PointF(x, yPair[0]);
                aPoints2[x] = new PointF(x, yPair[1]);

                m_locYPairs.Add(x + a_nLocX, yPair);
            }

            ArrayList aBothTileLines = new ArrayList();

            aBothTileLines.Add(new TileLines(aPoints1));
            aBothTileLines.Add(new TileLines(aPoints2));


            for (int i = 0; i < 2; i++)
            {
                TileLines tileLines = (TileLines)aBothTileLines[i];
                Bitmap    bmp;
                Graphics  g;
                float     fYDiff = tileLines.MaxY - tileLines.MinY + 1;
                bmp = new Bitmap(m_nTileWidth, (int)fYDiff);
                g   = Graphics.FromImage(bmp);
                g.FillRectangle(new SolidBrush(Color.Black), 0, 0, bmp.Width, bmp.Height);
                //g.DrawLines(new Pen(Color.White, 2), tileLines.Points);
                //create polygon from lines:
                PointF[] polygon = tileLines.GetPolygon(i == 1);
                g.FillPolygon(new SolidBrush(Color.White), polygon);
                g.Dispose();

                MemberSpriteBitmap mb = new MemberSpriteBitmap(bmp);
                Sprite             sp = new Sprite();
                sp.Member = mb;
                sp.LocX   = a_nLocX;
                sp.LocY   = tileLines.MinY;
                if (i == 0)
                {
                    sp.Name = "Ceiling";
                }
                else
                {
                    sp.Name = "Floor";
                }

                BhReportWhenOutside bh = new BhReportWhenOutside();
                sp.AddBehavior(bh);
                bh.Outside += new CaveHunter.BhReportWhenOutside.OutsideDelegate(bh_Outside);

                m_wallSprites.Add(sp);


                Sprite spFill = new Sprite();
                spFill.MemberName = "BG1";
                if (i == 0)
                {
                    spFill.Rect = new ERectangleF(sp.LocX, m_rctPlayArea.Top, this.m_nTileWidth, sp.Rect.Top);
                }
                else
                {
                    spFill.Rect = new ERectangleF(sp.LocX, sp.Rect.Bottom, this.m_nTileWidth, m_rctPlayArea.Bottom - sp.Rect.Bottom);
                }
                bh = new BhReportWhenOutside();
                spFill.AddBehavior(bh);
                bh.Outside += new CaveHunter.BhReportWhenOutside.OutsideDelegate(bh_Outside);

                m_wallSprites.Add(spFill);
            }
        }