Exemple #1
0
        public async void return_two_lights()
        {
            var lightsManager = new LightsManager(_client);
            await lightsManager.RetrieveLights();

            Check.That(lightsManager.Lights.ToList().Count).IsEqualTo(2);
        }
Exemple #2
0
 private void Start()
 {
     soundsManager   = GameObject.Find("SoundsManager").GetComponent <SoundsManager>();
     lightsManager   = GameObject.Find("LightsManager").GetComponent <LightsManager>();
     _ballManager    = FindObjectOfType <BallManager>();
     _missionManager = FindObjectOfType <MissionManager>();
 }
 /// <summary>
 /// Main application entry point.
 /// </summary>
 private static void Main()
 {
     LightsManager lightsManager = null;
     try
     {
         LightsDeviceController lightsDeviceController = new LightsDeviceController(Config.GetUsbProductId(), Config.GetUsbVendorId(), Config.GetUsbUsage(), Config.GetUsbUsagePage(), Config.GetWaitForDeviceRetryPeriod(), Config.GetUsbControlTransferType());
         lightsManager = new LightsManager(lightsDeviceController, Config.GetLightsManagerPort(), Config.GetNotificationManagerHost(), Config.GetNotificationManagerPort(), Config.GetRegistrationRetryPeriod(), Config.GetUsbProtocolType());
         Thread thread = new Thread(lightsManager.Start);
         thread.Start();
         Console.WriteLine("Press any key to terminate...");
         Console.ReadKey(true);
         lightsManager.Stop();
         thread.Join();
         Console.WriteLine("Press any key to close...");
         Console.ReadKey(true);
     }
     catch (Exception e)
     {
         Console.Error.WriteLine(e);
         Console.ReadKey(true);
     }
     finally
     {
         if (lightsManager != null)
         {
             lightsManager.Dispose();
         }
     }
 }
    private static void CalculateIncorrectPropIDs(List <BaseGameLight> lights, LightsManager manager)
    {
        Dictionary <int, List <BaseGameLight> > pregrouped = new Dictionary <int, List <BaseGameLight> >();

        foreach (BaseGameLight light in lights)
        {
            int z = Mathf.RoundToInt((light.WorldLocation.z * manager.GroupingMultiplier) + manager.GroupingOffset);
            if (pregrouped.TryGetValue(z, out List <BaseGameLight> list))
            {
                list.Add(light);
            }
            else
            {
                list = new List <BaseGameLight>();
                list.Add(light);
                pregrouped.Add(z, list);
            }
        }
        //We gotta squeeze the distance between Z positions into a nice 0-1-2-... array
        int i = 0;

        foreach (var group in pregrouped.Values)
        {
            if (group is null)
            {
                continue;
            }
            foreach (var light in group)
            {
                light.IncorrectPropID = i;
            }
            i++;
        }
    }
Exemple #5
0
    void OnPreRender()
    {
        LightsManager LM = GetComponent <LightsManager>();

        deffered_material.SetVectorArray("_LightsPositions", LM.lightsPositions());
        deffered_material.SetVectorArray("_LightsColors", LM.lightsColors());
    }
 // Use this for initialization
 void Start()
 {
     lightsManager  = FindObjectOfType <LightsManager>();
     particleSystem = GetComponent <ParticleSystem>();
     meshRenderer   = GetComponent <MeshRenderer>();
     if (particleSystem == null && meshRenderer == null)
     {
         Debug.Log("no renderer is present on the object");
     }
     if (particleSystem)
     {
         Material[] mats = particleSystem.GetComponent <Renderer>().materials;
         foreach (Material m in mats)
         {
             obstacleMat = m;
             //Debug.Log("material: " + obstacleMat.name);
             break;
         }
     }
     if (meshRenderer)
     {
         Material[] mats = meshRenderer.materials;
         foreach (Material m in mats)
         {
             obstacleMat = m;
             //Debug.Log("material: " + obstacleMat.name);
             break;
         }
     }
 }
Exemple #7
0
        public async Task Reset_Vuelve_Todos_Los_Valores_A_Cero()
        {
            // Arrange

            var lights = new List <Light> {
                new Light {
                    Pin   = 1,
                    Value = 250
                },
                new Light {
                    Pin   = 3,
                    Value = 120
                }
            };
            var lightsManager = new LightsManager(lights);

            // Act
            lightsManager.Reset();



            // Assert
            Assert.Equals(lightsManager.GetLightByPin(1).Value, 0);
            Assert.Equals(lightsManager.GetLightByPin(3).Value, 0);
        }
 // Use this for initialization
 void Start()
 {
     lightsManager  = FindObjectOfType <LightsManager>();
     spriteRenderer = GetComponent <SpriteRenderer>();
     meshRenderer   = GetComponent <MeshRenderer>();
     if (spriteRenderer == null && meshRenderer == null)
     {
         Debug.Log("no renderer is present on the object");
     }
     if (spriteRenderer)
     {
         Material[] mats = spriteRenderer.sharedMaterials;
         foreach (Material m in mats)
         {
             obstacleMat = m;
             //Debug.Log("material: " + obstacleMat.name);
             break;
         }
     }
     if (meshRenderer)
     {
         Material[] mats = meshRenderer.materials;
         foreach (Material m in mats)
         {
             obstacleMat = m;
             //Debug.Log("material: " + obstacleMat.name);
             break;
         }
     }
 }
        public void Click_method_thorws_exception()
        {
            var lightsGrid = TestHelper.Get5x5LightsGrid(LightStateType.Off);

            var mng = new LightsManager(null, null);

            var result = mng.Click(lightsGrid, 5, 5);
        }
    // Use this for initialization
    void Awake()
    {
        lr  = gameObject.AddComponent <LineRenderer>();
        alr = gameObject.AddComponent <AnimatedLineRenderer>();
        lm  = FindObjectOfType <LightsManager>();

        StartCoroutine(setAlr());
    }
Exemple #11
0
 public void Start()
 {
     _missionManager = GameObject.Find("MissionManager").GetComponent <MissionManager>();
     lightsManager   = GameObject.Find("LightsManager").GetComponent <LightsManager>();
     soundsManager   = GameObject.Find("SoundsManager").GetComponent <SoundsManager>();
     rampLights1     = lightsManager.rampLights1;
     rampLights2     = lightsManager.rampLights2;
 }
Exemple #12
0
        public async void return_true_on_stop_all_light()
        {
            var lightsManager = new LightsManager(_client);
            await lightsManager.RetrieveLights();

            var result = await lightsManager.StopAllLights();

            Check.That(result).IsEqualTo(StateLight.Off);
        }
Exemple #13
0
        public async void return_true_on_start_one_light()
        {
            var lightsManager = new LightsManager(_client);
            await lightsManager.RetrieveLights();

            var lights = lightsManager.Lights;
            var result = await lightsManager.StartLight(lights.First());

            Check.That(result).IsEqualTo(StateLight.On);
        }
Exemple #14
0
        public async void return_true_on_set_color_one_light()
        {
            var lightsManager = new LightsManager(_client);
            await lightsManager.RetrieveLights();

            var lights = lightsManager.Lights;
            var result = await lightsManager.SetColorOnLight(lights.First(), "#FF00AA");

            Check.That(result).IsEqualTo(StateLight.On);
        }
Exemple #15
0
        public async void return_on_or_state_on_one_light()
        {
            var lightsManager = new LightsManager(_client);
            await lightsManager.RetrieveLights();

            var lights = lightsManager.Lights;
            await lightsManager.StartLight(lights.First());

            var state = await lightsManager.GetStateOfLight(lights.First());

            Check.That(state).IsEqualTo(StateLight.On);
        }
