public HangarGUILayer(HangarLayer hangarLayer) : base(CCColor4B.Transparent, countTouches: true)
        {
            HangarLayer  = hangarLayer;
            Scroller     = null;
            PartCarousel = new NonScalingCarousel(new CCSize(Constants.COCOS_WORLD_WIDTH, Constants.COCOS_WORLD_HEIGHT / 3));
            PartCarousel.SpacingFactor       = 0.2f;
            PartCarousel.MiddleChangedEvent += (sender, args) =>
            {
                foreach (var node in PartCarousel.CollectionNode.Children)
                {
                    PartCarouselNode pNode = (PartCarouselNode)node;
                    pNode.PartCollectionNode.Pressable = false;
                }
                ((PartCarouselNode)PartCarousel.MiddleNode).PartCollectionNode.Pressable = true;
            };
            PartCarousel.IsHorizontal = false;
            PartCarousel.AnchorPoint  = CCPoint.AnchorUpperLeft;
            PartCarousel.Position     = new CCPoint(0, Constants.COCOS_WORLD_HEIGHT);
            foreach (Part.Type type in Enum.GetValues(typeof(Part.Type)))
            {
                PartCarousel.AddToCollection(new PartCarouselNode(type));
            }
            PartCarousel.Visible = false;
            AddChild(PartCarousel);
            // add a touch listener
            var touchListener = new CCEventListenerTouchAllAtOnce();

            touchListener.OnTouchesBegan     = base.OnTouchesBegan;
            touchListener.OnTouchesMoved     = OnTouchesMoved;
            touchListener.OnTouchesEnded     = OnTouchesEnded;
            touchListener.OnTouchesCancelled = OnTouchesEnded;
            AddEventListener(touchListener, this);
        }
        private protected void OnTouchesMoved(List <CCTouch> touches, CCEvent touchEvent)
        {
            switch (touches.Count)
            {
            case 1:
            {
                var touch = touches[0];
                if (DragAndDropObject != null)
                {
                    ((CCNode)DragAndDropObject).Position = touch.Location + dragAndDropRelativePos;
                    switch (HangarLayer.State)
                    {
                    case HangarLayer.HangarState.MODIFY_AIRCRAFT:
                    {
                        // update the mount lines (to correctly visualize proximity to a fitting mount point)
                        if (HangarLayer.UpdateClosestMount())
                        {
                            HangarLayer.DrawInModifyAircraftState();
                        }
                    }
                    break;
                    }
                }
            }
            break;

            default:
                break;
            }
        }
Exemple #3
0
        private void ReturnToHangar()
        {
            var hangarLayer = new HangarLayer(true);

            foreach (var part in TotalSalvagedParts)
            {
                hangarLayer.AddPart(part);
            }
            TransitionFadingFromTo(this.GUILayer, hangarLayer.GUILayer, this, hangarLayer, 2f);

            // unsubscribe from all events
            MathChallengeNode.UnlockedAddSubSlotEvent -= UnlockSlot;
            MathChallengeNode.UnlockedMulDivSlotEvent -= UnlockSlot;
            MathChallengeNode.UnlockedSolveSlotEvent  -= UnlockSlot;

            /*
             * var parent = Parent;
             * RemoveAllListeners();
             * GUILayer.RemoveAllListeners();
             * Parent.RemoveChild(GUILayer);
             * Parent.RemoveChild(this);
             * parent.AddChild(HangarLayer.GlobalHangarLayer.GUILayer);
             * parent.AddChild(HangarLayer.GlobalHangarLayer, zOrder: int.MinValue);
             */
        }
