public static void HandleCollisionEnter(Hittable collidingHittable, GameObject otherCollidingObject)
    {
        if (otherCollidingObject.gameObject.TryGetComponent <PlayerLife>(out _))
        {
            return;
        }

        Airship collidingAirship      = collidingHittable.gameObject.GetComponentInParent <Airship>();
        Airship otherCollidingAirship = otherCollidingObject.gameObject.GetComponentInParent <Airship>();

        if (collidingAirship && otherCollidingAirship && collidingAirship == otherCollidingAirship)
        {
            return;                                                                                         // Airship, don´t hit yourself
        }
        Vector3 relativeVelocity = Vector3.zero;
        int     damage           = 0;

        if (collidingAirship && otherCollidingAirship)
        {
            relativeVelocity = collidingAirship.Velocity - otherCollidingAirship.Velocity;
            damage           = Mathf.FloorToInt(Vector3.Magnitude(relativeVelocity));
        }
        else
        {
            //relativeVelocity = collidingAirship.Velocity;
            damage = collidingHittable.MaxHealth * 2;
        }

        collidingHittable.GetDamage(damage);
    }
Пример #2
0
 public void Break(Airship referenceShip)
 {
     airship.BreakFollowing(referenceShip);
     airship.ForceModifyer = -1f;
     StopAllCoroutines();
     StartCoroutine(CheckSpeed());
     StartCoroutine(BalanceSpeed(referenceShip));
 }
Пример #3
0
    public void Start()
    {
        Debug.Log("Started player");
        playerController = GetComponent <PlayerController>();
        airship          = GameObject.FindGameObjectWithTag("Airship").GetComponent <Airship>();
        anim             = GetComponent <Animator>();

        transform.SetParent(GameObject.FindGameObjectWithTag("Airship").transform);
    }
Пример #4
0
    private void SpawnNewEnemy(int enemy, Lane lane)
    {
        GameObject newEnemy         = Instantiate(enemyModels[enemy], GetPosition(lane), Quaternion.identity, enemyList.transform);
        Airship    newEnemyRenderer = newEnemy.GetComponent <Airship>();

        lane.SetAirship(newEnemyRenderer);
        enemyList.AddEnemy(newEnemyRenderer);
        newEnemyRenderer.SetManagingObjects(metalManager, enemyList);
    }
Пример #5
0
 private void EditAirship(Airship airship)
 {
     airship.Name          = GetName();
     airship.Purpose       = GetPorp();
     airship.NumScrews     = GetNumScrews();
     airship.Weight        = GetWeight();
     airship.MaxHeight     = GetMaxHeight();
     airship.TakeoffWeight = GetTakeoffWeight();
     airship.Shell         = GetShell();
 }
Пример #6
0
 public void BreakFollowing(Airship newCollidingAirship)
 {
     if (newCollidingAirship == this)
     {
         return;
     }
     foreach (CollisionAvoider collisionAvoider in collisionAvoiders)
     {
         collisionAvoider.Break(newCollidingAirship);
     }
 }
Пример #7
0
 public void SetAirship(Airship airship)
 {
     receivedAirship = airship;
     SetName(airship.Name);
     SetPorp(airship.Purpose);
     SetNumScrews(airship.NumScrews);
     SetWeight(airship.Weight);
     SetMaxHeight(airship.MaxHeight);
     SetTakeoffWeight(airship.TakeoffWeight);
     SetShell(airship.Shell);
 }
Пример #8
0
    public IEnumerator ChangeTarget(Airship oldTarget)
    {
        yield return(new WaitForSeconds(changeTargetIfHiddenTime));

        if (turret.Target == oldTarget && turret.TargetHidden) // controll that turrent did not change the target and target is still hidden
        {
            List <Airship> enemies = enemyList.GetEnemies().GetRange(0, enemyList.GetEnemies().Count);
            enemies.Remove(oldTarget);
            turret.TargetHidden = false;
            SearchNearestTarget(enemies.ToArray());
        }
    }
Пример #9
0
    private void OnTriggerEnter(Collider other) //colliding ship is set only on enter and never removed, new ones just override
    {
        Airship newCollidingAirship = other.gameObject.GetComponentInParent <Airship>();

        if (newCollidingAirship != null) //if colliding object is a Airship
        {
            //set as new colliding and change speed
            collidingAirship = newCollidingAirship;
            collidingAirship.AddCollisionAvoider(this);
            Break(collidingAirship);
        }
    }
