private static Vector3 GetLightOffsetFor(Vehicle vehicle, VehicleLight light)
        {
            string lightBoneName = GetBoneNameForLight(light);
            if (lightBoneName == null)
                throw new ArgumentOutOfRangeException(nameof(light));

            Vector3 offset = Vector3.Zero;
            Vector3 boneWorldPos = vehicle.HasBone(lightBoneName) ? vehicle.GetBonePosition(lightBoneName) : Vector3.Zero;

            // if a light is broken it returns a position Vector3 near Vector3.Zero, if so get an approximate offset
            if (Vector3.DistanceSquared(boneWorldPos, Vector3.Zero) < 1.25f * 1.25f)
            {
                string lightName = light.ToString().ToLower();

                // left or right
                Vector3 posOffset1 = vehicle.GetPositionOffset(lightName.Contains("left") ? vehicle.LeftPosition : vehicle.RightPosition);
                // front or rear
                Vector3 posOffset2 = vehicle.GetPositionOffset(lightName.Contains("headlight") ? vehicle.FrontPosition : vehicle.RearPosition);

                offset = new Vector3(posOffset1.X, posOffset2.Y, posOffset2.Z);
            }
            else
            {
                offset = vehicle.GetPositionOffset(boneWorldPos);
            }

            return offset;
        }
 //Set if lights are on or off based on the condition
 void SetLights(VehicleLight[] lights, bool condition)
 {
     foreach (VehicleLight curLight in lights)
     {
         curLight.on = condition;
     }
 }
        private static Vector3 GetLightOffsetFor(Vehicle vehicle, VehicleLight light)
        {
            string lightBoneName = GetBoneNameForLight(light);

            if (lightBoneName == null)
            {
                throw new ArgumentOutOfRangeException(nameof(light));
            }

            Vector3 offset       = Vector3.Zero;
            Vector3 boneWorldPos = vehicle.HasBone(lightBoneName) ? vehicle.GetBonePosition(lightBoneName) : Vector3.Zero;

            // if a light is broken it returns a position Vector3 near Vector3.Zero, if so get an approximate offset
            if (Vector3.DistanceSquared(boneWorldPos, Vector3.Zero) < 1.25f * 1.25f)
            {
                string lightName = light.ToString().ToLower();

                // left or right
                Vector3 posOffset1 = vehicle.GetPositionOffset(lightName.Contains("left") ? vehicle.LeftPosition : vehicle.RightPosition);
                // front or rear
                Vector3 posOffset2 = vehicle.GetPositionOffset(lightName.Contains("headlight") ? vehicle.FrontPosition : vehicle.RearPosition);

                offset = new Vector3(posOffset1.X, posOffset2.Y, posOffset2.Z);
            }
            else
            {
                offset = vehicle.GetPositionOffset(boneWorldPos);
            }

            return(offset);
        }
        internal static Light SetCarLight(Vehicle vehicle, Transform parent, VehicleLight light, Vector3 pos, out GameObject go)
        {
            if (light == VehicleLight.All || light == VehicleLight.Front || light == VehicleLight.Rear)
            {
                throw new System.Exception("Light must be right or left, can't be general!");
            }

            Transform lightObj = new GameObject(GetLightName(light)).transform;

            lightObj.parent = parent;

            Quaternion rot = IsFrontLight(light) ? Quaternion.identity : Quaternion.Euler(Vector3.right * 180);

            lightObj.localPosition = pos;
            lightObj.localRotation = rot;

            // Rear light props
            Light ret = lightObj.gameObject.AddComponent <Light>();

            SetLightProps(GetVehicleLightParent(light).Value, ref ret);

            // Now set its blinker
            Transform blinker = vehicle.transform.FindChildRecursive(parent.name + "2");

            // Note: If pixelLightCount is equal to 2 the blinker willnever show
            if ((blinker != null && QualitySettings.pixelLightCount > 2) || testing)
            {
                VehicleBlinker.Init(testing ? lightObj.transform : blinker, light, vehicle);
            }

            go = lightObj.gameObject;
            return(ret);
        }
