public Vector2 GetTileMapPosition() { if (pathfindingTileMap == null) { pathfindingTileMap = NodeGetter.GetFirstNodeInGroup <PathfindingTileMap>(GetTree(), GameConstants.PathfindingTileMapGroup, true); } return(pathfindingTileMap.WorldToMap(GetGlobalPosition())); }
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()); }
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; }