Exemple #16
0
    void PlatformLoaded(PlatformDescriptor descriptor)
    {
        for (int i = 0; i < 16; i++)
        {
            int        modified    = BeatmapEventContainer.EventTypeToModifiedType(i);
            GameObject instantiate = Instantiate(LayerInstantiate, LayerInstantiate.transform.parent);
            instantiate.transform.localPosition = new Vector3(modified, 0, 0);
            try
            {
                switch (i)
                {
                case 8:
                    instantiate.GetComponentInChildren <TextMeshProUGUI>().text = "Ring Rotation";
                    instantiate.GetComponentInChildren <TextMeshProUGUI>().font = UtilityAsset;
                    break;

                case 9:
                    instantiate.GetComponentInChildren <TextMeshProUGUI>().text = "Small Ring Zoom";
                    instantiate.GetComponentInChildren <TextMeshProUGUI>().font = UtilityAsset;
                    break;

                case 12:
                    instantiate.GetComponentInChildren <TextMeshProUGUI>().text = "Left Laser Speed";
                    instantiate.GetComponentInChildren <TextMeshProUGUI>().font = UtilityAsset;
                    break;

                case 13:
                    instantiate.GetComponentInChildren <TextMeshProUGUI>().text = "Right Laser Speed";
                    instantiate.GetComponentInChildren <TextMeshProUGUI>().font = UtilityAsset;
                    break;

                case 14:
                    instantiate.GetComponentInChildren <TextMeshProUGUI>().text = "Rotation (Include Current Time)";
                    instantiate.GetComponentInChildren <TextMeshProUGUI>().font = UtilityAsset;
                    break;

                case 15:
                    instantiate.GetComponentInChildren <TextMeshProUGUI>().text = "Rotation (Exclude Current Time)";
                    instantiate.GetComponentInChildren <TextMeshProUGUI>().font = UtilityAsset;
                    break;

                default:
                    LightsManager e = descriptor.LightingManagers[i];
                    instantiate.GetComponentInChildren <TextMeshProUGUI>().text = e?.gameObject.name;
                    instantiate.GetComponentInChildren <TextMeshProUGUI>().font = AvailableAsset;
                    break;
                }
            }
            catch { }
        }
        LayerInstantiate.SetActive(false);
    }
        public LightsDialog(LightsManager lightsManager)
        {
            InitializeComponent();

            this.lightsManager        = lightsManager;
            this.initialLobbyColor    = lightsManager.DefaultColor;
            this.initialImpostorColor = lightsManager.ImpostorColor;
            this.initialCrewmateColor = lightsManager.CrewmateColor;

            lobbyColorPanel.BackColor    = lightsManager.DefaultColor;
            impostorColorPanel.BackColor = lightsManager.ImpostorColor;
            crewmateColorPanel.BackColor = lightsManager.CrewmateColor;
        }
Exemple #18
0
    void Awake()
    {
        if (!mInstance)
        {
            mInstance = this;
        }

        Events.ChangeGameState += ChangeGameState;

        parkManager         = GetComponent <ParkManager>();
        runSignalsManager   = GetComponent <RunSignalsManager>();
        lightsManager       = GetComponent <LightsManager>();
        avatarRunningMoment = GetComponent <AvatarRunningMoment>();
    }
Exemple #19
0
    // Use this for initialization
    void Start()
    {
        lightsInScene   = new List <GameObject>();
        lightsInContact = new List <GameObject>();

        levelManager = FindObjectOfType <LightsManager>();

        for (int i = 0; i < particleSystems.Length; i++)
        {
            particleSystems[i].gameObject.SetActive(false);
        }

        //ColorAchievedEvent += TestDetector;
    }
Exemple #20
0
    private IEnumerator GradientRoutine(MapEvent gradientEvent, LightsManager group)
    {
        MapEvent.ChromaGradient gradient   = gradientEvent._lightGradient;
        Func <float, float>     easingFunc = Easing.byName[gradient.EasingType];
        float progress = 0;

        while (progress < 1)
        {
            progress = (atsc.CurrentBeat - gradientEvent._time) / gradientEvent._lightGradient.Duration;
            ChromaCustomColors[group] = Color.Lerp(gradient.StartColor, gradient.EndColor, easingFunc(progress));
            group.ChangeColor(ChromaCustomColors[group], 0, group.ControllingLights);
            yield return(new WaitForEndOfFrame());
        }
        ChromaCustomColors[group] = gradient.EndColor;
    }
        public void Test_Click_method()
        {
            var lightsGrid = TestHelper.Get5x5LightsGrid(LightStateType.Off);
            var x          = 4;
            var y          = 4;

            var lightsHelper         = new Mock <ILightsHelper>();
            var lightsGridAfterClick = It.IsAny <LightsGrid>();

            lightsHelper.Setup(h => h.Click(lightsGrid, x, y)).Returns(lightsGridAfterClick);

            var mng = new LightsManager(null, lightsHelper.Object);

            var result = mng.Click(lightsGrid, x, y);

            Assert.AreSame(result, lightsGridAfterClick);
        }
        public async Task <bool> Run(string sentinelName, string packageName, string homeControllerUrl, int homeControllerPort, bool useSsl,
                                     object parameter)
        {
            base.Run(sentinelName, packageName);

            SetParameters(parameter, out var hueKey, out var hueServerIp, out _hoursOff, out _restartHourOff);
            _lightsManager = new LightsManager(new LocalClient(hueServerIp, hueKey));

            _statesValuesHost = new StatesValuesHost(this, HomeConnectionServer.CreateConnection(homeControllerUrl, homeControllerPort, useSsl));

            SetTimeToSendValue(parameter);

            if (_hoursOff.Any())
            {
                SetTimeToHoursOff();
            }

            await FirstRetrieveData();

            return(true);
        }
Exemple #23
0
    private IEnumerator GradientRoutine(MapEvent gradientEvent, LightsManager group)
    {
        MapEvent.ChromaGradient gradient   = gradientEvent._lightGradient;
        Func <float, float>     easingFunc = Easing.byName[gradient.EasingType];
        float progress = 0;

        while ((progress = (atsc.CurrentBeat - gradientEvent._time) / gradient.Duration) < 1)
        {
            Color lerped = Color.LerpUnclamped(gradient.StartColor, gradient.EndColor, easingFunc(progress));
            if (!SoloAnEventType || gradientEvent._type == SoloEventType)
            {
                ChromaCustomColors[group] = lerped;
                group.ChangeColor(lerped.WithAlpha(1), 0, group.ControllingLights);
                group.ChangeMultiplierAlpha(lerped.a, group.ControllingLights);
            }
            yield return(new WaitForEndOfFrame());
        }
        ChromaCustomColors[group] = gradient.EndColor;
        group.ChangeColor(ChromaCustomColors[group].WithAlpha(1), 0, group.ControllingLights);
        group.ChangeMultiplierAlpha(ChromaCustomColors[group].a, group.ControllingLights);
    }
    private void SetRendererMaterials(Renderer renderer, LightsManager lightsManager = null, float width = 1f)
    {
        Material[] materials = renderer.sharedMaterials;

        if (materials.Length >= 1 && materials[0] != null)
        {
            if (materials[0] != null && (width >= 0.5f))
            {
                Array.Resize <Material>(ref materials, materials.Length + 1);
            }

            Material lastMaterial = lightMaterial;
            for (var i = 0; i < materials.Length; i++)
            {
                Material tempMaterial = materials[i];
                if ((tempMaterial?.shader?.name?.Equals("Unlit/Color") ?? false) && !(tempMaterial.color.r == 1 && tempMaterial.color.g == 1 && tempMaterial.color.b == 1))
                {
                    tempMaterial = useThisBlack;
                }
                materials[i] = lastMaterial;
                lastMaterial = tempMaterial;
            }
        }
        else
        {
            materials    = new Material[1];
            materials[0] = lightMaterial;
        }

        renderer.sharedMaterials = materials;

        if (lightsManager != null)
        {
            LightingEvent le = renderer.gameObject.AddComponent <LightingEvent>();
            le.LightMaterial = lightMaterial;
            lightsManager.ControllingLights.Add(le);
        }
    }
        public void Test_InitLightsGridInSolvableState_method()
        {
            var dimension = 5;

            var populator   = new Mock <ILightsPopulator>();
            var lightsGrid1 = It.IsAny <LightsGrid>();

            populator.Setup(p => p.InitLightsGrid(dimension)).Returns(lightsGrid1);
            var lightsGrid2 = It.IsAny <LightsGrid>();

            populator.Setup(p => p.ResetAllLights(lightsGrid1)).Returns(lightsGrid2);
            var lightsGrid3 = It.IsAny <LightsGrid>();

            populator.Setup(p => p.PopulateSolvableState(lightsGrid2)).Returns(lightsGrid3);

            var mng = new LightsManager(populator.Object, null);

            var result = mng.InitLightsGridInSolvableState(dimension);

            populator.Verify(p => p.InitLightsGrid(dimension), Times.Once);
            populator.Verify(p => p.ResetAllLights(lightsGrid1), Times.Once);
            populator.Verify(p => p.PopulateSolvableState(lightsGrid2), Times.Once);
            Assert.AreSame(result, lightsGrid3);
        }
