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); } } }
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); }
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; }
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; } } }
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 }); }