Exemple #5
0
        internal static string GetLightName(VehicleLight light)
        {
            if (light == VehicleLight.All || light == VehicleLight.Front || light == VehicleLight.Rear)
            {
                throw new System.Exception("Light must be right or left, can't be general!");
            }
            string lightName = light.ToString();

            return(string.Format("{0}Light", (IsFrontLight(light) ? lightName.Substring(5) : lightName.Substring(4)).ToLower()));
        }
Exemple #6
0
        internal static VehicleLight?GetVehicleLightParent(VehicleLight light)
        {
            if (light == VehicleLight.All || light == VehicleLight.Front || light == VehicleLight.Rear)
            {
                return(null);
            }
            string lightName = light.ToString();

            return((VehicleLight)System.Enum.Parse(typeof(VehicleLight), IsFrontLight(light) ? lightName.Substring(0, 5) : lightName.Substring(0, 4)));
        }
    public static VehicleBlinker Init(Transform blinker, VehicleLight light, Vehicle vh)
    {
        VehicleBlinker vehicleBlinker = blinker.gameObject.AddComponent <VehicleBlinker>();

        vehicleBlinker.parent    = blinker;
        vehicleBlinker.lightType = light;
        vehicleBlinker.vehicle   = vh;

        return(vehicleBlinker);
    }
 private static string GetBoneNameForLight(VehicleLight light)
 {
     switch (light)
     {
         case VehicleLight.LeftHeadlight: return "headlight_l";
         case VehicleLight.RightHeadlight: return "headlight_r";
         case VehicleLight.LeftTailLight: return "taillight_l";
         case VehicleLight.RightTailLight: return "taillight_r";
         case VehicleLight.LeftBrakeLight: return "brakelight_l";
         case VehicleLight.RightBrakeLight: return "brakelight_r";
         default: return null;
     }
 }
        public void SetLight(VehicleLight light, float brightness)
        {
            brightness = Mathf.Clamp01(brightness);

            for (var i = 0; i < 4; ++i)
            {
                var bit = 1 << i;
                if (((int)light & bit) == bit)
                {
                    SetLight(i, brightness);
                }
            }
        }
        public static unsafe void SetLightBroken(this Vehicle v, VehicleLight light, bool broken)
        {
            int mask = (int)light;

            if (broken)
            {
                *(int*)(v.MemoryAddress.ToInt64() + BrokenLightsOffset) |= mask;
            }
            else
            {
                *(int*)(v.MemoryAddress.ToInt64() + BrokenLightsOffset) &= ~mask;
            }
        }
Exemple #11
0
        public static unsafe void SetLightBroken(this Vehicle v, VehicleLight light, bool broken)
        {
            int mask = (int)light;

            if (broken)
            {
                *(int *)(v.MemoryAddress.ToInt64() + BrokenLightsOffset) |= mask;
            }
            else
            {
                *(int *)(v.MemoryAddress.ToInt64() + BrokenLightsOffset) &= ~mask;
            }
        }
Exemple #12
0
        internal static Light SetCarLight(Vehicle vehicle, Transform parent, VehicleLight light, Vector3?pos = null)
        {
            GameObject gameObject = null;
            Light      lightRet   = SetCarLight(vehicle, parent, light, pos == null ? (IsLeftLight(light) ? new Vector3(-parent.localPosition.x * 2, 0, 0) : Vector3.zero) : pos.Value, out gameObject);

            // Now set its blinker
            Transform blinker = vehicle.transform.FindChildRecursive(parent.name + "2");

            // Note: If pixelLightCount is equal to 2 the blinker will never show

            //There is a bug, if the blinker is set the vehicle can't steer
            //if (blinker != null) // || testing ... QualitySettings.pixelLightCount > 2 // Not needed
            VehicleBlinker.Init(gameObject.transform, light, vehicle);     //testing ? lightObj.transform :

            //Debug.Log("Is Blinker Null?: "+(blinker == null));

            return(lightRet);
        }
