Beispiel #1
0
        public override void DidMoveToView(SKView view)
        {
            // Якорь на середину сцены
            AnchorPoint = new CGPoint(0.5f, 0.5f);

            // Подсчитываем рамеры клетки с камешком. Клетки квадратные
            gemCellWidth  = ((float)Size.Width - (Properties.GameFieldPadding * 2)) / Level.ColumnsNumber;
            gemCellHeight = gemCellWidth;

            // Устанавливаем бэкграунд из текстуры
            background.Size      = Size;
            background.ZPosition = 1;
            AddChild(background);

            // добавляем на сцену основной нод игры, в который будут добавлены остальные элементы уровня
            gameLayer.ZPosition = 2;
            AddChild(gameLayer);

            // Расчет позиции нода с камешками в зависиомсти от высоты и ширины клетки и колисчества клеток
            CGPoint layerPosition = new CGPoint(-gemCellWidth * Level.ColumnsNumber / 2.0f, -gemCellHeight * Level.RowsNumber / 2.0f);

            // добавляем в основной нод нод для камешков
            gemLayer.Position  = layerPosition;
            gemLayer.ZPosition = 3;
            gameLayer.AddChild(gemLayer);
        }
Beispiel #2
0
        public virtual void Initialize()
        {
            Console.WriteLine(IntPtr.Size);
            Heroes        = new List <HeroCharacter> ();
            players       = new List <Player> (NUM_PLAYERS);
            DefaultPlayer = new Player();
            players.Add(DefaultPlayer);
            for (int i = 1; i < NUM_PLAYERS; i++)
            {
                players.Add(null);
            }

            world = new SKNode()
            {
                Name = "world"
            };
            layers = new List <SKNode> ((int)WorldLayer.Count);
            for (int i = 0; i < (int)WorldLayer.Count; i++)
            {
                var layer = new SKNode {
                    ZPosition = i - (int)WorldLayer.Count
                };
                world.AddChild(layer);
                layers.Add(layer);
            }
            AddChild(world);

            buildHUD();
            updateHUDFor(DefaultPlayer, HUDState.Local);
        }
        public void DidAddNode(ARSKView view, SKNode node, ARAnchor anchor)
        {
            if (!this.anchorLabels.TryGetValue(anchor.Identifier, out string labelText))
            {
                throw new Exception("missing expected associated label for anchor");
            }

            node.AddChild(new TemplateLabelNode(labelText));
        }
Beispiel #4
0
        /// <summary>
        /// Добававляем его спрайт на нод для камешка, с расчетом размера и позиции
        /// </summary>
        /// <param name="gem">Камешек которому добавляется спрайт.</param>
        private void AttachSpriteTo(Gem gem)
        {
            SKSpriteNode sprite;

            // Если разрушитель - открепляем старый спрайт на этом месте от слоя камешков
            if ((gem.IsALineDestroyer || gem.IsABomb) && Level.GemArray[gem.Row, gem.Column] != null)
            {
                sprite = Level.GemArray[gem.Row, gem.Column].Sprite;

                if (sprite != null && sprite.Parent != null)
                {
                    sprite.RemoveFromParent();
                }
            }

            // подготовка спрайта
            sprite          = SKSpriteNode.FromImageNamed(gem.GetSpriteName());
            sprite.Size     = new CGSize(gemCellWidth, gemCellHeight);
            sprite.Position = GetPositionFromRowAndColumn(gem.Row, gem.Column);
            gemLayer.AddChild(sprite);

            gem.Sprite = sprite;

            // подготовка к анимации
            sprite.Alpha  = 0;
            sprite.XScale = 0.5f;
            sprite.YScale = 0.5f;

            // Анимация появления камешка
            sprite.RunAction(
                SKAction.Sequence(
                    SKAction.WaitForDuration(0.25, 0.5),
                    SKAction.Group(
                        SKAction.FadeInWithDuration(0.25),
                        SKAction.ScaleTo(1.0f, 0.25)
                        )
                    ));

            // если разрушитель - заменяем в массиве камешек
            if (gem.IsALineDestroyer || gem.IsABomb)
            {
                Level.GemArray[gem.Row, gem.Column] = gem;
            }
        }
