Пример #1
0
        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();
                }
            }
        }
Пример #2
0
        public override void OnBodyCollidedWithPortalTiles(TileData tileData)
        {
            PortalTracker portal = tileData.GetComponent <PortalTracker>();

            portal.ActorUnitEnter(this, currentMovePointCellPosition);
        }