/// <summary>
        /// Notifies users of ifo result
        /// </summary>
        /// <param name="ifo"></param>
        /// <param name="hits"></param>
        public void NotifyIfoResult(Ifo ifo, List <HitResult> hits)
        {
            // while (hits.Count < 4)
            //     hits.Add(HitResult.Unknown);

            RoomInstance.MulticastPacket(new AttackIfoResult(ifo, hits));
        }
        /// <summary>
        /// Spawns an ifo
        /// </summary>
        /// <param name="ifo"></param>
        public void SpawnIfo(Ifo ifo)
        {
            if (_ifos.TryAdd(_nextIfoId, ifo))
            {
                ifo.Id = _nextIfoId;
                _nextIfoId++;

                if (_nextIfoId > 10000)
                {
                    _nextIfoId = 1;
                }
            }
        }
Beispiel #3
0
        public ActionResult <Ifo> AddIfo(Ifo ifo)
        {
            try
            {
                applicationDb.Ifos.Add(ifo);
                applicationDb.SaveChanges();
            }
            catch (Exception e)

            {
                return(BadRequest(e.InnerException.Message));
            }
            return(ifo);
        }
Beispiel #4
0
 public ActionResult <Ifo> PutIfo(long userId, Ifo ifo)
 {
     if (userId != ifo.UserId)
     {
         return(BadRequest("Id cannot be modified!"));
     }
     try
     {
         applicationDb.Entry(ifo).State = EntityState.Modified;
         applicationDb.SaveChanges();
     }
     catch (Exception e)
     {
         string error = e.Message;
         if (e.InnerException != null)
         {
             error = e.InnerException.Message;
         }
         return(BadRequest(error));
     }
     return(NoContent());
 }
 public AttackIfoResult(Ifo ifo, IEnumerable <HitResult> hits)
 {
     _ifo  = ifo;
     _hits = hits;
 }
 public AttackIfo(Unit unit, Weapon weapon, Ifo ifo)
 {
     _unit   = unit;
     _weapon = weapon;
     _ifo    = ifo;
 }
Beispiel #7
0
        /// <summary>
        /// Called when we need to attack
        /// </summary>
        public override void OnAttack()
        {
            // Do attack

            // For SMG we set attacking flag true and add reload time
            if (Stats.WeaponType == WeaponType.machingun)
            {
                _isAttacking   = true;
                _currentReload = Stats.ReloadTime;
            }

            // Apply overheat
            CurrentOverheat += Stats.OverheatPoint;

            // Check for projectile type
            if (_ifoType == IfoType.ifo_none)
            {
                var damage = 0;

                Target.TryGetTarget(out var target);

                // Check for valid target
                if (target != null && target.State == UnitState.InPlay)
                {
                    // Roll hit for each shot
                    for (var i = 0; i < Stats.NumberOfShots; i++)
                    {
                        var hit = _random.NextFloat();
                        damage += hit <= Stats.HitMinimum ? Stats.Damage : 0;
                        $"Rolled {hit} vs {Stats.HitMinimum:F}".Debug(source: ToString());
                    }

                    // TODO: Handle damage drop off

                    // TODO: Handle splash for non ifo lol
                }

                // Handle recoil
                if (Stats.RecoilDistance > 0)
                {
                    // Get their direction
                    var direction = Owner.GetAimDirection(false);

                    // Calculate end pos
                    var endPos = Owner.WorldPosition + direction * (Stats.RecoilDistance * -1);

                    // Move check
                    Owner.WorldPosition = GameInstance.Map.MoveCheck(Owner.WorldPosition, endPos);
                }

                var result = target == null
                    ? HitResult.Miss
                    : new HitResult
                {
                    Damage     = damage,
                    PushBack   = Vector3.Zero,
                    ResultCode = HitResultCode.Hit,
                    VictimId   = target.Id
                };

                // Broadcast
                GameInstance.NotifyUnitAttacked(Owner, result, this);

                // Apply damage
                target?.Attack(this, damage);
            }
            else
            {
                Ifo ifo;

                if (Stats.IfoType == IfoType.ifo_simple)
                {
                    Target.TryGetTarget(out var target);

                    // Fire IFO
                    ifo = new Ifo(this, Stats.IfoStats, GameInstance, target);
                }
                else
                {
                    ifo = new Ifo(this, Stats.IfoStats, GameInstance);
                }

                // Add to main program
                GameInstance.SpawnIfo(ifo);

                // Notify launched
                GameInstance.NotifyIfoLaunched(Owner, this, ifo);
            }
        }
 /// <summary>
 /// Notifies users an ifo was launched
 /// </summary>
 /// <param name="ifo"></param>
 /// <param name="hits"></param>
 public void NotifyIfoLaunched(Unit unit, Weapon weapon, Ifo ifo)
 {
     RoomInstance.MulticastPacket(new AttackIfo(unit, weapon, ifo));
 }
 /// <summary>
 /// Removes an ifo
 /// </summary>
 /// <param name="ifo"></param>
 public void RemoveIfo(Ifo ifo)
 {
     _ifos.TryRemove(ifo.Id, out var trash);
 }