Beispiel #5
0
        public static void LoadSharedAssetsOnce()
        {
                        #if __IOS__
            var whiteColor = UIColor.White;
                        #else
            NSColor whiteColor = null;
            new NSObject().InvokeOnMainThread(() => {
                whiteColor = NSColor.White;
            });
                        #endif

            SKTextureAtlas atlas = SKTextureAtlas.FromName("Environment");

            SKEmitterNode fire = GraphicsUtilities.EmitterNodeWithEmitterNamed("CaveFire");
            fire.ZPosition = 1;

            SKEmitterNode smoke = GraphicsUtilities.EmitterNodeWithEmitterNamed("CaveFireSmoke");

            var sKNode = new SKNode();
            sKNode.Add(fire);
            sKNode.Add(smoke);
            SKNode torch = sKNode;

            sharedCaveBase = SKSpriteNode.FromTexture(atlas.TextureNamed("cave_base.png"));

            // Add two torches either side of the entrance.
            torch.Position = new CGPoint(83, 83);
            sharedCaveBase.AddChild(torch);
            var torchB = (SKNode)torch.Copy();
            torchB.Position = new CGPoint(-83, 83);
            sharedCaveBase.AddChild(torchB);

            sharedCaveTop     = SKSpriteNode.FromTexture(atlas.TextureNamed("cave_top.png"));
            sharedDeathSplort = SKSpriteNode.FromTexture(atlas.TextureNamed("cave_destroyed.png"));

            sharedDamageEmitter = GraphicsUtilities.EmitterNodeWithEmitterNamed("CaveDamage");
            sharedDeathEmitter  = GraphicsUtilities.EmitterNodeWithEmitterNamed("CaveDeathSmoke");

            sharedDamageAction = SKAction.Sequence(new [] {
                SKAction.ColorizeWithColor(whiteColor, 1, 0),
                SKAction.WaitForDuration(0.25),
                SKAction.ColorizeWithColorBlendFactor(0, 0.1),
            });
        }
Beispiel #6
0
        public static SKLabelNode AddDescription(this SKNode self, string description, CGPoint position)
        {
            SKLabelNode label = new SKLabelNode("Helvetica")
            {
                Text     = description,
                FontSize = 18,
                Position = position
            };

            self.AddChild(label);
            return(label);
        }
 public void ChangePlayerWinsIndicator(int PlayerNo, int Wins)
 {
     if (PlayerWinsIndicator[PlayerNo] != null)
     {
         Players.PlayerWins[PlayerNo] = Wins;
         SKNode LifeNoSpot = PlayerWinsIndicator[PlayerNo].Children[1];
         LifeNoSpot.RemoveAllChildren();
         SKSpriteNode NoNode = new SKSpriteNode("No" + Wins);
         NoNode.Size = new CGSize(15, 15);
         LifeNoSpot.AddChild(NoNode);
     }
     else
     {
         System.Console.WriteLine("Wins Indicators are not initialized yet");
     }
 }
 public void ChangeLifeIndicator(int PlayerNo, int Life)
 {
     if (LifeIndicator[PlayerNo] != null)
     {
         if (Life < 0)
         {
             Life = 0;
         }
         Players.PlayerLife[PlayerNo] = Life;
         SKNode LifeNoSpot = LifeIndicator[PlayerNo].Children[2];
         LifeNoSpot.RemoveAllChildren();
         SKSpriteNode NoNode = new SKSpriteNode("No" + Life);
         NoNode.Size = new CGSize(15, 15);
         LifeNoSpot.AddChild(NoNode);
     }
     else
     {
         System.Console.WriteLine("Life indicators are not initialized yet");
     }
 }