Пример #10
0
 public void StartGame()
 {
     spawner.ResetWaves();
     startScreen.SetActive(false);
     gamingScreen.SetActive(true);
     gameOver.SetActive(false);
     Time.timeScale = 1f;
     pointController.ResetPoints();
     currentAirShip = ((GameObject)Instantiate(airshipPrefab, new Vector2(0, 0), Quaternion.identity)).GetComponent <Airship>();
     currentPlayer  = ((GameObject)Instantiate(playerPrefab, currentAirShip.GetPlayerStartLocation(), Quaternion.identity)).GetComponent <Player>();
     gameState      = GameState.Gaming;
     spawner.NextWave();
 }
Пример #11
0
        private async Task SendWebPushNotificationAsync(string userId, string notificationType, string notificationId, ITenant tenant, WebPushTemplate webPushTemplate)
        {
            if (webPushTemplate is null)
            {
                throw new Exception($"There is no WebPushTemplate defined for tenant: {tenant.Id} and notification type: {notificationType}");
            }

            // UserId will be a combination of tenantId and userId of that business.
            string airshipUserId = $"{tenant.Id}:{userId}";

            // Fetch the shared airship config url from the tenant
            tenant.Properties.TryGet(Constants.TenantPropertyNames.AirshipKeyVaultUrl, out string airshipKeyVaultUrl);
            if (string.IsNullOrEmpty(airshipKeyVaultUrl))
            {
                throw new Exception($"There is no SharedAirshipConfig defined for tenant: {tenant.Id} and notification type: {notificationType}");
            }

            string?airshipSecretsString = await KeyVaultHelper.GetDeliveryChannelSecretAsync(this.configuration, airshipKeyVaultUrl).ConfigureAwait(false);

            if (string.IsNullOrEmpty(airshipSecretsString))
            {
                throw new Exception("There is no airship delivery channel configuration setup in the keyvault");
            }

            // Convert secret to airship secret model
            Airship airshipSecrets = JsonConvert.DeserializeObject <Airship>(airshipSecretsString);

            var airshipDeliveryChannelObject = new AirshipDeliveryChannel(
                webPushTemplate.Title !,
                webPushTemplate.Body !,
                webPushTemplate.ActionUrl !);

            try
            {
                AirshipWebPushResponse?airshipResponse = await this.SendAirshipNotificationAsync(
                    airshipUserId,
                    airshipDeliveryChannelObject,
                    airshipSecrets).ConfigureAwait(false);

                await this.UpdateNotificationDeliveryStatusAsync(
                    airshipDeliveryChannelObject.ContentType,
                    notificationId,
                    airshipResponse is null?UserNotificationDeliveryStatus.Unknown : UserNotificationDeliveryStatus.NotTracked,
                    tenant).ConfigureAwait(false);
            }
            catch (Exception ex)
            {
                await this.UpdateNotificationDeliveryStatusAsync(airshipDeliveryChannelObject.ContentType, notificationId, UserNotificationDeliveryStatus.PermanentlyFailed, tenant, ex.Message).ConfigureAwait(false);
            }
        }
Пример #12
0
 IEnumerator BalanceSpeed(Airship referenceShip)
 {
     while (!speedBalanced)
     {
         if (referenceShip.Velocity.z <= airship.Velocity.z)
         {
             speedBalanced = true;
         }
         else
         {
             yield return(new WaitForSeconds(0.2f));
         }
     }
 }
Пример #13
0
 private void ButSave_Click(object sender, EventArgs e)
 {
     if (receivedAirship == null)
     {
         Airship airship = new Airship();
         airship.TypeName = TypeNames.airship;
         EditAirship(airship);
         FMain.AddVehicle(airship);
     }
     else
     {
         EditAirship(receivedAirship);
     }
     Close();
 }