Exemple #13
0
        private bool IsLightOk(VehicleLight light)
        {
            switch (light)
            {
            case VehicleLight.FrontLeft:
                return(m_frontLeftLightOk);

            case VehicleLight.FrontRight:
                return(m_frontRightLightOk);

            case VehicleLight.RearLeft:
                return(m_rearLeftLightOk);

            case VehicleLight.RearRight:
                return(m_rearRightLightOk);
            }

            return(true);
        }
Exemple #14
0
        private Light GetLight(VehicleLight light)
        {
            //if (light == VehicleLight.All || light == VehicleLight.Front || light == VehicleLight.Rear) throw new System.Exception("Light must be right or left, can't be general!");
            switch (light)
            {
            case VehicleLight.FrontLeft:
                return(m_frontLeftLight);

            case VehicleLight.FrontRight:
                return(m_frontRightLight);

            case VehicleLight.RearLeft:
                return(m_rearLeftLight);

            case VehicleLight.RearRight:
                return(m_rearRightLight);
            }

            return(null);
        }
        private static string GetBoneNameForLight(VehicleLight light)
        {
            switch (light)
            {
            case VehicleLight.LeftHeadlight: return("headlight_l");

            case VehicleLight.RightHeadlight: return("headlight_r");

            case VehicleLight.LeftTailLight: return("taillight_l");

            case VehicleLight.RightTailLight: return("taillight_r");

            case VehicleLight.LeftBrakeLight: return("brakelight_l");

            case VehicleLight.RightBrakeLight: return("brakelight_r");

            case VehicleLight.MiddleBrakeLight: return("brakelight_m");

            default: return(null);
            }
        }
        public void SetLight(VehicleLight light, float brightness)
        {
            brightness = Mathf.Clamp01(brightness);

            for (var i = 0; i < 4; ++i)
            {
                var bit = 1 << i;
                if (((int)light & bit) == bit)
                {
                    VehicleLight parsedLight = (VehicleLight)bit; //VehicleAPI.ParseFromBit(i);

                    //Debug.LogFormat("ParsedLight: {0}\nReal Light: {1}", parsedLight.ToString(), light.ToString());
                    //Debug.Break();

                    if (IsLightOk(parsedLight))
                    {
                        Light lightObj      = GetLight(parsedLight);
                        bool  mustRearPower = _isNightToggled && !VehicleAPI.IsFrontLight(light);

                        if (brightness > 0 || mustRearPower)
                        {
                            if (lightObj != null && !lightObj.enabled)
                            {
                                lightObj.enabled   = true;
                                lightObj.intensity = mustRearPower ? constRearNightIntensity : brightness;
                            }
                        }
                        else
                        {
                            if (lightObj != null)
                            {
                                lightObj.enabled = false;
                            }
                        }

                        SetLight(i, mustRearPower ? 1 : brightness);
                    }
                }
            }
        }
Exemple #17
0
        internal static void SetLightProps(VehicleLight vehicleLight, ref Light light, bool isBlinker = false)
        {
            if (light == null)
            {
                return;
            }
            if (!isBlinker)
            {
                switch (vehicleLight)
                {
                case VehicleLight.Front:
                case VehicleLight.FrontLeft:
                case VehicleLight.FrontRight:
                    light.type      = LightType.Spot;
                    light.range     = 60;
                    light.spotAngle = 90;
                    light.intensity = frontLightIntensity;
                    break;

                case VehicleLight.Rear:
                case VehicleLight.RearLeft:
                case VehicleLight.RearRight:
                    light.type      = LightType.Spot;
                    light.range     = 20;
                    light.spotAngle = 50;
                    light.intensity = 1;
                    light.color     = Color.red;
                    break;
                }
            }
            else
            {
                light.type      = LightType.Spot;
                light.range     = 10;
                light.spotAngle = 140;
                light.intensity = .8f;
                light.color     = new Color(1, .5f, 0);
            }
        }
