예제 #1
0
        private void PerformBasicPulseGunner(Player performingPlayer)
        {
            var pulseCannonStation = SittingDuck.StandardStationsByLocation[StationLocation.LowerWhite];

            if (CanFireCannon(performingPlayer) && pulseCannonStation.CanFireCannon(performingPlayer) &&
                StationLocation != StationLocation.LowerWhite)
            {
                PerformAAction(performingPlayer, false);
                pulseCannonStation.PerformAAction(performingPlayer, false);
            }
            else if (StationLocation == StationLocation.LowerWhite)
            {
                PerformAAction(performingPlayer, false);
            }
            else
            {
                pulseCannonStation.AlphaComponent.RemoveMechanicBuff();
                if (!CanFireCannon(performingPlayer))
                {
                    PerformAAction(performingPlayer, false);
                }
                else
                {
                    AlphaComponent.RemoveMechanicBuff();
                }
            }
        }
예제 #2
0
        private void PerformBasicSpecialization(Player performingPlayer, int currentTurn)
        {
            switch (performingPlayer.Specialization)
            {
            case PlayerSpecialization.DataAnalyst:
                SittingDuck.StandardStationsByLocation[StationLocation.UpperWhite].PerformCAction(performingPlayer, currentTurn, true);
                performingPlayer.BonusPoints++;
                break;

            case PlayerSpecialization.EnergyTechnician:
                SittingDuck.StandardStationsByLocation[StationLocation.LowerWhite].PerformBAction(performingPlayer, false, true);
                break;

            case PlayerSpecialization.Hypernavigator:
                BasicHypernavigator();
                break;

            case PlayerSpecialization.Mechanic:
                AlphaComponent.AddMechanicBuff();
                break;

            case PlayerSpecialization.Medic:
                PerformBasicMedic(performingPlayer, currentTurn);
                break;

            case PlayerSpecialization.PulseGunner:
                PerformBasicPulseGunner(performingPlayer);
                break;

            case PlayerSpecialization.Rocketeer:
                SittingDuck.StandardStationsByLocation[StationLocation.LowerBlue].PerformCAction(performingPlayer, currentTurn, true);
                break;

            case PlayerSpecialization.SpecialOps:
                var actionToMakeHeroic = performingPlayer.Actions.Skip(currentTurn).FirstOrDefault(action => action.CanBeMadeHeroic());
                actionToMakeHeroic?.MakeHeroic();
                break;

            case PlayerSpecialization.SquadLeader:
                PerformBasicSquadLeader(performingPlayer);
                break;

            case PlayerSpecialization.Teleporter:
                var playerToTeleport    = SittingDuck.PlayersOnShip.SingleOrDefault(playerOnShip => playerOnShip.PlayerToTeleport);
                var teleportDestination = SittingDuck.PlayersOnShip.SingleOrDefault(playerOnShip => playerOnShip.TeleportDestination);
                if (playerToTeleport != null && teleportDestination != null)
                {
                    playerToTeleport.CurrentStation = teleportDestination.CurrentStation;
                }
                break;

            default:
                throw new InvalidOperationException("Missing specialization when attempting basic specialization.");
            }
        }
예제 #3
0
        private void PerformAAction(Player performingPlayer, bool isHeroic, bool isAdvanced = false)
        {
            var firstAThreat = GetFirstThreatOfType(PlayerActionType.Alpha, performingPlayer);

            if (firstAThreat != null)
            {
                DamageThreat(isHeroic ? 2 : 1, firstAThreat, performingPlayer, isHeroic);
            }
            else if (!HasIrreparableMalfunctionOfType(PlayerActionType.Alpha))
            {
                AlphaComponent.PerformAAction(isHeroic, performingPlayer, isAdvanced);
            }
            AlphaComponent.RemoveMechanicBuff();
        }
예제 #4
0
    public void Execute()
    {
        float deltaTime = _time.GetSingleEntity().time.deltaTime;

        foreach (Entity e in _group.GetEntities())
        {
            AlphaComponent alpha = e.alpha;
            alpha.time -= deltaTime;
            GameObjectComponent gameobject = e.gameObject;

            SpriteRenderer renderer = gameobject.gameObject.GetComponent <SpriteRenderer>();
            Color          color    = renderer.color;
            renderer.color = new Color(color.r, color.g, color.b, alpha.time / alpha.totalTime);
        }
    }
예제 #5
0
        private static Component CreateAlpha(GameObject gameObject, IAssetLoader assetLoader, AlphaComponent alphaComponent)
        {
            var canvasGroup = gameObject.AddComponent <CanvasGroup>();

            if (alphaComponent.Alpha != null)
            {
                canvasGroup.alpha = alphaComponent.Alpha.Value;
            }

            return(canvasGroup);
        }
예제 #6
0
        private bool CanFireCannon(Player performingPlayer)
        {
            var firstAThreat = GetFirstThreatOfType(PlayerActionType.Alpha, performingPlayer);

            return(firstAThreat == null && !HasIrreparableMalfunctionOfType(PlayerActionType.Alpha) && AlphaComponent.CanFire());
        }
예제 #7
0
 public virtual void PerformEndOfTurn()
 {
     AlphaComponent.PerformEndOfTurn();
 }
예제 #8
0
 public void SetOpticsDisrupted(bool opticsDisrupted)
 {
     AlphaComponent.SetOpticsDisrupted(opticsDisrupted);
 }