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); }
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())); }
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; } }
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; } }
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); }
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); }
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); } } } }
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); } }
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); }
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)); }
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); }
internal static bool IsValidIndividualLight(VehicleLight light) { return(!(light == VehicleLight.All || light == VehicleLight.Front || light == VehicleLight.Rear)); }
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; }
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); }