Пример #14
0
    // Pauses the player and all enemies (does not modify timeScale)
    public void ActionPause(bool paused)
    {
        actionPaused = paused;

        // Necessary for message dialogue
        pauseDimmer.targetAlpha = paused ? 0.5f : 0;

        RefreshAllActionButtons();

        PlayerMover.instance.enabled = !paused;

        List <GameObject> enemyList = ObjectContainer.GetEnemiesAndWounded();

        foreach (GameObject unit in enemyList)
        {
            AutoMover autoMover = unit.GetComponent <AutoMover>();
            if (autoMover != null)
            {
                autoMover.enabled = !paused;
            }

            HideMover hideMover = unit.GetComponent <HideMover>();
            if (hideMover != null)
            {
                hideMover.enabled = !paused;
            }

            Airship airship = unit.GetComponent <Airship>();
            if (airship != null)
            {
                airship.enabled = !paused;
            }
        }

        List <GameObject> projectiles = ObjectContainer.GetAllProjectiles();

        foreach (GameObject projectile in projectiles)
        {
            Projectile proj = projectile.GetComponent <Projectile>();
            if (proj != null)
            {
                proj.enabled = !paused;
            }
        }
    }
Пример #15
0
 IEnumerator CheckIfShipLeft() //checks every sec if spwaned ship is far enough away to spawn a new one
 {
     while (true)
     {
         if (HasAirship)
         {
             if (transform.position.z - newAirship.transform.position.z > minDistance)
             {
                 newAirship = null;
                 yield return(new WaitUntil(() => HasAirship == true));
             }
             else
             {
                 yield return(new WaitForSeconds(1));
             }
         }
         else
         {
             yield return(new WaitUntil(() => HasAirship == true));
         }
     }
 }
Пример #16
0
    void SearchNearestTarget(Airship[] enemies)
    {
        float   shortestDistance = turret.Range;
        Airship nearestEnemy     = null;

        foreach (Airship enemy in enemies)
        {
            float distanceToEnemy = Vector3.Distance(turret.TurretAimCenter, enemy.transform.position);
            if (distanceToEnemy <= turret.Range && distanceToEnemy < shortestDistance && turret.TurretAimCenter.y <= enemy.transform.position.y)
            {
                shortestDistance = distanceToEnemy;
                nearestEnemy     = enemy;
            }
        }
        if (nearestEnemy != null)
        {
            turret.Target = nearestEnemy;
        }
        else
        {
            turret.Target = null;
        }
    }
Пример #17
0
 public void SetAirship(Airship airship)
 {
     newAirship = airship;
 }
Пример #18
0
 public void AddEnemy(Airship enemie)
 {
     enemies.Add(enemie);
 }
Пример #19
0
 public void RemoveEnemy(Airship enemie)
 {
     enemies.Remove(enemie);
 }
Пример #20
0
 void Start()
 {
     airship = GetComponentInParent <Airship>(); // get attached airship
 }
Пример #21
0
    protected Airship airship          = null; //airship this is attached to

    protected override void Start()
    {
        base.Start();
        airship = GetComponentInParent <Airship>(); //get attached airship
        airship.AddMass(partMass);
    }
Пример #22
0
        /// <summary>
        /// Send a web push airship notification.
        /// </summary>
        /// <param name="airshipUserId">Targetted Airship User.</param>
        /// <param name="airshipDeliveryChannel">The <see cref="AirshipDeliveryChannel"/>.</param>
        /// <param name="airshipSecrets">The <see cref="Airship"/>.</param>
        private async Task <AirshipWebPushResponse?> SendAirshipNotificationAsync(string airshipUserId, AirshipDeliveryChannel airshipDeliveryChannel, Airship airshipSecrets)
        {
            if (airshipDeliveryChannel is null)
            {
                throw new Exception();
            }

            AirshipClient?airshipClient = this.airshipClientFactory.GetAirshipClient(airshipSecrets.ApplicationKey !, airshipSecrets.MasterSecret !);

            var newNotification = new Notification()
            {
                Alert = airshipDeliveryChannel.Title,
                Web   = new WebAlert()
                {
                    Alert = airshipDeliveryChannel.Body,
                    Title = airshipDeliveryChannel.Title,
                },
                Actions = new Actions()
                {
                    Open = new OpenUrlAction {
                        Type = "url", Content = airshipDeliveryChannel.ActionUrl
                    },
                },
            };

            return(await airshipClient.SendWebPushNotification(airshipUserId, newNotification).ConfigureAwait(false));
        }
Пример #23
0
 private void Start()
 {
     newAirship = null;
     StartCoroutine(CheckIfShipLeft());
 }