Beispiel #9
0
        public void Setup()
        {
            nfloat w = Bounds.Width;
            nfloat h = Bounds.Height;

            if (w < h)
            {
                nfloat wTmp = w;
                w = h;
                h = wTmp;
            }

            // Setup the game overlays using SpriteKit
            SKScene skScene = SKScene.FromSize(new CGSize(w, h));

            skScene.ScaleMode = SKSceneScaleMode.ResizeFill;

            overlayGroup = SKNode.Create();
            skScene.AddChild(overlayGroup);
            overlayGroup.Position = new CGPoint(0f, h);

            // The Max icon
            SKSpriteNode sprite = SKSpriteNode.FromImageNamed("Images/MaxIcon.png");

            sprite.Position = new CGPoint(50f, -50f);

            overlayGroup.AddChild(sprite);
            sprite.XScale = sprite.YScale = 0.5f;

            for (int i = 0; i < 3; i++)
            {
                flowers [i]          = SKSpriteNode.FromImageNamed("Images/FlowerEmpty.png");
                flowers [i].Position = new CGPoint(110f + i * 40f, -50f);
                flowers [i].XScale   = flowers [i].YScale = 0.25f;
                overlayGroup.AddChild(flowers[i]);
            }

            // The peal icon and count.
            sprite          = SKSpriteNode.FromImageNamed("Images/ItemsPearl.png");
            sprite.Position = new CGPoint(110f, -100f);
            sprite.XScale   = sprite.YScale = 0.5f;
            overlayGroup.AddChild(sprite);

            pearlLabel          = SKLabelNode.FromFont("Chalkduster");
            pearlLabel.Text     = "x0";
            pearlLabel.Position = new CGPoint(152f, -113f);
            overlayGroup.AddChild(pearlLabel);

            // The D-Pad
            sprite          = SKSpriteNode.FromImageNamed("Images/dpad.png");
            sprite.Position = new CGPoint(100f, 100f);
            sprite.XScale   = sprite.YScale = 0.5f;
            skScene.AddChild(sprite);
            padRect = new CGRect(
                (sprite.Position.Y - DPAD_RADIUS) / w,
                1f - (sprite.Position.Y + DPAD_RADIUS) / h,
                2f * DPAD_RADIUS / w,
                2f * DPAD_RADIUS / h
                );

            // Assign the SpriteKit overlay to the SceneKit view.
            OverlayScene = skScene;

            // Setup the pinch gesture
            defaultFov = PointOfView.Camera.XFov;

            var pinch = new UIPinchGestureRecognizer {
                Delegate             = this,
                CancelsTouchesInView = false
            };

            pinch.AddTarget(() => PinchWithGestureRecognizer(pinch));

            AddGestureRecognizer(pinch);
        }
Beispiel #10
0
        void buildHUD()
        {
            string[] iconNames = new [] {
                "iconWarrior_blue",
                "iconWarrior_green",
                "iconWarrior_pink",
                "iconWarrior_red"
            };
                        #if __IOS__
            UIColor[] colors = new [] { UIColor.Green, UIColor.Blue, UIColor.Yellow, UIColor.Red };
                        #else
            var colors = new NSColor [] { NSColor.Green, NSColor.Blue, NSColor.Yellow, NSColor.Red };
                        #endif
            var hudX = 30.0f;
            var hudY = Frame.Size.Height - 30;
            var hudD = Frame.Size.Width / NUM_PLAYERS;

            hudAvatars         = new List <SKSpriteNode> (NUM_PLAYERS);
            hudLabels          = new List <SKLabelNode> (NUM_PLAYERS);
            hudScores          = new List <SKLabelNode> (NUM_PLAYERS);
            hudLifeHeartArrays = new List <List <SKSpriteNode> > (NUM_PLAYERS);
            var hud = new SKNode();

            for (int i = 0; i < NUM_PLAYERS; i++)
            {
                var avatar = new SKSpriteNode(iconNames [i])
                {
                    XScale = 0.5f,
                    YScale = 0.5f,
                    Alpha  = 0.5f,
                };
                avatar.Position = new CGPoint(hudX + i * hudD + (avatar.Size.Width * 0.5f),
                                              Frame.Size.Height - avatar.Size.Height * 0.5f - 8f);
                hudAvatars.Add(avatar);
                hud.AddChild(avatar);

                var label = new SKLabelNode("Copperplate")
                {
                    Text      = "NO PLAYER",
                    FontColor = colors [i],
                    FontSize  = 16,
                    HorizontalAlignmentMode = SKLabelHorizontalAlignmentMode.Left,
                    Position = new CGPoint(hudX + i * hudD + avatar.Size.Width, hudY + 10)
                };
                hudLabels.Add(label);
                hud.AddChild(label);

                var score = new SKLabelNode("Copperplate")
                {
                    Text      = "SCORE: 0",
                    FontColor = colors [i],
                    FontSize  = 16,
                    HorizontalAlignmentMode = SKLabelHorizontalAlignmentMode.Left,
                    Position = new CGPoint(hudX + i * hudD + avatar.Size.Width, hudY - 40)
                };
                hudScores.Add(score);
                hud.AddChild(score);

                var playerHearts = new List <SKSpriteNode> (Player.StartLives);
                hudLifeHeartArrays.Add(playerHearts);
                for (int j = 0; j < Player.StartLives; j++)
                {
                    var heart = new SKSpriteNode("lives.png")
                    {
                        XScale = 0.4f,
                        YScale = 0.4f,
                        Alpha  = 0.1f
                    };
                    heart.Position = new CGPoint(hudX + i * hudD + avatar.Size.Width + 18 + (heart.Size.Width + 5) * j, hudY - 10);
                    playerHearts.Add(heart);
                    hud.AddChild(heart);
                }
            }

            AddChild(hud);
        }