Exemple #4
0
        public override void ApplicationDidFinishLaunching(CCApplication application, CCWindow mainWindow)
        {
            application.ContentRootDirectory = "Content";
            var windowSize = mainWindow.WindowSizeInPixels;

            mainWindow.DisplayStats = true;

            // This will set the world bounds to be (0,0, w, h)
            // CCSceneResolutionPolicy.ShowAll will ensure that the aspect ratio is preserved
            CCScene.SetDefaultDesignResolution(Constants.COCOS_WORLD_WIDTH, Constants.COCOS_WORLD_HEIGHT, CCSceneResolutionPolicy.ShowAll);

            // Determine whether to use the high or low def versions of our images
            // Make sure the default texel to content size ratio is set correctly
            // Of course you're free to have a finer set of image resolutions e.g (ld, hd, super-hd)

            /*
             * if (desiredWidth < windowSize.Width)
             * {
             *  application.ContentSearchPaths.Add("hd");
             *  CCSprite.DefaultTexelToContentSizeRatio = 2.0f;
             * }
             * else
             * {
             *  application.ContentSearchPaths.Add("ld");
             *  CCSprite.DefaultTexelToContentSizeRatio = 1.0f;
             * }
             */
            application.ContentSearchPaths = new List <string>()
            {
                "sounds",
                "hd/graphics",
                "hd/fonts"
            };
            //CCSprite.DefaultTexelToContentSizeRatio = 1.0f;
            //CCSprite.DefaultTexelToContentSizeRatio = 0.125f;
            //CCSprite.DefaultTexelToContentSizeRatio = 0.0625f;
            var scene = new CCScene(mainWindow);
            //var playLayer = new PlayLayer();
            //var wreckLayer = new WreckageLayer();
            //wreckLayer.DEBUG = true;
            var hangarLayer = new HangarLayer();

            FinishedLoading = true;

            scene.AddChild(hangarLayer.GUILayer);
            scene.AddChild(hangarLayer, zOrder: int.MinValue);
            //scene.AddChild(playLayer.GUILayer);
            //scene.AddChild(playLayer, zOrder:int.MinValue);
            //scene.AddChild(wreckLayer.GUILayer);
            //scene.AddChild(wreckLayer, zOrder:int.MinValue);

            mainWindow.RunWithScene(scene);
        }
