public override void PerformUsage() { if (!endTriggered) { //Debug.Log(Vector3.Distance(liveProjectile.transform.position, finalPos) >= 0.05f); //Debug.Log(!GridManager.instance.IsCellBlockedForProjectiles(GridManager.instance.grid.WorldToCell(liveProjectile.transform.position))); if (Vector3.Distance(liveProjectile.transform.position, finalPos) >= 0.05f) { Vector3Int currentProjectileCell = GridManager.instance.grid.WorldToCell(liveProjectile.transform.position); TileData portalTile = GridManager.instance.GetTileAtCellPoint(currentProjectileCell, EnumData.TileType.Portal); if (portalTile != null) { PortalTracker portal = portalTile.GetComponent <PortalTracker>(); portal.ProjectileUnitEnter(liveProjectile, currentProjectileCell); } if (projectileTypeThrown == EnumData.Projectiles.TidalWave || projectileTypeThrown == EnumData.Projectiles.BubbleShield || projectileTypeThrown == EnumData.Projectiles.FlamePillar || projectileTypeThrown == EnumData.Projectiles.MightyWind || projectileTypeThrown == EnumData.Projectiles.MightyWindMirrorKnight) { if (GridManager.instance.HasTileAtCellPoint(currentProjectileCell, EnumData.TileType.Boulder)) { GridManager.instance.boulderTracker.RemoveBoulder(currentProjectileCell); } liveProjectile.transform.position = Vector3.MoveTowards(liveProjectile.transform.position, finalPos, Time.fixedDeltaTime * liveProjectile.projectileSpeed); if (currentValidPosCell != currentProjectileCell) { previousValidPosCell = currentValidPosCell; currentValidPosCell = currentProjectileCell; } if (GridManager.instance.IsCellBlockedForProjectiles(currentProjectileCell)) { EndOfUse(); return; } } else { if (projectileTypeThrown == EnumData.Projectiles.FireBall || projectileTypeThrown == EnumData.Projectiles.FireBallMirrorKnight) { if (GridManager.instance.IsCellBlockedForProjectiles(GridManager.instance.grid.WorldToCell(liveProjectile.transform.position + GridManager.instance.GetFacingDirectionOffsetVector3(tileMovementDirection)))) { EndOfUse(); return; } } else { if (GridManager.instance.IsCellBlockedForProjectiles(currentProjectileCell)) { EndOfUse(); return; } } liveProjectile.transform.position = Vector3.MoveTowards(liveProjectile.transform.position, finalPos, Time.fixedDeltaTime * liveProjectile.projectileSpeed); if (currentValidPosCell != currentProjectileCell) { previousValidPosCell = currentValidPosCell; currentValidPosCell = currentProjectileCell; } } } else { EndOfUse(); } } }
public override void OnBodyCollidedWithPortalTiles(TileData tileData) { PortalTracker portal = tileData.GetComponent <PortalTracker>(); portal.ActorUnitEnter(this, currentMovePointCellPosition); }