Example #1
0
    protected override void OnUpdate()
    {
        Entities.WithNone <SendRpcCommandRequestComponent>().ForEach((Entity reqEnt, ref PowerupSlotChangedRequest req, ref ReceiveRpcCommandRequestComponent reqSrc) =>
        {
            PostUpdateCommands.DestroyEntity(reqEnt);

            var previousSlotContent = slots[req.SlotNumber];

            slots[req.SlotNumber] = req.SlotContent;

            PowerupSlotChangedRequest.PowerupSlotData slotData = null;

            switch (req.SlotContent)
            {
            case PowerupSlotContent.Laser:
                UnsafeUtility.CopyPtrToStructure(req.SlotData, out PowerupSlotChangedRequest.LaserPowerupSlotData laserPowerupSlotData);
                slotData = laserPowerupSlotData;
                break;
            }

            if (req.SlotData != null)
            {
                UnsafeUtility.Free(req.SlotData, Unity.Collections.Allocator.Persistent);
            }

            OnPowerupSlotChanged?.Invoke(req.SlotNumber, req.SlotContent, slotData);

            if (req.SlotContent == PowerupSlotContent.Missile)
            {
                OnMissilePowerupAcquired?.Invoke();
            }
            else if (previousSlotContent == PowerupSlotContent.Missile)
            {
                bool hasMissilePowerups = false;
                foreach (var slot in slots)
                {
                    if (slot == PowerupSlotContent.Missile)
                    {
                        hasMissilePowerups = true;
                        break;
                    }
                }

                if (!hasMissilePowerups)
                {
                    OnAllMissilePowerupsUsed?.Invoke();
                }
            }
        });
    }
Example #2
0
    public void OnPowerupSlotChanged(uint slotNumber, PowerupSlotContent slotContent, PowerupSlotChangedRequest.PowerupSlotData slotData)
    {
        PowerupSlot slot = slots[slotNumber];

        switch (slotContent)
        {
        case PowerupSlotContent.Empty:
            slot.SetScale(0);
            break;

        case PowerupSlotContent.Laser:
            slot.SetSprite(SerializedFields.singleton.laserPowerupSprite);
            slot.SetColor(SerializedFields.singleton.laserPowerupColor);

            PowerupSlotChangedRequest.LaserPowerupSlotData laserPowerupSlotData = (PowerupSlotChangedRequest.LaserPowerupSlotData)slotData;
            slot.SetScale(laserPowerupSlotData.RemainingShots * 1.0f / SerializedFields.singleton.laserPowerupShots);
            break;

        case PowerupSlotContent.Boost:
            slot.SetSprite(SerializedFields.singleton.boostPowerupSprite);
            slot.SetColor(SerializedFields.singleton.boostPowerupColor);
            slot.SetScale(1);
            break;

        case PowerupSlotContent.Shield:
            slot.SetSprite(SerializedFields.singleton.shieldPowerupSprite);
            slot.SetColor(SerializedFields.singleton.shieldPowerupColor);
            slot.SetScale(1);
            break;

        case PowerupSlotContent.Repair:
            slot.SetSprite(SerializedFields.singleton.repairPowerupSprite);
            slot.SetColor(SerializedFields.singleton.repairPowerupColor);
            slot.SetScale(1);
            break;

        case PowerupSlotContent.Missile:
            slot.SetSprite(SerializedFields.singleton.missilePowerupSprite);
            slot.SetColor(missileTargetClientSystem.MissileTargetPlayerId.HasValue ? SerializedFields.singleton.missilePowerupColor : SerializedFields.singleton.inactivePowerupColor);
            slot.SetScale(1);
            break;
        }
    }