public override void OnSceneGUI() { base.OnSceneGUI(); if (!m_tilemap && !m_tileset) { return; } Vector2 center = Vector2.zero; if ((ePositionType)m_action.positionType.Value == ePositionType.LocalPosition) { center = m_action.position.Value; } else// if ((ePositionType)positionType.Value == ePositionType.GridPosition) { if (m_tilemap) { center = TilemapUtils.GetTileCenterPosition(m_tilemap, (int)m_action.position.Value.x, (int)m_action.position.Value.y); } else if (m_tileset) { center = TilemapUtils.GetGridWorldPos((int)m_action.position.Value.x, (int)m_action.position.Value.y, m_tileset.TilePxSize / m_tileset.PixelsPerUnit); } } EditorCompatibilityUtils.CircleCap(0, center, Quaternion.identity, m_action.radius.Value); }
private RoombaStationBehaviour FindNextRoombaStation() { RoombaStationBehaviour choosenStation = null; var lowestDist = float.MaxValue; TilemapUtils.IterateTilemapWithAction(_doodadsForegroundTilemap, (tilemap, gx, gy, data) => { var tile = tilemap.GetTile(gx, gy); if (tile?.paramContainer == null) { return; } if (!tile.paramContainer.GetBoolParam("IsRoombaStation")) { return; } var roombaStation = tilemap.GetTileObject(gx, gy).GetComponent <RoombaStationBehaviour>(); if (!roombaStation.CanRoombaDockHere(this)) { return; } var gridWorldPos = TilemapUtils.GetGridWorldPos( _doodadsForegroundTilemap, gx, gy); var transformPosition = transform.position.magnitude - gridWorldPos.magnitude; if (transformPosition < lowestDist) { System.Console.WriteLine("gridWorldPos " + gridWorldPos); System.Console.WriteLine("roombaStation " + roombaStation.transform); choosenStation = roombaStation; lowestDist = transformPosition; } }); return(choosenStation); }
public override void OnEnter() { if (!m_tilemap) { var go = Fsm.GetOwnerDefaultTarget(gameObject); if (UpdateCache(go)) { m_tilemap = cachedComponent as STETilemap; gridX.Value = m_tilemap.MinGridX - 1; //NOTE: OnEnter will add 1 the first time gridY.Value = m_tilemap.MinGridY; storePosition.Value = (ePositionType)positionType.Value == ePositionType.LocalPosition ? (Vector2)TilemapUtils.GetGridWorldPos(m_tilemap, gridX.Value, gridY.Value) : new Vector2(gridX.Value, gridY.Value); } } if (gridX.Value < m_tilemap.MaxGridX) { ++gridX.Value; } else if (gridY.Value < m_tilemap.MaxGridY) { ++gridY.Value; gridX.Value = m_tilemap.MinGridX; } else { Finish(); return; } storePosition.Value = (ePositionType)positionType.Value == ePositionType.LocalPosition? (Vector2)TilemapUtils.GetGridWorldPos(m_tilemap, gridX.Value, gridY.Value) : new Vector2(gridX.Value, gridY.Value); Fsm.Event(iterationNextElement); }
private void HandleSearchDirt() { if (!navMeshAgent2D.hasPath && _currentCapacity > 0) { // Find the nearest dirt tile _waitingTicks = 60; var choosenPosition = Vector2.positiveInfinity; var lowestDist = float.MaxValue; TilemapUtils.IterateTilemapWithAction(_doodadsBackgroundTilemap, (tilemap, gx, gy, data) => { if (IsDirtTile(data)) { var gridWorldPos = TilemapUtils.GetGridWorldPos( _doodadsBackgroundTilemap, gx, gy); var transformPosition = Vector2.Distance(transform.position, gridWorldPos); if (transformPosition < lowestDist) { lowestDist = transformPosition; choosenPosition = new Vector2(gx, gy); } } }); if (Math.Abs(lowestDist - float.MaxValue) > 0.01) { var gridWorldPos = TilemapUtils.GetGridWorldPos( _doodadsBackgroundTilemap, (int)choosenPosition.x, (int)choosenPosition.y); // add 0.25f to y so the roomba is on top of dirt tiles navMeshAgent2D.destination = gridWorldPos + new Vector3(0, 0.25f, 0); } } }