Esempio n. 1
0
    public void GrenadeOnCollisionEnter(GrenadeComponent grenadeComponent, Collision collision)
    {
        var grenadeState = grenadeComponent.State;

        if (grenadeState.IsActive)
        {
            if (OsFps.Instance.IsServer)
            {
                grenadeState.TimeUntilDetonation = GetGrenadeDefinitionByType(grenadeState.Type).TimeAfterHitUntilDetonation;
            }

            if (grenadeComponent.State.Type == GrenadeType.Fragmentation)
            {
                if (OsFps.Instance.IsClient)
                {
                    var audioSource = grenadeComponent.GetComponent <AudioSource>();
                    AudioSource.PlayClipAtPoint(OsFps.Instance.FragGrenadeBounceSound, grenadeComponent.transform.position);
                }
            }
            else if (grenadeComponent.State.Type == GrenadeType.Sticky)
            {
                var contactPoint = collision.contacts[0].point;
                StickStickyGrenadeToObject(grenadeComponent, collision.gameObject, contactPoint);
            }
        }
    }
Esempio n. 2
0
 public void StickStickyGrenadeToObject(GrenadeComponent grenadeComponent, GameObject hitObject, Vector3 contactPoint)
 {
     grenadeComponent.transform.position    = contactPoint;
     grenadeComponent.Rigidbody.isKinematic = true;
     grenadeComponent.Collider.isTrigger    = true;
     grenadeComponent.transform.SetParent(hitObject.transform);
 }
Esempio n. 3
0
    public void GrenadeOnCollisionStay(GrenadeComponent grenadeComponent, Collision collision)
    {
        var otherGameObject = collision.gameObject;
        var playerObject    = otherGameObject.FindObjectOrAncestorWithTag(OsFps.PlayerTag);

        if (playerObject != null)
        {
            PlayerObjectSystem.Instance.OnPlayerCollidingWithGrenade(playerObject, grenadeComponent.gameObject);
        }
    }
 /// <summary>
 /// Equip grenades and set grenade to current active grenade, refresh grenade counter
 /// </summary>
 /// <param name="ids">Grenades' ID</param>
 /// <param name="t">Strat Position</param>
 public void AddGrenades(List <int> ids, Transform startPos, Transform throwPos, Player player)
 {
     foreach (int id in ids)
     {
         GrenadeComponent component = new GrenadeComponent();
         component.m_Behavior = m_GrenadeFactory.CreateGrenade(id);
         component.Count      = component.m_Behavior.grenadeInfo.MaxCount;
         m_dGrenades.Add(id, component);
     }
     CurrentID  = GrenadeKeys[0];
     m_StarPos  = startPos;
     m_ThrowPos = throwPos;
     m_Player   = player;
 }
Esempio n. 5
0
    public void GrenadeOnDestroy(GrenadeComponent grenadeComponent)
    {
        if (grenadeComponent.State.GrenadeSpawnerId.HasValue)
        {
            var grenadeSpawnerComponent = GrenadeSpawnerSystem.Instance.FindGrenadeSpawnerComponent(
                grenadeComponent.State.GrenadeSpawnerId.Value
                );

            if (grenadeSpawnerComponent != null)
            {
                grenadeSpawnerComponent.State.TimeUntilNextSpawn = GetGrenadeDefinitionByType(
                    grenadeSpawnerComponent.State.Type
                    ).SpawnInterval;
            }
        }
    }
Esempio n. 6
0
    private void ServerDetonateGrenade(Server server, GrenadeComponent grenadeComponent)
    {
        var grenade           = grenadeComponent.State;
        var grenadeDefinition = GetGrenadeDefinitionByType(grenade.Type);
        var grenadePosition   = (float3)grenadeComponent.transform.position;

        // apply damage & forces to players within range
        WeaponSystem.Instance.ApplyExplosionDamageAndForces(
            server, grenadePosition, grenadeDefinition.ExplosionRadius, OsFps.GrenadeExplosionForce,
            grenadeDefinition.Damage, grenade.ThrowerPlayerId
            );

        // destroy grenade object
        Object.Destroy(grenadeComponent.gameObject);

        // send message
        server.ServerPeer.CallRpcOnAllClients("ClientOnDetonateGrenade", server.ServerPeer.reliableChannelId, new
        {
            id       = grenade.Id,
            position = grenadePosition,
            type     = grenade.Type
        });
    }