Exemple #26
0
        /**
         * If the component requires other custom components then do it here.
         * Read the comment on Components.MantaSeializationFixer if you wish to understand why this horrible system exists.
         */
        public static void SetUpManta(GameObject submarine)
        {
            MantaSubmarine     mantaSubmarine     = submarine.GetComponent <MantaSubmarine>();
            Transform          applyForceLocation = submarine.FindChild("PointsOfInterest").FindChild("ForceAppliedLocation").transform;
            MovementController movementController = submarine.GetOrAddComponent <MovementController>();

            movementController.ApplyForceLocation = applyForceLocation;

            GameObject doorLeft = submarine.FindChild("PointsOfInterest").FindChild("PlayerEntranceLeftFlap");

            doorLeft.GetComponentInChildren <HingeJoint>().connectedBody = submarine.GetComponent <Rigidbody>();
            HingeJointDoor hingeDoorLeft = doorLeft.GetOrAddComponent <HingeJointDoor>();

            hingeDoorLeft.OverwriteTargetVelocity = true;
            hingeDoorLeft.TargetVelocity          = 150f;
            hingeDoorLeft.TriggerToEverything     = false;
            hingeDoorLeft.TriggerToPlayer         = true;
            hingeDoorLeft.TriggerToVehicles       = false;
            hingeDoorLeft.OpenSound  = CyclopsDefaultAssets.PLAYER_HATCH_OPEN;
            hingeDoorLeft.CloseSound = CyclopsDefaultAssets.PLAYER_HATCH_CLOSE;

            GameObject doorRight = submarine.FindChild("PointsOfInterest").FindChild("PlayerEntranceRightFlap");

            doorRight.GetComponentInChildren <HingeJoint>().connectedBody = submarine.GetComponent <Rigidbody>();
            HingeJointDoor hingeDoorRight = doorRight.GetOrAddComponent <HingeJointDoor>();

            hingeDoorRight.OverwriteTargetVelocity = true;
            hingeDoorRight.TargetVelocity          = 150f;
            hingeDoorRight.TriggerToEverything     = false;
            hingeDoorRight.TriggerToPlayer         = true;
            hingeDoorRight.TriggerToVehicles       = false;
            hingeDoorRight.OpenSound  = CyclopsDefaultAssets.PLAYER_HATCH_OPEN;
            hingeDoorRight.CloseSound = CyclopsDefaultAssets.PLAYER_HATCH_CLOSE;

            GameObject vehicleDoorLeft = submarine.FindChild("PointsOfInterest").FindChild("VehicleEntranceLeftFlap");

            vehicleDoorLeft.GetComponentInChildren <HingeJoint>().connectedBody = submarine.GetComponent <Rigidbody>();
            HingeJointDoor hingeVehicleDoorLeft = vehicleDoorLeft.GetOrAddComponent <HingeJointDoor>();

            hingeVehicleDoorLeft.OverwriteTargetVelocity = true;
            hingeVehicleDoorLeft.TargetVelocity          = 150f;
            hingeVehicleDoorLeft.TriggerToEverything     = false;
            hingeVehicleDoorLeft.TriggerToPlayer         = false;
            hingeVehicleDoorLeft.TriggerToVehicles       = true;
            hingeVehicleDoorLeft.OpenSound  = CyclopsDefaultAssets.DOCKING_DOORS_OPEN;
            hingeVehicleDoorLeft.CloseSound = CyclopsDefaultAssets.DOCKING_DOORS_CLOSE;

            GameObject vehicleDoorRight = submarine.FindChild("PointsOfInterest").FindChild("VehicleEntranceRightFlap");

            vehicleDoorRight.GetComponentInChildren <HingeJoint>().connectedBody = submarine.GetComponent <Rigidbody>();
            HingeJointDoor hingeVehicleDoorRight = vehicleDoorRight.GetOrAddComponent <HingeJointDoor>();

            hingeVehicleDoorRight.OverwriteTargetVelocity = true;
            hingeVehicleDoorRight.TargetVelocity          = 150f;
            hingeVehicleDoorRight.TriggerToEverything     = false;
            hingeVehicleDoorRight.TriggerToPlayer         = false;
            hingeVehicleDoorRight.TriggerToVehicles       = true;
            hingeVehicleDoorRight.OpenSound  = CyclopsDefaultAssets.DOCKING_DOORS_OPEN;
            hingeVehicleDoorRight.CloseSound = CyclopsDefaultAssets.DOCKING_DOORS_CLOSE;

            GameObject    entrancePosition      = submarine.FindChild("PointsOfInterest").FindChild("EntranceTeleportSpot");
            GameObject    entranceHatch         = submarine.FindChild("PointsOfInterest").FindChild("PlayerEntrance").FindChild("Base");
            EntranceHatch entranceHatchTeleport = entranceHatch.GetOrAddComponent <EntranceHatch>();

            entranceHatchTeleport.HoverText         = "Board Manta";
            entranceHatchTeleport.HoverHandReticle  = HandReticle.IconType.Hand;
            entranceHatchTeleport.TeleportTarget    = entrancePosition;
            entranceHatchTeleport.Submarine         = mantaSubmarine;
            entranceHatchTeleport.EnteringSubmarine = true;

            GameObject    leavePosition      = submarine.FindChild("PointsOfInterest").FindChild("LeaveTeleportSpot");
            GameObject    leaveHatch         = submarine.FindChild("PointsOfInterest").FindChild("PlayerEntrance").FindChild("Top");
            EntranceHatch leaveHatchTeleport = leaveHatch.GetOrAddComponent <EntranceHatch>();

            leaveHatchTeleport.HoverText         = "Disembark Manta";
            leaveHatchTeleport.HoverHandReticle  = HandReticle.IconType.Hand;
            leaveHatchTeleport.TeleportTarget    = leavePosition;
            leaveHatchTeleport.Submarine         = mantaSubmarine;
            leaveHatchTeleport.EnteringSubmarine = false;

            GameObject      steeringConsolePOI             = submarine.FindChild("PointsOfInterest").FindChild("SteeringConsole");
            GameObject      steeringConsoleLeftHandTarget  = submarine.FindChild("PointsOfInterest").FindChild("SteeringConsole").FindChild("LeftIKTarget");
            GameObject      steeringConsoleRightHandTarget = submarine.FindChild("PointsOfInterest").FindChild("SteeringConsole").FindChild("RightIKTarget");
            GameObject      playerParentWhilePiloting      = submarine.FindChild("PointsOfInterest").FindChild("SteeringConsole").FindChild("PlayerLockedWhileSteeringPosition");
            SteeringConsole steeringConsole = steeringConsolePOI.GetOrAddComponent <SteeringConsole>();

            steeringConsole.MovementController    = submarine.GetComponent <MovementController>();
            steeringConsole.ParentWhilePilotingGO = playerParentWhilePiloting;
            steeringConsole.LeftHandIKTarget      = steeringConsoleLeftHandTarget;
            steeringConsole.RightHandIKTarget     = steeringConsoleRightHandTarget;
            steeringConsole.Submarine             = mantaSubmarine;

            CyclopsCollisionSounds collisionSounds = submarine.GetOrAddComponent <CyclopsCollisionSounds>();

            MovementData normalSpeedMovementData = new MovementData
            {
                ForwardAccelerationSpeed   = 5f,
                BackwardsAccelerationSpeed = 3f,
                AscendDescendSpeed         = 3f,
                RotationSpeed = 0.3f,
                StrafeSpeed   = 2f
            };

            EngineManager engineManager = submarine.GetOrAddComponent <EngineManager>();

            engineManager.SetMovementDataForEngineState(EngineState.SLOW, normalSpeedMovementData);
            engineManager.SetMovementDataForEngineState(EngineState.NORMAL, normalSpeedMovementData);
            engineManager.SetMovementDataForEngineState(EngineState.FAST, normalSpeedMovementData);
            engineManager.SetMovementDataForEngineState(EngineState.SPECIAL, normalSpeedMovementData);

            CyclopsStartupPowerDownSequence   cyclopsStartupPowerDownSequence   = submarine.GetOrAddComponent <CyclopsStartupPowerDownSequence>();
            CyclopsEngineStateChangedCallouts cyclopsEngineStateChangedCallouts = submarine.GetOrAddComponent <CyclopsEngineStateChangedCallouts>();

            movementController.EngineManager = engineManager;
            CyclopsWelcomeCallout cyclopsWelcomeCallout = submarine.GetOrAddComponent <CyclopsWelcomeCallout>();
            CyclopsEngineSound    cyclopsEngineSound    = submarine.GetOrAddComponent <CyclopsEngineSound>();

            cyclopsEngineSound.RampUpSpeed   = 0.2f;
            cyclopsEngineSound.RampDownSpeed = 0.2f;
            movementController.EngineSound   = cyclopsEngineSound;

            OxygenReplenishment oxygenReplenishment = submarine.GetOrAddComponent <OxygenReplenishment>();

            oxygenReplenishment.OxygenPerSecond  = 15f;
            oxygenReplenishment.OxygenEnergyCost = 0.1f;

            LiveMixin liveMixin = submarine.GetOrAddComponent <LiveMixin>();

            liveMixin.data           = CyclopsLiveMixinData.Get(); // TO:DO Create a proper health system for the manta.
            liveMixin.data.knifeable = true;                       // TO:DO remove just here for testing purposes.
            liveMixin.data.maxHealth = 500;

            GameObject externalLights = submarine.FindChild("Lights").FindChild("Exterior");
            GameObject internalLights = submarine.FindChild("Lights").FindChild("Interior");

            LightsManager lightsManager      = submarine.GetOrAddComponent <LightsManager>();
            List <Light>  internalLightsList = new List <Light>();
            List <Light>  externalLightsList = new List <Light>();

            foreach (Light light in externalLights.GetComponentsInChildren <Light>())
            {
                externalLightsList.Add(light);
            }
            foreach (Light light in internalLights.GetComponentsInChildren <Light>())
            {
                internalLightsList.Add(light);
            }
            lightsManager.ExternalLights              = externalLightsList;
            lightsManager.InternalLights              = internalLightsList;
            lightsManager.ExternalLightsOnIntensity   = 1.5f;
            lightsManager.ExternalLightsOffIntensity  = 0f;
            lightsManager.InternalLightsOnIntensity   = 1.5f;
            lightsManager.InternalLightsOffIntensity  = 0f;
            lightsManager.EnableInternalLightsOnStart = true;
            lightsManager.EnableExternalLightsOnStart = true;

            CyclopsUnderAttackEmergencyLighting emergencyLighting = submarine.GetOrAddComponent <CyclopsUnderAttackEmergencyLighting>();

            emergencyLighting.LightsAffected = internalLightsList;

            submarine.GetOrAddComponent <CyclopsUnderAttackCallout>();

            ExternalDamageManager externalDamageManager = submarine.GetOrAddComponent <ExternalDamageManager>();

            externalDamageManager.DamagePoints       = submarine.FindChild("PointsOfInterest").FindChild("DamagePoints").transform;
            externalDamageManager.SubmarineLiveMixin = liveMixin;
            externalDamageManager.LiveMixinDataForExternalDamagePoints = CyclopsExternalDamagePointLiveMixinData.Get();
            externalDamageManager.DamagePointParticleEffects           = new List <GameObject>()
            {
                CyclopsDefaultAssets.EXTERNAL_DAMAGE_POINT_PARTICLES,
            };
            externalDamageManager.DamagePointGameObjects = new List <GameObject>()
            {
                CyclopsDefaultAssets.EXTERNAL_DAMAGE_POINT,
            };

            InternalFireManager internalFireManager = submarine.GetOrAddComponent <InternalFireManager>();

            internalFireManager.SubmarineLiveMixin = liveMixin;
            internalFireManager.FirePoints         = submarine.FindChild("PointsOfInterest").FindChild("FirePoints").transform;
            internalFireManager.FirePrefabs        = new List <GameObject>()
            {
                CyclopsDefaultAssets.CYCLOPS_FIRE,
            };
            internalFireManager.DamageDonePerFirePerSecond = 5f;
            internalFireManager.Submarine = mantaSubmarine;
            internalFireManager.ChancePerDamageTakenToSpawnFire = 5;

            AutoRegenConditional autoRegen = submarine.GetOrAddComponent <AutoRegenConditional>();

            autoRegen.InternalFireManager   = internalFireManager;
            autoRegen.ExternalDamageManager = externalDamageManager;
            autoRegen.LiveMixin             = liveMixin;
            autoRegen.RegenPerSecond        = 2f;

            InternalLeakManager internalLeakManage = submarine.GetOrAddComponent <InternalLeakManager>();

            internalLeakManage.LeakPrefabs = new List <GameObject>()
            {
                CyclopsDefaultAssets.WATER_LEAK
            };

            DeathManager deathManager = submarine.GetOrAddComponent <DeathManager>();

            deathManager.DeathPreparationTime = 22f;

            BasicDeath basicDeath = submarine.GetOrAddComponent <BasicDeath>();

            basicDeath.TimeTillDeletionOfSub = 60f;
            basicDeath.FallSpeed             = 2f;

            CyclopsDeathExplosion cyclopsDeathExplosion = submarine.GetOrAddComponent <CyclopsDeathExplosion>();

            cyclopsDeathExplosion.TimeToExplosionAfterDeath = 18f;
            cyclopsDeathExplosion.FMODAsset = CyclopsDefaultAssets.CYCLOPS_EXPLOSION_FMOD;

            CyclopsAbandonShip cyclopsAbandonShip = submarine.GetOrAddComponent <CyclopsAbandonShip>();

            cyclopsAbandonShip.TimeToCalloutAfterDeath = 0f;
            cyclopsAbandonShip.FMODAsset = CyclopsDefaultAssets.AI_ABANDON;

            DestabiliseOnSubDeath      destabiliseOnSubDeath      = submarine.GetOrAddComponent <DestabiliseOnSubDeath>();
            KillPlayerInsideOnSubDeath killPlayerInsideOnSubDeath = submarine.GetOrAddComponent <KillPlayerInsideOnSubDeath>();

            // Temp screens
            GameObject helmMantaOSScreen            = submarine.FindChild("PointsOfInterest").FindChild("UpgradesAndBatteries").FindChild("HelmScreen").FindChild("Canvas");
            GameObject rearMantaOSScreen            = submarine.FindChild("PointsOfInterest").FindChild("UpgradesAndBatteries").FindChild("UpgradeScreen").FindChild("Canvas");
            GameObject steeringConsoleMantaOSScreen = submarine.FindChild("PointsOfInterest").FindChild("SteeringConsole").FindChild("Canvas");

            Object.Instantiate(MantaAssetLoader.MANTA_OS_MAIN_LAYOUT_PAGE).transform.SetParent(helmMantaOSScreen.transform, false);
            Object.Instantiate(MantaAssetLoader.MANTAOS_OFFLINE_PAGE).transform.SetParent(rearMantaOSScreen.transform, false);
            Object.Instantiate(MantaAssetLoader.MANTAOS_OFFLINE_PAGE).transform.SetParent(steeringConsoleMantaOSScreen.transform, false);

            SMLHelper.V2.Handlers.TechTypeHandler.TryGetModdedTechType(UNIQUE_ID, out TechType mantaTechType);
            PingType     mantaPingType = CustomBeaconManager.RegisterNewPingType(mantaTechType, NAME, MantaAssetLoader.MANTA_PING_ICON);
            PingInstance pingInstance  = CustomBeaconManager.AddNewBeacon(submarine, mantaPingType, "HMS Unknown Manta");
        }
        public void TestBlink1ThrowsExceptionForUnsupportedUsbProtocolType()
        {
            // Mocks
            Mock<LightsDeviceController> lightsDeviceController = this.mockFactory.CreateMock<LightsDeviceController>();

            // Expectations
            lightsDeviceController.Expects.AtLeastOne.Method(x => x.GetFeatureReportByteLength()).WillReturn(10);
            lightsDeviceController.Expects.AtLeastOne.Method(x => x.SendCommand(new byte[10])).WithAnyArguments().WillReturn(LightsDeviceResult.Ack);

            // Run and test
            LightsManager lightsManager = new LightsManager(lightsDeviceController.MockObject, UsbProtocolType.None);
            Assert.Throws<UnsupportedUsbProtocolTypeException>(() => lightsManager.NotifyLightsDevice(new BuildActiveRequest(true)));
        }
 public void TestStopAndStopAgain()
 {
     LightsManager lightsManager = null;
     try
     {
         LightsDeviceController lightsDeviceController = new LightsDeviceController(0, 0, 0, 0);
         lightsManager = new LightsManager(lightsDeviceController);
         lightsManager.Start();
         Assert.That(lightsManager.Running, NUnit.Framework.Is.True);
         lightsManager.Stop();
         Assert.That(lightsManager.Running, NUnit.Framework.Is.False);
         lightsManager.Stop();
         Assert.That(lightsManager.Running, NUnit.Framework.Is.False);
     }
     finally
     {
         if (lightsManager != null)
         {
             lightsManager.Dispose();
         }
     }
 }