Exemple #5
0
        // LoadGame is called when CocosSharp is initialized. We can begin creating
        // our CocosSharp objects here:
        void HandleViewCreated(object sender, EventArgs e)
        {
            var gameView = sender as CCGameView;

            if (gameView != null)
            {
                // show the stats
                //gameView.Stats.Enabled = true;

                // This sets the game "world" resolution:
                gameView.DesignResolution = new CCSizeI(Constants.COCOS_WORLD_WIDTH, Constants.COCOS_WORLD_HEIGHT);
                gameView.ResolutionPolicy = CCViewResolutionPolicy.ShowAll;

                //gameView.ContentManager.RootDirectory = "Content";
                gameView.ContentManager.SearchPaths = new List <string>()
                {
                    "sounds",
                    "hd/graphics",
                    "hd/fonts"
                };

                // tell CCSprite to scale all textures by the factor 8, as standard behaviour
                //CCSprite.DefaultTexelToContentSizeRatio = 0.125f;

                // GameScene is the root of the CocosSharp rendering hierarchy:
                //gameScene = new GameScene(gameView);
                var myScene = new CCScene(gameView);
                //var playLayer = new PlayLayer();
                var hangarLayer = new HangarLayer();
                myApp.FinishedLoading = true;

                myScene.AddLayer(hangarLayer.GUILayer);
                myScene.AddLayer(hangarLayer, zOrder: int.MinValue);
                //myScene.AddChild(playLayer);
                //myScene.AddChild(playLayer.GUILayer);

                // Starts CocosSharp:
                gameView.RunWithScene(myScene);
            }
        }
        new private protected void OnTouchesEnded(List <CCTouch> touches, CCEvent touchEvent)
        {
            base.OnTouchesEnded(touches, touchEvent);
            switch (touches.Count)
            {
            case 1:
            {
                var touch = touches[0];
                if (DragAndDropObject != null)
                {
                    touchEvent.StopPropogation();
                    switch (HangarLayer.State)
                    {
                    case HangarLayer.HangarState.HANGAR:
                        var selectedAircraft = DragAndDropObject as Aircraft;
                        DragAndDropObject = null;
                        if (selectedAircraft != null)
                        {
                            // if an aircraft is dragged upon the takeoff node add it to the collection
                            if (!(TakeoffNode.BoundingBoxTransformedToParent.ContainsPoint(touch.Location) && TakeoffCollectionNode.AddToCollection(selectedAircraft)))
                            {
                                // if not, then place it back into the hangar
                                HangarLayer.AddAircraftChild(selectedAircraft);
                                selectedAircraft.Scale = Constants.STANDARD_SCALE;
                                HangarLayer.PlaceAircraft(selectedAircraft, HangarLayer.GUICoordinatesToHangar(selectedAircraft.Position));
                            }
                            if (TakeoffCollectionNode.Collection.Any())
                            {
                                GOButton.AddAction(HangarLayer.AddGOButton);
                                TakeoffCollectionLabel.Visible = false;
                            }
                            else if (!PopUp.TriggeredPlayLayer)
                            {
                                TakeoffCollectionLabel.Visible = true;
                            }
                        }
                        break;

                    case HangarLayer.HangarState.MODIFY_AIRCRAFT:
                    {
                        bool mounted = false;
                        HangarLayer.UpdateClosestMount();
                        // the object is a part
                        var part = (Part)DragAndDropObject;
                        DragAndDropObject = null;
                        // if it is a body and the aircraft currently has none (which means no parts at all)
                        if (HangarLayer.ModifiedAircraft.Body == null && part.Types.Contains(Part.Type.BODY) && CCPoint.IsNear(HangarLayer.GUICoordinatesToHangar(part.PositionWorldspace), HangarLayer.ModifiedAircraft.PositionWorldspace, MOUNT_DISTANCE))
                        {
                            // set it as the aircraft body
                            HangarLayer.ModifiedAircraft.InWorkshopConfiguration = false;
                            part.Scale = 1;
                            HangarLayer.ModifiedAircraft.Body = part;
                            HangarLayer.ModifiedAircraft.InWorkshopConfiguration = true;
                            HangarLayer.CalcBoundaries();                 // the aircraft has changed size, so update the boundaries
                            HangarLayer.DrawInModifyAircraftState();
                            mounted = true;
                        }
                        // check if the part is currently at a mount point where it can be mounted
                        else if (!mounted)
                        {
                            var possibleMounts = new List <PartMount>();
                            foreach (var modPart in HangarLayer.ModifiedAircraft.TotalParts)
                            {
                                foreach (var mountPoint in modPart.PartMounts)
                                {
                                    if (mountPoint.Available && mountPoint.CanMount(part))
                                    {
                                        if (CCPoint.IsNear(HangarLayer.GUICoordinatesToHangar(part.PositionWorldspace), mountPoint.PositionModifyAircraft, MOUNT_DISTANCE))
                                        {
                                            possibleMounts.Add(mountPoint);
                                        }
                                    }
                                }
                            }
                            // mount at the closest possible mount point
                            float     minDistance  = float.PositiveInfinity;
                            PartMount closestMount = null;
                            foreach (var mountPoint in possibleMounts)
                            {
                                float distance = CCPoint.Distance(HangarLayer.GUICoordinatesToHangar(part.PositionWorldspace), mountPoint.PositionModifyAircraft);
                                if (distance < minDistance)
                                {
                                    minDistance  = distance;
                                    closestMount = mountPoint;
                                }
                            }
                            if (closestMount != null)
                            {
                                // better mount in non-workshop configuration
                                HangarLayer.ModifiedAircraft.InWorkshopConfiguration = false;
                                part.Scale = 1;
                                closestMount.MyPart.MountPart(closestMount, part);
                                HangarLayer.ModifiedAircraft.InWorkshopConfiguration = true;
                                HangarLayer.CalcBoundaries();                 // the aircraft has probably changed size, so update the boundaries
                                HangarLayer.DrawInModifyAircraftState();
                                mounted = true;
                            }
                        }
                        // if the part has not been mounted the part is just dropped and added to the collection
                        if (!mounted)
                        {
                            // first disassemble it though
                            // and flip it if it is flipped
                            var totalParts = part.TotalParts;
                            part.Disassemble();
                            foreach (var singlePart in totalParts)
                            {
                                if (singlePart.Flipped)
                                {
                                    singlePart.Flip();
                                }
                                HangarLayer.AddPart(singlePart);
                            }
                        }
                    }
                    break;
                    }
                    DragAndDropObject = null;
                }
            }
            break;

            default:
                break;
            }
        }
        protected override void AddedToScene()
        {
            base.AddedToScene();
            // DEBUG: test out the PopUp
            //PopUp.ShowPopUp(this, "This is a test.");

            var bounds = VisibleBoundsWorldspace;

            // move the part carousel away as the hangar does not start there
            PartCarousel.PositionY         += PartCarousel.ContentSize.Height * 1.5f;
            HangarOptionHangar              = new HangarOptionHangar();
            HangarOptionWorkshop            = new HangarOptionWorkshop();
            HangarOptionScrapyard           = new HangarOptionScrapyard();
            HangarOptionCarousel            = new Carousel(new CCSize(bounds.Size.Width, HangarOptionHangar.BoundingBoxTransformedToWorld.Size.Height));
            HangarOptionCarousel.NodeAnchor = CCPoint.AnchorMiddleTop;
            AddChild(HangarOptionCarousel);
            HangarOptionCarousel.AnchorPoint = CCPoint.AnchorUpperLeft;
            HangarOptionCarousel.Position    = new CCPoint(0, bounds.MaxY);
            HangarOptionCarousel.AddToCollection(HangarOptionHangar);
            HangarOptionCarousel.AddToCollection(HangarOptionWorkshop);
            HangarOptionCarousel.AddToCollection(HangarOptionScrapyard);
            TakeoffCollectionNode = new ScrollableCollectionNode(new CCSize(bounds.Size.Width, bounds.Size.Height / 7));
            float borderToCollection = 15f;

            TakeoffNode.Position    = CCPoint.Zero;
            TakeoffNode.AnchorPoint = CCPoint.AnchorLowerLeft;
            TakeoffNode.AddChild(TakeoffCollectionNode);
            TakeoffCollectionNode.PositionY = borderToCollection;
            TakeoffCollectionNode.Columns   = HangarLayer.UnlockedPlaneSlots; // start off with only one plane slot unlocked
            TakeoffCollectionNode.Rows      = 1;
            TakeoffCollectionNode.BoxSize   = new CCSize(TakeoffCollectionNode.ContentSize.Height, TakeoffCollectionNode.ContentSize.Height);
            AddChild(TakeoffNode, zOrder: 1);
            TakeoffNode.ContentSize = new CCSize(TakeoffCollectionNode.ContentSize.Width, TakeoffCollectionNode.ContentSize.Height + 2 * borderToCollection);
            var drawNode = new CCDrawNode();

            TakeoffNode.AddChild(drawNode, zOrder: -1);
            drawNode.DrawRect(TakeoffNode.BoundingBoxTransformedToWorld, CCColor4B.Black);
            drawNode.DrawLine(new CCPoint(0, TakeoffNode.BoundingBoxTransformedToWorld.UpperRight.Y), TakeoffNode.BoundingBoxTransformedToWorld.UpperRight, 8f, CCColor4B.White);
            drawNode.DrawLine(CCPoint.Zero, new CCPoint(TakeoffNode.BoundingBoxTransformedToWorld.MaxX, 0), 8f, CCColor4B.White);
            TakeoffNode.ContentSize = new CCSize(TakeoffNode.ContentSize.Width, TakeoffNode.ContentSize.Height + 2 * 4f);
            TakeoffNode.PositionY  += 8f;

            TakeoffNode.AddChild(TakeoffCollectionLabel);
            TakeoffCollectionLabel.VerticalAlignment   = CCVerticalTextAlignment.Center;
            TakeoffCollectionLabel.HorizontalAlignment = CCTextAlignment.Center;
            TakeoffCollectionLabel.Color = CCColor3B.White;
            TakeoffCollectionLabel.Scale = 2.5f;
            if (PopUp.TriggeredPlayLayer)
            {
                TakeoffCollectionLabel.Visible = false;
            }
            TakeoffCollectionLabel.AnchorPoint = CCPoint.AnchorMiddle;
            TakeoffCollectionLabel.Position    = (CCPoint)TakeoffNode.ContentSize / 2;

            GOButton = new GOButton();
            AddChild(GOButton); // place the go button a bit higher than the rest (in ZOrder)
            GOButton.Visible  = false;
            GOButton.Position = GOButtonOutPosition;
            // let the hangar listen to the TakeoffCollectionNode
            TakeoffCollectionNode.CollectionRemovalEvent += HangarLayer.ReceiveAircraftFromCollection;
            // let the hangar listen to the Carousel for a change of the middle node
            HangarOptionCarousel.MiddleChangedEvent += HangarLayer.MiddleNodeChanged;
            // listen to the part carousel for a change of the middle node
            PartCarousel.MiddleChangedEvent += (sender, args) =>
            {
                if (HangarLayer.State == HangarLayer.HangarState.MODIFY_AIRCRAFT)
                {
                    HangarLayer.DrawInModifyAircraftState();
                }
            };
            // also listen to each part carousel node's collectionNode
            foreach (var node in PartCarousel.CollectionNode.Children)
            {
                PartCarouselNode pNode = (PartCarouselNode)node;
                pNode.PartCollectionNode.CollectionRemovalEvent += HangarLayer.ReceivePartFromCollection;
            }
        }
 internal void StartGame()
 {
     HangarLayer.StartGame();
 }
Exemple #9
0
 internal NewAircraftButton(HangarLayer hangarLayer) : base("newAircraftButton.png", true)
 {
     HangarLayer  = hangarLayer;
     RadiusFactor = 0.75f;
 }