//todo need refactor big time private void Update() { if (_isPlayerTurn) { if (!_isTileSelected) { if (MouseHitUi()) { ClearHighlights(); return; } HighlightTileUnderMouse(); } if (Input.GetMouseButtonDown(0)) { if (!_isTileSelected) { //check if ability is selected and if a valid target is clicked then use ability if true if (_isAbilitySelected) { //todo need method for this block - Get <T> from mouse position - entity, tile, floor whatever var mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); var mouseCoord = new Coord((int)mousePosition.x, (int)mousePosition.y); var entity = (Entity)_map.Entities.GetItems(mouseCoord).FirstOrDefault(); if (entity != null && _selectedAbility.TargetValid(entity) && _selectedAbility.TargetInRange(entity)) { _selectedAbility.Use(entity); _selectedAbility = null; _isAbilitySelected = false; ClearHighlights(); GameManager.Instance.SetCursorToNormal(); _eventMediator.Broadcast(GlobalHelper.RefreshCombatUi, this, _combatManager.ActiveEntity); } } else { //todo only allow for tiles within entity movement range //todo need to block when interacting with ui if (MouseHitUi()) { ClearHighlights(); return; } HighlightPathToMouse(); } } else { //check if same tile clicked then move there if true var mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); var mouseCoord = new Coord((int)mousePosition.x, (int)mousePosition.y); if (_map.OutOfBounds(mouseCoord)) { return; } var targetTile = _map.GetTerrain <Floor>(mouseCoord); if (targetTile == null || !targetTile.IsWalkable) { return; } if (ReferenceEquals(_selectedTile, targetTile)) { var activeEntity = _combatManager.ActiveEntity; if (_apMovementCost > activeEntity.Stats.CurrentActionPoints) { return; } activeEntity.MoveTo(targetTile, _apMovementCost, true, _highlightedTiles); _eventMediator.Broadcast(GlobalHelper.RefreshCombatUi, this, activeEntity); } _isTileSelected = false; _eventMediator.Broadcast(GlobalHelper.TileDeselected, this); } } else if (Input.GetMouseButtonDown(1)) { _isTileSelected = false; _isAbilitySelected = false; _eventMediator.Broadcast(GlobalHelper.TileDeselected, this); GameManager.Instance.SetCursorToNormal(); } else if (Input.GetKeyDown(KeyCode.Escape)) { //todo clear if anything selected //todo show menu if nothing selected _isTileSelected = false; _isAbilitySelected = false; _eventMediator.Broadcast(GlobalHelper.TileDeselected, this); GameManager.Instance.SetCursorToNormal(); } } }
public void Build(CombatMap map) { GlobalHelper.DestroyAllChildren(gameObject); GlobalHelper.DestroyAllChildren(EntityHolder.gameObject); for (var currentColumn = 0; currentColumn < map.Width; currentColumn++) { for (var currentRow = 0; currentRow < map.Height; currentRow++) { var coord = new Coord(currentColumn, currentRow); var tile = map.GetTerrain <Tile>(coord); var tileInstance = Instantiate(TerrainSlotPrefab, new Vector2(currentColumn, currentRow), Quaternion.identity); tileInstance.GetComponent <SpriteRenderer>().sprite = tile.Texture; tile.SetSpriteInstance(tileInstance); tileInstance.AddComponent <OnMouseOverTile>(); tileInstance.GetComponent <OnMouseOverTile>().Tile = tile; tileInstance.transform.SetParent(transform); tileInstance.GetComponent <TerrainSlotUi>().SetTile(tile); var entity = map.GetEntity <Entity>(coord); if (entity != null) { var entityInstance = Instantiate(entity.CombatSpritePrefab, new Vector2(currentColumn, currentRow), Quaternion.identity); entityInstance.transform.SetParent(EntityHolder); entity.SetSpriteInstance(entityInstance); if (!entity.IsPlayer()) { entityInstance.AddComponent <AiController>(); entityInstance.GetComponent <AiController>().SetSelf(entity); var spriteRenderer = entityInstance.GetComponent <SpriteRenderer>(); if (spriteRenderer == null) { spriteRenderer = entityInstance.GetComponentInChildren <SpriteRenderer>(); } spriteRenderer.flipX = true; var position = entityInstance.transform.position; position = new Vector3(position.x + 1, position.y, position.z); entityInstance.transform.position = position; var sRenderer = entityInstance.GetComponent <Renderer>(); if (sRenderer == null) { sRenderer = entityInstance.GetComponentInChildren <Renderer>(); } var palette = FindObjectOfType <Palette>(); var mat = sRenderer.material; mat.SetColor("_OutlineColor", palette.BrightRed); mat.SetFloat("_OutlineWidth", 0.0009f); mat.SetFloat("_OutlineAlpha", 1.0f); } entityInstance.AddComponent <EntityAudio>(); var entityAudio = entityInstance.GetComponent <EntityAudio>(); entityAudio.AttackSound = entity.AttackSound; entityAudio.HurtSound = entity.HurtSound; entityAudio.DeathSound = entity.DieSound; var spriteStore = FindObjectOfType <SpriteStore>(); var colorSwapper = entityInstance.GetComponentsInChildren <ColorSwapper>(); spriteStore.SetColorSwaps(colorSwapper, entity); var animationHelper = entityInstance.GetComponent <CombatAnimationHelper>(); if (animationHelper != null) { animationHelper.Parent = entity; } tileInstance.GetComponent <TerrainSlotUi>().SetEntity(entity); } } } }