Exemple #29
0
 public static void registerLightsManager(LightsManager lm)
 {
     lightsManager = lm;
 }
Exemple #30
0
 void Awake()
 {
     Instance = this;
 }
Exemple #31
0
        /**
         * If the component requires other custom components then do it here.
         * Read the comment on Components.MantaSeializationFixer if you wish to understand why this horrible system exists.
         */
        public static void SetUpManta(GameObject submarine)
        {
            MantaSubmarine     mantaSubmarine     = submarine.GetComponent <MantaSubmarine>();
            Transform          applyForceLocation = submarine.FindChild("PointsOfInterest").FindChild("ForceAppliedLocation").transform;
            MovementController movementController = submarine.GetOrAddComponent <MovementController>();

            movementController.ApplyForceLocation = applyForceLocation;

            GameObject doorLeft = submarine.FindChild("PointsOfInterest").FindChild("PlayerEntranceLeftFlap");

            doorLeft.GetComponentInChildren <HingeJoint>().connectedBody = submarine.GetComponent <Rigidbody>();
            HingeJointDoor hingeDoorLeft = doorLeft.GetOrAddComponent <HingeJointDoor>();

            hingeDoorLeft.OverwriteTargetVelocity = true;
            hingeDoorLeft.TargetVelocity          = 150f;
            hingeDoorLeft.TriggerToEverything     = false;
            hingeDoorLeft.TriggerToPlayer         = true;
            hingeDoorLeft.TriggerToVehicles       = false;
            hingeDoorLeft.OpenSound  = CyclopsDefaultAssets.PLAYER_HATCH_OPEN;
            hingeDoorLeft.CloseSound = CyclopsDefaultAssets.PLAYER_HATCH_CLOSE;

            GameObject doorRight = submarine.FindChild("PointsOfInterest").FindChild("PlayerEntranceRightFlap");

            doorRight.GetComponentInChildren <HingeJoint>().connectedBody = submarine.GetComponent <Rigidbody>();
            HingeJointDoor hingeDoorRight = doorRight.GetOrAddComponent <HingeJointDoor>();

            hingeDoorRight.OverwriteTargetVelocity = true;
            hingeDoorRight.TargetVelocity          = 150f;
            hingeDoorRight.TriggerToEverything     = false;
            hingeDoorRight.TriggerToPlayer         = true;
            hingeDoorRight.TriggerToVehicles       = false;
            hingeDoorRight.OpenSound  = CyclopsDefaultAssets.PLAYER_HATCH_OPEN;
            hingeDoorRight.CloseSound = CyclopsDefaultAssets.PLAYER_HATCH_CLOSE;

            GameObject vehicleDoorLeft = submarine.FindChild("PointsOfInterest").FindChild("VehicleEntranceLeftFlap");

            vehicleDoorLeft.GetComponentInChildren <HingeJoint>().connectedBody = submarine.GetComponent <Rigidbody>();
            HingeJointDoor hingeVehicleDoorLeft = vehicleDoorLeft.GetOrAddComponent <HingeJointDoor>();

            hingeVehicleDoorLeft.OverwriteTargetVelocity = true;
            hingeVehicleDoorLeft.TargetVelocity          = 150f;
            hingeVehicleDoorLeft.TriggerToEverything     = false;
            hingeVehicleDoorLeft.TriggerToPlayer         = false;
            hingeVehicleDoorLeft.TriggerToVehicles       = true;
            hingeVehicleDoorLeft.OpenSound  = CyclopsDefaultAssets.DOCKING_DOORS_OPEN;
            hingeVehicleDoorLeft.CloseSound = CyclopsDefaultAssets.DOCKING_DOORS_CLOSE;

            GameObject vehicleDoorRight = submarine.FindChild("PointsOfInterest").FindChild("VehicleEntranceRightFlap");

            vehicleDoorRight.GetComponentInChildren <HingeJoint>().connectedBody = submarine.GetComponent <Rigidbody>();
            HingeJointDoor hingeVehicleDoorRight = vehicleDoorRight.GetOrAddComponent <HingeJointDoor>();

            hingeVehicleDoorRight.OverwriteTargetVelocity = true;
            hingeVehicleDoorRight.TargetVelocity          = 150f;
            hingeVehicleDoorRight.TriggerToEverything     = false;
            hingeVehicleDoorRight.TriggerToPlayer         = false;
            hingeVehicleDoorRight.TriggerToVehicles       = true;
            hingeVehicleDoorRight.OpenSound  = CyclopsDefaultAssets.DOCKING_DOORS_OPEN;
            hingeVehicleDoorRight.CloseSound = CyclopsDefaultAssets.DOCKING_DOORS_CLOSE;

            GameObject    entrancePosition      = submarine.FindChild("PointsOfInterest").FindChild("EntranceTeleportSpot");
            GameObject    entranceHatch         = submarine.FindChild("PointsOfInterest").FindChild("PlayerEntrance").FindChild("Base");
            EntranceHatch entranceHatchTeleport = entranceHatch.GetOrAddComponent <EntranceHatch>();

            entranceHatchTeleport.HoverText         = "Board Manta";
            entranceHatchTeleport.HoverHandReticle  = HandReticle.IconType.Hand;
            entranceHatchTeleport.TeleportTarget    = entrancePosition;
            entranceHatchTeleport.Submarine         = mantaSubmarine;
            entranceHatchTeleport.EnteringSubmarine = true;

            GameObject    leavePosition      = submarine.FindChild("PointsOfInterest").FindChild("LeaveTeleportSpot");
            GameObject    leaveHatch         = submarine.FindChild("PointsOfInterest").FindChild("PlayerEntrance").FindChild("Top");
            EntranceHatch leaveHatchTeleport = leaveHatch.GetOrAddComponent <EntranceHatch>();

            leaveHatchTeleport.HoverText         = "Disembark Manta";
            leaveHatchTeleport.HoverHandReticle  = HandReticle.IconType.Hand;
            leaveHatchTeleport.TeleportTarget    = leavePosition;
            leaveHatchTeleport.Submarine         = mantaSubmarine;
            leaveHatchTeleport.EnteringSubmarine = false;

            GameObject      steeringConsolePOI             = submarine.FindChild("PointsOfInterest").FindChild("SteeringConsole");
            GameObject      steeringConsoleLeftHandTarget  = submarine.FindChild("PointsOfInterest").FindChild("SteeringConsole").FindChild("LeftIKTarget");
            GameObject      steeringConsoleRightHandTarget = submarine.FindChild("PointsOfInterest").FindChild("SteeringConsole").FindChild("RightIKTarget");
            GameObject      playerParentWhilePiloting      = submarine.FindChild("PointsOfInterest").FindChild("SteeringConsole").FindChild("PlayerLockedWhileSteeringPosition");
            SteeringConsole steeringConsole = steeringConsolePOI.GetOrAddComponent <SteeringConsole>();

            steeringConsole.MovementController    = submarine.GetComponent <MovementController>();
            steeringConsole.ParentWhilePilotingGO = playerParentWhilePiloting;
            steeringConsole.LeftHandIKTarget      = steeringConsoleLeftHandTarget;
            steeringConsole.RightHandIKTarget     = steeringConsoleRightHandTarget;
            steeringConsole.Submarine             = mantaSubmarine;

            CyclopsCollisionSounds collisionSounds = submarine.GetOrAddComponent <CyclopsCollisionSounds>();

            MovementData normalSpeedMovementData = new MovementData
            {
                ForwardAccelerationSpeed   = 5f,
                BackwardsAccelerationSpeed = 3f,
                AscendDescendSpeed         = 3f,
                RotationSpeed = 0.3f,
                StrafeSpeed   = 2f
            };

            EngineManager engineManager = submarine.GetOrAddComponent <EngineManager>();

            engineManager.SetMovementDataForEngineState(EngineState.SLOW, normalSpeedMovementData);
            engineManager.SetMovementDataForEngineState(EngineState.NORMAL, normalSpeedMovementData);
            engineManager.SetMovementDataForEngineState(EngineState.FAST, normalSpeedMovementData);
            engineManager.SetMovementDataForEngineState(EngineState.SPECIAL, normalSpeedMovementData);

            CyclopsStartupPowerDownSequence   cyclopsStartupPowerDownSequence   = submarine.GetOrAddComponent <CyclopsStartupPowerDownSequence>();
            CyclopsEngineStateChangedCallouts cyclopsEngineStateChangedCallouts = submarine.GetOrAddComponent <CyclopsEngineStateChangedCallouts>();

            movementController.EngineManager = engineManager;
            CyclopsWelcomeCallout cyclopsWelcomeCallout = submarine.GetOrAddComponent <CyclopsWelcomeCallout>();
            CyclopsEngineSound    cyclopsEngineSound    = submarine.GetOrAddComponent <CyclopsEngineSound>();

            cyclopsEngineSound.RampUpSpeed   = 0.2f;
            cyclopsEngineSound.RampDownSpeed = 0.2f;
            movementController.EngineSound   = cyclopsEngineSound;

            OxygenReplenishment oxygenReplenishment = submarine.GetOrAddComponent <OxygenReplenishment>();

            oxygenReplenishment.OxygenPerSecond  = 15f;
            oxygenReplenishment.OxygenEnergyCost = 0.1f;

            LiveMixin liveMixin = submarine.GetOrAddComponent <LiveMixin>();

            liveMixin.data           = CyclopsLiveMixinData.Get(); // TO:DO Create a proper health system for the manta.
            liveMixin.data.knifeable = true;                       // TO:DO remove just here for testing purposes.
            liveMixin.data.maxHealth = 500;

            GameObject externalLights = submarine.FindChild("Lights").FindChild("Exterior");
            GameObject internalLights = submarine.FindChild("Lights").FindChild("Interior");

            LightsManager lightsManager      = submarine.GetOrAddComponent <LightsManager>();
            List <Light>  internalLightsList = new List <Light>();
            List <Light>  externalLightsList = new List <Light>();

            foreach (Light light in externalLights.GetComponentsInChildren <Light>())
            {
                externalLightsList.Add(light);
            }
            foreach (Light light in internalLights.GetComponentsInChildren <Light>())
            {
                internalLightsList.Add(light);
            }
            lightsManager.ExternalLights              = externalLightsList;
            lightsManager.InternalLights              = internalLightsList;
            lightsManager.ExternalLightsOnIntensity   = 1.5f;
            lightsManager.ExternalLightsOffIntensity  = 0f;
            lightsManager.InternalLightsOnIntensity   = 1.5f;
            lightsManager.InternalLightsOffIntensity  = 0f;
            lightsManager.EnableInternalLightsOnStart = true;
            lightsManager.EnableExternalLightsOnStart = true;

            CyclopsUnderAttackEmergencyLighting emergencyLighting = submarine.GetOrAddComponent <CyclopsUnderAttackEmergencyLighting>();

            emergencyLighting.LightsAffected = internalLightsList;

            submarine.GetOrAddComponent <CyclopsUnderAttackCallout>();

            ExternalDamageManager externalDamageManager = submarine.GetOrAddComponent <ExternalDamageManager>();

            externalDamageManager.DamagePoints       = submarine.FindChild("PointsOfInterest").FindChild("DamagePoints").transform;
            externalDamageManager.SubmarineLiveMixin = liveMixin;
            externalDamageManager.LiveMixinDataForExternalDamagePoints = CyclopsExternalDamagePointLiveMixinData.Get();
            externalDamageManager.DamagePointParticleEffects           = new List <GameObject>()
            {
                CyclopsDefaultAssets.EXTERNAL_DAMAGE_POINT_PARTICLES,
            };
            externalDamageManager.DamagePointGameObjects = new List <GameObject>()
            {
                CyclopsDefaultAssets.EXTERNAL_DAMAGE_POINT,
            };

            InternalFireManager internalFireManager = submarine.GetOrAddComponent <InternalFireManager>();

            internalFireManager.SubmarineLiveMixin = liveMixin;
            internalFireManager.FirePoints         = submarine.FindChild("PointsOfInterest").FindChild("FirePoints").transform;
            internalFireManager.FirePrefabs        = new List <GameObject>()
            {
                CyclopsDefaultAssets.CYCLOPS_FIRE,
            };
            internalFireManager.DamageDonePerFirePerSecond = 5f;
            internalFireManager.Submarine = mantaSubmarine;
            internalFireManager.ChancePerDamageTakenToSpawnFire = 5;

            AutoRegenConditional autoRegen = submarine.GetOrAddComponent <AutoRegenConditional>();

            autoRegen.InternalFireManager   = internalFireManager;
            autoRegen.ExternalDamageManager = externalDamageManager;
            autoRegen.LiveMixin             = liveMixin;
            autoRegen.RegenPerSecond        = 2f;
        }
        public void TestHandleCommandForServerDownRequest()
        {
            // Mocks
            Mock<ILightsDeviceController> mockLightsDeviceController = this.mockFactory.CreateMock<ILightsDeviceController>();
            mockLightsDeviceController.Expects.One.Method(x => x.Start());
            mockLightsDeviceController.Expects.One.Method(x => x.Stop());
            mockLightsDeviceController.IgnoreUnexpectedInvocations = true;

            // One for HandleCommand; one for Stop
            mockLightsDeviceController.Expects.Exactly(2).Method(x => x.SendCommand(null)).WithAnyArguments().WillReturn(LightsDeviceResult.Ack);

            // Run
            StatusRequest request = new StatusRequest(false);
            LightsManager lightsManager = null;
            try
            {
                lightsManager = new LightsManager(mockLightsDeviceController.MockObject, UsbProtocolType.DasBlinkenlichten);
                lightsManager.Start();
                Assert.That(lightsManager.Running, NUnit.Framework.Is.True);
                lightsManager.HandleCommand(request, EventArgs.Empty);
                lightsManager.Stop();
                Assert.That(lightsManager.Running, NUnit.Framework.Is.False);
            }
            finally
            {
                if (lightsManager != null)
                {
                    lightsManager.Dispose();
                }
            }

            this.mockFactory.VerifyAllExpectationsHaveBeenMet();
        }
        public void TestNotifyUsbDeviceIsNullRespondsNotConnected()
        {
            // Run
            LightsDeviceController lightsDeviceController = new LightsDeviceController(0, 0, 0, 0, 1000, UsbControlTransferType.Raw) {
                                                                                                                                             Device = null
                                                                                                                                     };
            LightsManager lightsManager = null;
            try
            {
                lightsManager = new LightsManager(lightsDeviceController, UsbProtocolType.DasBlinkenlichten);
                BuildActiveRequest buildActiveRequest = new BuildActiveRequest(true);

                // Test
                Assert.That(lightsManager.NotifyLightsDevice(buildActiveRequest), NUnit.Framework.Is.EqualTo(LightsDeviceResult.NotConnected));
            }
            finally
            {
                if (lightsManager != null)
                {
                    lightsManager.Dispose();
                }
            }
        }
        public void TestNotifyUsbDeviceRespondsNak()
        {
            LightsManager lightsManager = null;
            try
            {
                // Mocks
                Mock<IHidDevice> mockDevice = this.mockFactory.CreateMock<IHidDevice>();
                byte[] mockDataBytes = Encoding.ASCII.GetBytes(UsbResponse.Nak);
                HidDeviceData mockData = new HidDeviceData(mockDataBytes, HidDeviceData.ReadStatus.Success);
                HidReport mockReport = new HidReport(1, mockData);

                // Expectations
                mockDevice.Expects.AtLeastOne.GetProperty(x => x.IsConnected).WillReturn(true);
                using (this.mockFactory.Ordered)
                {
                    mockDevice.Expects.One.GetProperty(x => x.IsOpen).WillReturn(false);
                    mockDevice.Expects.AtLeastOne.GetProperty(x => x.IsOpen).WillReturn(true);
                }

                mockDevice.Expects.AtLeastOne.Method(x => x.OpenDevice());
                mockDevice.Expects.AtLeastOne.Method(x => x.CreateReport()).WillReturn(mockReport);
                mockDevice.Expects.AtLeastOne.Method(x => x.WriteReport(null)).WithAnyArguments().WillReturn(true);
                mockDevice.Expects.AtLeastOne.Method(x => x.Read()).WillReturn(mockData);

                // Run
                LightsDeviceController lightsDeviceController = new LightsDeviceController(0, 0, 0, 0, 1000, UsbControlTransferType.Raw) {
                                                                                                                                                 Device = mockDevice.MockObject
                                                                                                                                         };
                lightsManager = new LightsManager(lightsDeviceController, UsbProtocolType.DasBlinkenlichten);
                BuildActiveRequest buildActiveRequest = new BuildActiveRequest(true);

                // Test
                Assert.That(lightsManager.NotifyLightsDevice(buildActiveRequest), NUnit.Framework.Is.EqualTo(LightsDeviceResult.Nak));
                this.mockFactory.VerifyAllExpectationsHaveBeenMet();
            }
            finally
            {
                if (lightsManager != null)
                {
                    lightsManager.Dispose();
                }
            }
        }
        public void TestNotifyUsbDeviceRespondsToBuildAttentionRequest()
        {
            LightsManager lightsManager = null;
            try
            {
                // Mocks
                Mock<IHidDevice> mockDevice = this.mockFactory.CreateMock<IHidDevice>();

                // Expectations
                mockDevice.Expects.AtLeastOne.GetProperty(x => x.IsConnected).WillReturn(false);

                // Run
                LightsDeviceController lightsDeviceController = new LightsDeviceController(0, 0, 0, 0, 1000, UsbControlTransferType.Raw) {
                                                                                                                                                 Device = mockDevice.MockObject
                                                                                                                                         };
                lightsManager = new LightsManager(lightsDeviceController, UsbProtocolType.DasBlinkenlichten);
                AttentionRequest request = new AttentionRequest(true);

                // Test
                Assert.That(lightsManager.NotifyLightsDevice(request), NUnit.Framework.Is.EqualTo(LightsDeviceResult.NotConnected));
                this.mockFactory.VerifyAllExpectationsHaveBeenMet();
            }
            finally
            {
                if (lightsManager != null)
                {
                    lightsManager.Dispose();
                }
            }
        }
    private void SetLightingEventsForTubeLights(GameObject gameObject)
    {
        TubeLight[] tubeLights = gameObject.GetComponentsInChildren <TubeLight>();
        foreach (TubeLight tubeLight in tubeLights)
        {
            if (tubeLight.gameObject.GetComponent <LightingEvent>() != null)
            {
                continue;
            }

            int eventId = -MapEvent.EVENT_TYPE_BACK_LASERS;
            switch (tubeLight.lightsID)
            {
            case LightsID.Static:
                eventId = MapEvent.EVENT_TYPE_BACK_LASERS;
                break;

            case LightsID.BackLights:
                eventId = MapEvent.EVENT_TYPE_BACK_LASERS;
                break;

            case LightsID.BigRingLights:
                eventId = MapEvent.EVENT_TYPE_RING_LIGHTS;
                break;

            case LightsID.LeftLasers:
                eventId = MapEvent.EVENT_TYPE_LEFT_LASERS;
                break;

            case LightsID.RightLasers:
                eventId = MapEvent.EVENT_TYPE_RIGHT_LASERS;
                break;

            case LightsID.TrackAndBottom:
                eventId = MapEvent.EVENT_TYPE_ROAD_LIGHTS;
                break;

            case LightsID.RingsRotationEffect:
                break;

            case LightsID.RingsStepEffect:
                break;

            case LightsID.RingSpeedLeft:
                break;

            case LightsID.RingSpeedRight:
                break;

            case LightsID.Unused5:
                eventId = MapEvent.EVENT_TYPE_CUSTOM_LIGHT_1;
                break;

            case LightsID.Unused6:
                eventId = MapEvent.EVENT_TYPE_CUSTOM_LIGHT_2;
                break;

            case LightsID.Unused7:
                eventId = MapEvent.EVENT_TYPE_CUSTOM_LIGHT_3;
                break;

            case LightsID.Unused10:
                eventId = MapEvent.EVENT_TYPE_CUSTOM_LIGHT_4;
                break;

            case LightsID.Unused11:
                eventId = MapEvent.EVENT_TYPE_CUSTOM_LIGHT_5;
                break;

            default:
                //Unused 5 6 7 10 11 14 15
                Debug.Log("Custom LightsID " + tubeLight.lightsID);
                break;
            }

            LightsManager tubeLightsManager = platformDescriptor.LightingManagers[eventId];
            if (tubeLightsManager == null)
            {
                tubeLightsManager = tubeLight.transform.parent.gameObject.AddComponent <LightsManager>();
                tubeLightsManager.disableCustomInitialization = true;
                platformDescriptor.LightingManagers[eventId]  = tubeLightsManager;
            }

            MeshRenderer[] meshRenderers = tubeLight.gameObject.GetComponentsInChildren <MeshRenderer>();
            foreach (MeshRenderer renderer in meshRenderers)
            {
                SetRendererMaterials(renderer, tubeLightsManager, tubeLight.width);
            }

            if (tubeLight.gameObject.GetComponent <MeshFilter>() != null)
            {
                MeshFilter mFilter = tubeLight.gameObject.GetComponent <MeshFilter>();
                if (mFilter.sharedMesh == null)
                {
                    Vector3 cubeCenter = Vector3.up * (0.5f - tubeLight.center) * tubeLight.length;

                    Vector3 cubeSize = new Vector3(2 * tubeLight.width, tubeLight.length, 2 * tubeLight.width);
                    Mesh    mesh     = new Mesh();
                    mesh.name = "ScriptGenerated";

                    Vector3[] vertices =
                    {
                        new Vector3(0,                              0,               0),
                        new Vector3(tubeLight.width,                0,               0),
                        new Vector3(tubeLight.width, tubeLight.length,               0),
                        new Vector3(0,               tubeLight.length,               0),
                        new Vector3(0,               tubeLight.length, tubeLight.width),
                        new Vector3(tubeLight.width, tubeLight.length, tubeLight.width),
                        new Vector3(tubeLight.width,                0, tubeLight.width),
                        new Vector3(0,                              0, tubeLight.width),
                    };

                    int[] triangles =
                    {
                        0, 2, 1, //face front
                        0, 3, 2,
                        2, 3, 4, //face top
                        2, 4, 5,
                        1, 2, 5, //face right
                        1, 5, 6,
                        0, 7, 4, //face left
                        0, 4, 3,
                        5, 4, 7, //face back
                        5, 7, 6,
                        0, 6, 7, //face bottom
                        0, 1, 6
                    };

                    mesh.vertices  = vertices;
                    mesh.triangles = triangles;

                    Color[] colors = new Color[vertices.Length];
                    for (int i = 0; i < vertices.Length; i++)
                    {
                        colors[i] = tubeLight.color;
                    }
                    mesh.colors = colors;

                    Vector3 offset = tubeLight.transform.position - tubeLight.transform.TransformPoint(mesh.bounds.center);
                    tubeLight.transform.position = tubeLight.transform.position + offset;

                    tubeLight.gameObject.GetComponent <MeshFilter>().sharedMesh = mesh;
                }
            }
        }
    }
        public void TestHandleCommandForAllLightsDeviceResults([Values(LightsDeviceResult.Ack, LightsDeviceResult.Nak, LightsDeviceResult.NoResponse, LightsDeviceResult.NotConnected, LightsDeviceResult.NotOpen)] LightsDeviceResult result)
        {
            this.mockFactory.ClearExpectations();

            // Mocks
            Mock<ILightsDeviceController> mockLightsDeviceController = this.mockFactory.CreateMock<ILightsDeviceController>();
            mockLightsDeviceController.Expects.One.Method(x => x.SendCommand(null)).WithAnyArguments().WillReturn(result);

            // Any request that steps into the send command logic is sufficient
            AttentionRequest request = new AttentionRequest(true);

            // Run
            LightsManager lightsManager = null;
            try
            {
                lightsManager = new LightsManager(mockLightsDeviceController.MockObject, UsbProtocolType.DasBlinkenlichten);
                lightsManager.HandleCommand(request, EventArgs.Empty);
            }
            finally
            {
                if (lightsManager != null)
                {
                    lightsManager.Dispose();
                }
            }

            // Ensure a clean end to the test
            this.mockFactory.VerifyAllExpectationsHaveBeenMet();
        }
    private void SetRings(GameObject gameObject, TrackRings trackRings, int ringCount)
    {
        TrackLaneRingsManager ringManager;

        //BigRing
        if (gameObject.name.ToLower().Contains("big") || gameObject.name.ToLower().Contains("outer") || gameObject.name.ToLower().Equals("rings"))
        {
            if (platformDescriptor.BigRingManager != null)
            {
                Destroy(platformDescriptor.BigRingManager.rotationEffect);
                Destroy(platformDescriptor.BigRingManager);
            }

            platformDescriptor.BigRingManager = gameObject.AddComponent <TrackLaneRingsManager>();
            if (platformDescriptor.RotationController == null)
            {
                platformDescriptor.RotationController = gameObject.AddComponent <GridRotationController>();
            }
            ringManager = platformDescriptor.BigRingManager;
        }
        else
        {
            if (platformDescriptor.SmallRingManager != null)
            {
                Destroy(platformDescriptor.SmallRingManager.rotationEffect);
                Destroy(platformDescriptor.SmallRingManager);
            }

            platformDescriptor.SmallRingManager = gameObject.AddComponent <TrackLaneRingsManager>();


            if (platformDescriptor.RotationController == null)
            {
                platformDescriptor.RotationController = gameObject.AddComponent <GridRotationController>();
            }
            ringManager = platformDescriptor.SmallRingManager;
        }

        if (ringManager == null)
        {
            return;
        }

        //Also overwrite LightsManager if applicable
        TubeLight[] tubeRingLights = trackRings.trackLaneRingPrefab.GetComponentsInChildren <TubeLight>();
        foreach (TubeLight tubeLight in tubeRingLights)
        {
            int eventId = -1;
            switch (tubeLight.lightsID)
            {
            case LightsID.Static:
                eventId = MapEvent.EVENT_TYPE_BACK_LASERS;
                break;

            case LightsID.BackLights:
                eventId = MapEvent.EVENT_TYPE_BACK_LASERS;
                break;

            case LightsID.BigRingLights:
                eventId = MapEvent.EVENT_TYPE_RING_LIGHTS;
                break;

            case LightsID.LeftLasers:
                eventId = MapEvent.EVENT_TYPE_LEFT_LASERS;
                break;

            case LightsID.RightLasers:
                eventId = MapEvent.EVENT_TYPE_RIGHT_LASERS;
                break;

            case LightsID.TrackAndBottom:
                eventId = MapEvent.EVENT_TYPE_ROAD_LIGHTS;
                break;

            case LightsID.Unused5:
                eventId = MapEvent.EVENT_TYPE_CUSTOM_LIGHT_1;
                break;

            case LightsID.Unused6:
                eventId = MapEvent.EVENT_TYPE_CUSTOM_LIGHT_2;
                break;

            case LightsID.Unused7:
                eventId = MapEvent.EVENT_TYPE_CUSTOM_LIGHT_3;
                break;

            case LightsID.Unused10:
                eventId = MapEvent.EVENT_TYPE_CUSTOM_LIGHT_4;
                break;

            case LightsID.Unused11:
                eventId = MapEvent.EVENT_TYPE_CUSTOM_LIGHT_5;
                break;

            default:
                break;
            }

            if (eventId > 0)
            {
                LightsManager currentLightsManager = platformDescriptor.LightingManagers[eventId];
                LightsManager newLightsManager     = gameObject.AddComponent <LightsManager>();

                newLightsManager.ControllingLights = currentLightsManager.ControllingLights;
                newLightsManager.RotatingLights    = currentLightsManager.RotatingLights;

                Destroy(currentLightsManager);


                platformDescriptor.LightingManagers[eventId] = newLightsManager;
                break;
            }
        }

        if (tubeRingLights.Length == 0)
        {
            LightsManager  tubeLightsManager = platformDescriptor.LightingManagers[MapEvent.EVENT_TYPE_RING_LIGHTS];
            MeshRenderer[] meshRenderers     = trackRings.trackLaneRingPrefab.GetComponentsInChildren <MeshRenderer>();

            foreach (MeshRenderer renderer in meshRenderers)
            {
                SetRendererMaterials(renderer, tubeLightsManager);
            }

            LightsManager newLightsManager = gameObject.AddComponent <LightsManager>();

            newLightsManager.ControllingLights = tubeLightsManager.ControllingLights;
            newLightsManager.RotatingLights    = tubeLightsManager.RotatingLights;

            Destroy(tubeLightsManager);
            platformDescriptor.LightingManagers[MapEvent.EVENT_TYPE_RING_LIGHTS] = newLightsManager;
        }

        //LightsManager lm = pd.LightingManagers[MapEvent.EVENT_TYPE_RING_LIGHTS];
        ReplaceBetterBlack(trackRings.trackLaneRingPrefab);
        SetLightingEventsForTubeLights(trackRings.trackLaneRingPrefab);

        TrackLaneRing tlr = trackRings.trackLaneRingPrefab.gameObject.AddComponent <TrackLaneRing>();

        ringManager.prefab = tlr;

        ringManager.ringCount = trackRings.ringCount;
        if (trackRings.useStepEffect)
        {
            ringManager.minPositionStep = trackRings.minPositionStep;
            ringManager.maxPositionStep = trackRings.maxPositionStep;
        }
        else
        {
            ringManager.minPositionStep = ringManager.maxPositionStep = trackRings.ringPositionStep;
        }
        ringManager.moveSpeed        = trackRings.moveSpeed;
        ringManager.rotationStep     = trackRings.rotationStep;
        ringManager.propagationSpeed = trackRings.rotationPropagationSpeed;
        ringManager.flexySpeed       = trackRings.rotationFlexySpeed;

        if (trackRings.useRotationEffect)
        {
            TrackLaneRingsRotationEffect rotationEffect = gameObject.AddComponent <TrackLaneRingsRotationEffect>();
            ringManager.rotationEffect = rotationEffect;

            rotationEffect.manager = ringManager;
            rotationEffect.startupRotationAngle            = trackRings.startupRotationAngle;
            rotationEffect.startupRotationStep             = trackRings.startupRotationStep;
            rotationEffect.startupRotationPropagationSpeed = trackRings.startupRotationPropagationSpeed;
            rotationEffect.startupRotationFlexySpeed       = trackRings.startupRotationFlexySpeed;
        }
    }
        public void TestBlink1NotifyUsbDeviceTestAllRequests()
        {
            LightsManager lightsManager = null;
            try
            {
                // Mocks
                Mock<LightsDeviceController> lightsDeviceController = this.mockFactory.CreateMock<LightsDeviceController>();

                // Expectations
                lightsDeviceController.Expects.AtLeastOne.Method(x => x.GetFeatureReportByteLength()).WillReturn(10);
                lightsDeviceController.Expects.AtLeastOne.Method(x => x.SendCommand(new byte[10])).WithAnyArguments().WillReturn(LightsDeviceResult.Ack);

                // Run and test
                lightsManager = new LightsManager(lightsDeviceController.MockObject, UsbProtocolType.Blink1);

                // Build activity
                LightsDeviceResult buildActiveRequestResult = lightsManager.NotifyLightsDevice(new BuildActiveRequest(true));
                Assert.That(buildActiveRequestResult, NUnit.Framework.Is.EqualTo(LightsDeviceResult.Ack));
                buildActiveRequestResult = lightsManager.NotifyLightsDevice(new BuildActiveRequest(false));
                Assert.That(buildActiveRequestResult, NUnit.Framework.Is.EqualTo(LightsDeviceResult.Ack));

                // Attention
                LightsDeviceResult attentionRequestResult = lightsManager.NotifyLightsDevice(new AttentionRequest(true));
                Assert.That(attentionRequestResult, NUnit.Framework.Is.EqualTo(LightsDeviceResult.Ack));
                attentionRequestResult = lightsManager.NotifyLightsDevice(new AttentionRequest(false));
                Assert.That(attentionRequestResult, NUnit.Framework.Is.EqualTo(LightsDeviceResult.Ack));
                attentionRequestResult = lightsManager.NotifyLightsDevice(new AttentionRequest(true, true));
                Assert.That(attentionRequestResult, NUnit.Framework.Is.EqualTo(LightsDeviceResult.Ack));

                // System status
                LightsDeviceResult statusRequestRequestResult = lightsManager.NotifyLightsDevice(new StatusRequest(true));
                Assert.That(statusRequestRequestResult, NUnit.Framework.Is.EqualTo(LightsDeviceResult.Ack));
                statusRequestRequestResult = lightsManager.NotifyLightsDevice(new StatusRequest(false));
                Assert.That(statusRequestRequestResult, NUnit.Framework.Is.EqualTo(LightsDeviceResult.Ack));
            }
            finally
            {
                if (lightsManager != null)
                {
                    lightsManager.Dispose();
                }
            }
        }