public Vector2 GetTileMapPosition()
        {
            if (pathfindingTileMap == null)
            {
                pathfindingTileMap = NodeGetter.GetFirstNodeInGroup <PathfindingTileMap>(GetTree(), GameConstants.PathfindingTileMapGroup, true);
            }

            return(pathfindingTileMap.WorldToMap(GetGlobalPosition()));
        }
Esempio n. 2
0
 public override void _Process(float delta)
 {
     ZIndex = (int)pathfindingTileMap.WorldToMap(GetGlobalPosition()).y * 2 + 1;
 }
 public List <TileMapObject> GetOverlappingTileMapObjects()
 {
     return(tileMapManipulator.GetOverlappingTiles(pathfindingTileMap.WorldToMap(GetGlobalPosition())).Select(vector2 => pathfindingTileMap.tileMapManipulator.GetTileMapObjectWithTileMapCoordinates(vector2)).ToList());
 }
Esempio n. 4
0
        public TreeTileMapObject FindNearestTree(bool canPlayerBeInReach = false)
        {
            var treeTileMapObjectWithoutPlayerInActionRadius =
                tileMapManipulator.GetTileMapObjectsOfType <TreeTileMapObject>().Where(treeTileMapObject => (!treeTileMapObject.EntityInActionRadius(player) || canPlayerBeInReach) && !treeTileMapObject.IsInfested()).ToList();

            treeTileMapObjectWithoutPlayerInActionRadius.Sort((treeObject1, treeObject2) =>
                                                              treeObject1.GetTileMapPosition().DistanceTo(pathfindingTileMap.WorldToMap(GetGlobalPosition())).CompareTo(treeObject2.GetTileMapPosition().DistanceTo(pathfindingTileMap.WorldToMap(GetGlobalPosition()))));

            return(treeTileMapObjectWithoutPlayerInActionRadius.Count > 0 ? treeTileMapObjectWithoutPlayerInActionRadius[0] : null);
        }
        private void TargetReached() {
            if (GetNode<Eventing>(Eventing.EventingNodePath).IsConnected(nameof(Eventing.InvalidateDemonPath), this, nameof(OnPathInvalidated))) {
                GetNode<Eventing>(Eventing.EventingNodePath).Disconnect(nameof(Eventing.InvalidateDemonPath), this, nameof(OnPathInvalidated));
            }

            var tileMapObject = pathfindingTileMap.tileMapManipulator.GetTileMapObjectWithTileMapCoordinates(pathfindingTileMap.WorldToMap(targetPosition));
            if (tileMapObject is TreeTileMapObject treeTileMapObject) {
                //TODO: show animation
                gameState.UseDemonEnergy(GameValues.infestTreeEnergyUsage);
                treeTileMapObject.Infest();
                gameState.AddDemonPoints(GameValues.infestTreePoints);
                GetNode<Eventing>(Eventing.EventingNodePath).EmitSignal(nameof(Eventing.TreeInfested), treeTileMapObject);
                soundEngineNode.PlaySfx(infestTreeSound, this, "SfxB");
            }

            GetStateMachine<DemonStateMachine>().TransitionTo(GetStateMachine<DemonStateMachine>().idle);
        }
        public void SetTree(Vector2 treeWorldPosition)
        {
            var tileMapPosition = pathfindingTileMap.WorldToMap(treeWorldPosition);
            var uniqueCellId    = pathfindingTileMap.GetIdForTile(tileMapPosition);

            pathfindingTileMap.SetCell((int)tileMapPosition.x, (int)tileMapPosition.y, pathfindingTileMap.treeId);

            if (tileMapObjects.TryGetValue(uniqueCellId, out var objectNodeReference))
            {
//                objectNodeReference.parents.Clear();
                objectNodeReference.node?.QueueFree();

                if (tileIdToPackedSceneMapping.TryGetValue(pathfindingTileMap.treeId, out var treePackedScene))
                {
                    objectNodeReference.node = treePackedScene.Instance() as Node2D;
                    tileMapObjectContainer.AddChild(objectNodeReference.node);
                    if (objectNodeReference.node != null)
                    {
                        objectNodeReference.node.ZIndex = (int)tileMapPosition.y * 2;
                        objectNodeReference.node?.SetGlobalPosition(pathfindingTileMap.MapToWorld(tileMapPosition) + pathfindingTileMap.CellSize / 2);
                    }
                }
                else
                {
                    throw new Exception("PackedScene cannot be null!");
                }

                var overlappingTiles = GetOverlappingTiles(tileMapPosition);

                foreach (var overlappingTile in overlappingTiles)
                {
                    var uniqueTileId = pathfindingTileMap.GetIdForTile(overlappingTile);

                    if (tileMapObjects.TryGetValue(uniqueTileId, out var tileMapObjectNodeReference))
                    {
                        if (pathfindingTileMap.GetCell((int)overlappingTile.x, (int)overlappingTile.y) == pathfindingTileMap.traversableId)
                        {
                            tileMapObjectNodeReference.node?.QueueFree();
                            pathfindingTileMap.SetCell((int)overlappingTile.x, (int)overlappingTile.y, pathfindingTileMap.playerTraversableId);

                            if (tileIdToPackedSceneMapping.TryGetValue(pathfindingTileMap.playerTraversableId, out var packedScene))
                            {
                                tileMapObjectNodeReference.node = packedScene.Instance() as Node2D;
                                tileMapObjectContainer.AddChild(tileMapObjectNodeReference.node);
                                if (objectNodeReference.node != null)
                                {
                                    objectNodeReference.node.ZIndex = (int)tileMapPosition.y * 2;
                                    tileMapObjectNodeReference.node?.SetGlobalPosition(pathfindingTileMap.MapToWorld(overlappingTile) + pathfindingTileMap.CellSize / 2);
                                }
                            }
                            else
                            {
                                throw new Exception("PackedScene cannot be null!");
                            }
                        }

                        tileMapObjectNodeReference.parents.Add(uniqueCellId);
                    }
                    else
                    {
                        throw new Exception("Expected already setup tileMapObjectNodeReference!");
                    }
                }
            }
            else
            {
                throw new Exception("Expected already setup tileMapObjectNodeReference!");
            }

            pathfindingTileMap.UpdateAStarGrid();
        }
 public override void _Process(float delta)
 {
     Visible = pathfindingTileMap.WorldToMap(GetGlobalMousePosition()) == pathfindingTileMap.WorldToMap(GetGlobalPosition()) && collidingActionRadiusColliderList.Count > 0;
 }