示例#1
0
    public void ServerOnPlayerCollidingWithGrenade(GameObject playerObject, GameObject grenadeObject)
    {
        var playerObjectComponent = playerObject.GetComponent <PlayerObjectComponent>();
        var playerState           = playerObjectComponent.State;

        if (!playerState.IsAlive)
        {
            return;
        }

        var grenadeComponent = grenadeObject.GetComponent <GrenadeComponent>();
        var grenadeState     = grenadeComponent.State;

        if (grenadeState.IsActive)
        {
            return;
        }

        // Try to find a grenade slot with a matching grenade type.
        var grenadeSlot = playerState.GrenadeSlots.FirstOrDefault(gs =>
                                                                  (gs != null) &&
                                                                  (gs.GrenadeType == grenadeState.Type)
                                                                  );

        // Try to find a grenade slot with a different type but 0 grenades.
        if (grenadeSlot == null)
        {
            grenadeSlot = playerState.GrenadeSlots.FirstOrDefault(gs =>
                                                                  (gs != null) &&
                                                                  (gs.GrenadeCount == 0)
                                                                  );
            grenadeSlot.GrenadeType = grenadeState.Type;
        }

        // Try to find a null grenade slot.
        if (grenadeSlot == null)
        {
            var nullSlotIndex = System.Array.FindIndex(playerState.GrenadeSlots, gs => gs == null);
            if (nullSlotIndex >= 0)
            {
                grenadeSlot = new GrenadeSlot
                {
                    GrenadeType  = grenadeState.Type,
                    GrenadeCount = 0
                };
                playerState.GrenadeSlots[nullSlotIndex] = grenadeSlot;
            }
        }

        if ((grenadeSlot == null) || (grenadeSlot.GrenadeCount >= OsFps.MaxGrenadesPerType))
        {
            return;
        }

        grenadeSlot.GrenadeCount++;
        Object.Destroy(grenadeObject);
    }
示例#2
0
    private void DrawGrenadeSlotHud(GrenadeSlot grenadeSlot, Vector2 position, Vector2 iconSize)
    {
        var grenadeDefinition = GrenadeSystem.Instance.GetGrenadeDefinitionByType(grenadeSlot.GrenadeType);

        GUI.DrawTexture(new Rect(position, iconSize), grenadeDefinition.Icon);
        GUI.Label(
            new Rect(position + new Vector2(0, iconSize.y), new Vector2(260, 50)),
            grenadeSlot.GrenadeCount + " / " + OsFps.MaxGrenadesPerType
            );
    }