Beispiel #11
0
        // All sprites in the scene should be added through this method to ensure they are placed in the correct world layer.
        public void AddNode(SKNode node, WorldLayer layer)
        {
            SKNode layerNode = layers [(int)layer];

            layerNode.AddChild(node);
        }
Beispiel #12
0
		public void Setup ()
		{
			nfloat w = Bounds.Width;
			nfloat h = Bounds.Height;

			if (w < h) {
				nfloat wTmp = w;
				w = h;
				h = wTmp;
			}

			// Setup the game overlays using SpriteKit
			SKScene skScene = SKScene.FromSize (new CGSize (w, h));
			skScene.ScaleMode = SKSceneScaleMode.ResizeFill;

			overlayGroup = SKNode.Create ();
			skScene.AddChild (overlayGroup);
			overlayGroup.Position = new CGPoint (0f, h);

			// The Max icon
			SKSpriteNode sprite = SKSpriteNode.FromImageNamed ("Images/MaxIcon.png");
			sprite.Position = new CGPoint (50f, -50f);

			overlayGroup.AddChild (sprite);
			sprite.XScale = sprite.YScale = 0.5f;

			for (int i = 0; i < 3; i++) {
				flowers [i] = SKSpriteNode.FromImageNamed ("Images/FlowerEmpty.png");
				flowers [i].Position = new CGPoint (110f + i * 40f, -50f);
				flowers [i].XScale = flowers [i].YScale = 0.25f;
				overlayGroup.AddChild (flowers[i]);
			}

			// The peal icon and count.
			sprite = SKSpriteNode.FromImageNamed ("Images/ItemsPearl.png");
			sprite.Position = new CGPoint (110f, -100f);
			sprite.XScale = sprite.YScale = 0.5f;
			overlayGroup.AddChild (sprite);

			pearlLabel = SKLabelNode.FromFont ("Chalkduster");
			pearlLabel.Text = "x0";
			pearlLabel.Position = new CGPoint (152f, -113f);
			overlayGroup.AddChild (pearlLabel);

			// The D-Pad
			sprite = SKSpriteNode.FromImageNamed ("Images/dpad.png");
			sprite.Position = new CGPoint (100f, 100f);
			sprite.XScale = sprite.YScale = 0.5f;
			skScene.AddChild (sprite);
			padRect = new CGRect (
				(sprite.Position.Y - DPAD_RADIUS) / w,
				1f - (sprite.Position.Y + DPAD_RADIUS) / h,
				2f * DPAD_RADIUS / w,
				2f * DPAD_RADIUS / h
			);

			// Assign the SpriteKit overlay to the SceneKit view.
			OverlayScene = skScene;

			// Setup the pinch gesture
			defaultFov = PointOfView.Camera.XFov;

			var pinch = new UIPinchGestureRecognizer {
				Delegate = this,
				CancelsTouchesInView = false
			};
			pinch.AddTarget (() => PinchWithGestureRecognizer (pinch));

			AddGestureRecognizer (pinch);
		}
        void buildHUD()
        {
            string[] iconNames = new [] {
                "iconWarrior_blue",
                "iconWarrior_green",
                "iconWarrior_pink",
                "iconWarrior_red"
            };
            #if __IOS__
            UIColor[] colors = new [] { UIColor.Green, UIColor.Blue, UIColor.Yellow, UIColor.Red };
            #else
            var colors = new NSColor [] { NSColor.Green, NSColor.Blue, NSColor.Yellow, NSColor.Red };
            #endif
            var hudX = 30.0f;
            var hudY = Frame.Size.Height - 30;
            var hudD = Frame.Size.Width / NUM_PLAYERS;

            hudAvatars = new List<SKSpriteNode> (NUM_PLAYERS);
            hudLabels = new List<SKLabelNode> (NUM_PLAYERS);
            hudScores = new List<SKLabelNode> (NUM_PLAYERS);
            hudLifeHeartArrays = new List<List<SKSpriteNode>> (NUM_PLAYERS);
            var hud = new SKNode ();

            for (int i = 0; i < NUM_PLAYERS; i++) {
                var avatar = new SKSpriteNode (iconNames [i]) {
                    XScale = 0.5f,
                    YScale = 0.5f,
                    Alpha = 0.5f,
                };
                avatar.Position = new CGPoint (hudX + i * hudD + (avatar.Size.Width * 0.5f),
                    Frame.Size.Height - avatar.Size.Height * 0.5f - 8f);
                hudAvatars.Add (avatar);
                hud.AddChild (avatar);

                var label = new SKLabelNode ("Copperplate") {
                    Text = "NO PLAYER",
                    FontColor = colors [i],
                    FontSize = 16,
                    HorizontalAlignmentMode = SKLabelHorizontalAlignmentMode.Left,
                    Position = new CGPoint (hudX + i * hudD + avatar.Size.Width, hudY + 10)
                };
                hudLabels.Add (label);
                hud.AddChild (label);

                var score = new SKLabelNode ("Copperplate") {
                    Text = "SCORE: 0",
                    FontColor = colors [i],
                    FontSize = 16,
                    HorizontalAlignmentMode = SKLabelHorizontalAlignmentMode.Left,
                    Position = new CGPoint (hudX + i * hudD + avatar.Size.Width, hudY - 40)
                };
                hudScores.Add (score);
                hud.AddChild (score);

                var playerHearts = new List<SKSpriteNode> (Player.StartLives);
                hudLifeHeartArrays.Add (playerHearts);
                for (int j = 0; j < Player.StartLives; j++) {
                    var heart = new SKSpriteNode ("lives.png") {
                        XScale = 0.4f,
                        YScale = 0.4f,
                        Alpha = 0.1f
                    };
                    heart.Position = new CGPoint (hudX + i * hudD + avatar.Size.Width + 18 + (heart.Size.Width + 5) * j, hudY - 10);
                    playerHearts.Add (heart);
                    hud.AddChild (heart);
                }
            }

            AddChild (hud);
        }
        public virtual void Initialize()
        {
            Console.WriteLine (IntPtr.Size);
            Heroes = new List<HeroCharacter> ();
            players = new List<Player> (NUM_PLAYERS);
            DefaultPlayer = new Player ();
            players.Add (DefaultPlayer);
            for (int i = 1; i < NUM_PLAYERS; i++)
                players.Add (null);

            world = new SKNode () {
                Name = "world"
            };
            layers = new List<SKNode> ((int)WorldLayer.Count);
            for (int i = 0; i < (int)WorldLayer.Count; i++) {
                var layer = new SKNode {
                    ZPosition = i - (int)WorldLayer.Count
                };
                world.AddChild (layer);
                layers.Add (layer);
            }
            AddChild (world);

            buildHUD ();
            updateHUDFor (DefaultPlayer, HUDState.Local);
        }