Exemple #18
0
        internal static Light SetCarLight(Vehicle vehicle, Transform parent, VehicleLight light, Vector3 pos, out GameObject go)
        {
            if (light == VehicleLight.All || light == VehicleLight.Front || light == VehicleLight.Rear)
            {
                throw new System.Exception("Light must be right or left, can't be general!");
            }

            Transform lightObj = new GameObject(GetLightName(light)).transform;

            lightObj.parent = parent;

            Quaternion rot = IsFrontLight(light) ? Quaternion.identity : Quaternion.Euler(Vector3.right * 180);

            lightObj.localPosition = pos;
            lightObj.localRotation = rot;

            Light ret = lightObj.gameObject.AddComponent <Light>();

            SetLightProps(GetVehicleLightParent(light).Value, ref ret);

            go = lightObj.gameObject;
            return(ret);
        }
Exemple #19
0
 internal static bool IsFrontLight(VehicleLight light)
 {
     return(light == VehicleLight.Front || light == VehicleLight.FrontLeft || light == VehicleLight.FrontRight);
 }
        internal static Light SetCarLight(Vehicle vehicle, Transform parent, VehicleLight light, Vector3?pos = null)
        {
            GameObject gameObject = null;

            return(SetCarLight(vehicle, parent, light, pos == null ? (IsLeftLight(light) ? new Vector3(-parent.localPosition.x * 2, 0, 0) : Vector3.zero) : pos.Value, out gameObject));
        }
 private bool ShouldBePowered(VehicleLight side)
 {
     //if (!side.HasValue) throw new Exception("Light sides need to have a value, revise your code.");
     Debug.LogFormat("Blinker Mode: {0}; Steering: {1}", vehicle.blinkerMode, vehicle.Steering);
     return(IsLeftSide && (vehicle.blinkerMode == VehicleBlinkerMode.Left || vehicle.blinkerMode == VehicleBlinkerMode.Emergency));
 }
Exemple #22
0
 public VehicleLightStateChangedArgs(Vehicle vehicle, VehicleLight light, VehicleLightState state)
 {
     this.Vehicle = vehicle;
     this.Light   = light;
     this.State   = state;
 }
        public void SetLight(VehicleLight light, float brightness)
        {
            brightness = Mathf.Clamp01(brightness);

            for (var i = 0; i < 4; ++i) {
                var bit = 1 << i;
                if (((int) light & bit) == bit) {
                    SetLight(i, brightness);
                }
            }
        }
 public StrobedLight(StrobedVehicle vehicle, VehicleLight light)
 {
     StrobedVehicle = vehicle;
     Light          = light;
     lightOffset    = GetLightOffsetFor(vehicle.Vehicle, light);
 }
 public StrobedLight(StrobedVehicle vehicle, VehicleLight light)
 {
     StrobedVehicle = vehicle;
     Light = light;
     lightOffset = GetLightOffsetFor(vehicle.Vehicle, light);
 }
Exemple #26
0
 internal static bool IsValidIndividualLight(VehicleLight light)
 {
     return(!(light == VehicleLight.All || light == VehicleLight.Front || light == VehicleLight.Rear));
 }
Exemple #27
0
 public static unsafe bool IsLightBroken(this Vehicle v, VehicleLight light)
 {
     return((*(int *)(v.MemoryAddress.ToInt64() + BrokenLightsOffset) & (int)light) == (int)light);
 }
 public static unsafe bool IsLightBroken(this Vehicle v, VehicleLight light)
 {
     return (*(int*)(v.MemoryAddress.ToInt64() + BrokenLightsOffset) & (int)light) == (int)light;
 }
Exemple #29
0
 internal static bool IsLeftLight(VehicleLight light)
 {
     //Debug.LogFormat("Light type: {0} ({1})", light, light == VehicleLight.FrontLeft || light == VehicleLight.RearLeft);
     return(light == VehicleLight.FrontLeft || light == VehicleLight.RearLeft);
 }