public void update() { if (!AnimationHandler.IsAnimationRunning()) { entity.setPosition(Input.mousePosition); CardUi topCard = null; BoardAreaUi clickedBoardArea = null; float topLayerDepth = LowestLayerDepth; IEnumerable <Collider> neighbors = Physics.boxcastBroadphaseExcludingSelf(this, collidesWithLayers); if (!Dragging && Input.leftMouseButtonPressed) { foreach (var neighbor in neighbors) { CollisionResult collisionResult = new CollisionResult(); if (neighbor.isTrigger) { continue; } if (collidesWith(neighbor, out collisionResult)) { Entity collidedEntity = collisionResult.collider.entity; if (collidedEntity is CardUi) { float currentLayerDepth; currentLayerDepth = collisionResult.collider.entity.getComponent <Sprite>().layerDepth; if (currentLayerDepth < topLayerDepth) { topCard = (CardUi)collidedEntity; topLayerDepth = currentLayerDepth; } } else if (collidedEntity is BoardAreaUi) { clickedBoardArea = (BoardAreaUi)collidedEntity; } } } if (topCard != null) { DraggedCard = topCard; DragOffsetPosition = DraggedCard.position - Input.mousePosition; DraggedCard.getComponent <Sprite>().renderLayer = PickedUpRenderLayer; Dragging = true; } else if (clickedBoardArea != null) { //TODO: remove Console.WriteLine(clickedBoardArea.GetType()); } } else if (Dragging && Input.leftMouseButtonDown) { //TODO: check zone colliding with //collidesWithAny(out collisionResult); DraggedCard.position = Input.mousePosition + DragOffsetPosition; } else if (Dragging && !Input.leftMouseButtonDown) { DraggedCard.getComponent <Sprite>().renderLayer = DefaultRenderLayer; Dragging = false; } } }
private void InitializeGameComponentsUi(Hero[] myHeroes, Hero[] opponentHeroes, Card[] myCards) { NezSpriteFont font = new NezSpriteFont(InGameScene.content.Load <SpriteFont>("Arial")); BoardAreaUi[] sideBarEntities = new BoardAreaUi[30]; int localPlayerWorkerCount = localPlayerFirst ? GameConstants.StartingWorkerCountFirstPlayer : GameConstants.StartingWorkerCountSecondPlayer; int opponentWorkerCount = localPlayerFirst ? GameConstants.StartingWorkerCountSecondPlayer : GameConstants.StartingWorkerCountFirstPlayer; for (int x = 0; x < sideBarEntities.Length; x += sideBarEntities.Length / 2) { HandUi handUi = new HandUi(); Texture2D handTexture = InGameScene.content.Load <Texture2D>(handTextureName); handUi.addComponent(new Sprite(handTexture)); handUi.getComponent <Sprite>().renderLayer = BoardRenderLayer; InGameScene.addEntity(handUi); InPlayUi inPlayUi = new InPlayUi(); handUi.getComponent <Sprite>().renderLayer = BoardRenderLayer; InGameScene.addEntity(inPlayUi); bool isOpponent = x < 15; Hero[] currentHeroes = isOpponent ? opponentHeroes : myHeroes; sideBarEntities[0 + x] = new HeroButton(font, null, currentHeroes[0]); if (GameMode == GameMode.ThreeHero) { sideBarEntities[1 + x] = new HeroButton(font, null, currentHeroes[1]); sideBarEntities[2 + x] = new HeroButton(font, null, currentHeroes[2]); } sideBarEntities[3 + x] = new BaseButton(font); sideBarEntities[4 + x] = new AddOnButton(font); sideBarEntities[5 + x] = new SpecUi(font); sideBarEntities[6 + x] = new TechBuildingButton(font, TechLevel.One); sideBarEntities[7 + x] = new TechBuildingButton(font, TechLevel.Two); sideBarEntities[8 + x] = new TechBuildingButton(font, TechLevel.Three); sideBarEntities[9 + x] = new ZoneButton(font, Discard.DiscardString, 0); sideBarEntities[10 + x] = new ZoneButton(font, Deck.DeckString, GameConstants.StartingDeckSize); sideBarEntities[11 + x] = new ZoneButton(font, Hand.HandString, GameConstants.StartingHandSize); sideBarEntities[12 + x] = new GoldUi(font); int currentWorkerCount = isOpponent ? opponentWorkerCount : localPlayerWorkerCount; sideBarEntities[13 + x] = new WorkerCountUi(font, currentWorkerCount); SideBarButton CodexButton = new SideBarButton(font); CodexButton.DisplayName.text = Codex.CodexString; sideBarEntities[14 + x] = new BoardAreaUi(); } int numberOfColumns = 3; for (int x = 0; x < sideBarEntities.Length; x += numberOfColumns) { int verticalPosition = x / numberOfColumns * ScreenHeight / sideBarEntities.Length / numberOfColumns; for (int y = 0; y < numberOfColumns; y++) { sideBarEntities[x + y]?.setPosition(new Vector2( y * SideBarButton.SideBarWidth / numberOfColumns, verticalPosition )); } } }