protected async override Task OnDisappearingAnimationBegin() { var taskSource = new TaskCompletionSource <bool>(); var currentHeight = FrameContainer.Height; await Task.WhenAll( UsernameEntry.FadeTo(0), PasswordEntry.FadeTo(0), LoginButton.FadeTo(0)); OctocatImage.Source = "Unlock.png"; FrameContainer.Animate("HideAnimation", d => { FrameContainer.HeightRequest = d; }, start: currentHeight, end: 170, finished: async(d, b) => { await Task.Delay(300); taskSource.TrySetResult(true); }); await taskSource.Task; }
private IEnumerator SaveJSONInfo(StreamWriter writer) { isCurrentlyWriting = true; Pose p = new Pose(arCamera.position, arCamera.rotation); List <PointContent> l = depthPrediction.points; FrameContainer fc = new FrameContainer(p, l); string json = JsonUtility.ToJson(fc); Task t = null; try { t = writer.WriteLineAsync(json); } catch (Exception e) { textBox.text += e.Message + "\n"; } while (t != null && !t.IsCompleted) { yield return(new WaitForEndOfFrame()); } isCurrentlyWriting = false; yield return(null); }
protected override async Task OnDisappearingAnimationBeginAsync() { if (!IsAnimationEnabled) { return; } var taskSource = new TaskCompletionSource <bool>(); var currentHeight = FrameContainer.Height; await Task.Run(() => Parallel.ForEach(PageStack.Children, (c) => c.FadeTo(0))); FrameContainer.Animate("HideAnimation", d => { FrameContainer.HeightRequest = d; }, start: currentHeight, end: currentHeight + 20, finished: async(d, b) => { await Task.Delay(100); taskSource.TrySetResult(true); }); await taskSource.Task; }
private void _DrawAllFrameSubframes(EasyGraph dataGraph, FrameContainer frameContainer, Frame isA_nilFrame, DataVertex isA_nilFrameDataVertex) { foreach (Slot slot in isA_nilFrame.slots) { Frame nextFrame = frameContainer.FrameFinder(slot.value); if (nextFrame != null) { DataVertex nextFrameDataVertex = new DataVertex(); if (_GetVertexByItsFrame(nextFrame, dataGraph) == null) { nextFrameDataVertex.Text = nextFrame.name; nextFrameDataVertex.ID = nextFrame.Id; dataGraph.AddVertex(nextFrameDataVertex); } else { nextFrameDataVertex = _DrawGetVertexById(nextFrame.Id, dataGraph); } var dataEdge = new DataEdge(nextFrameDataVertex, isA_nilFrameDataVertex) { }; dataGraph.AddEdge(dataEdge); //TODO: Здесь супер функция по отрисовке всех из-а для этого } } }
// Use this for initialization void Start() { framelistLeft = new FrameContainer(); framelistRight = new FrameContainer(); //createPlotlyCurve(); }
protected async override Task OnDisappearingAnimationBegin() { pickerClass.Opacity = pickerStream.Opacity = pickerSection.Opacity = btnOK.Opacity = 0; var taskSource = new TaskCompletionSource <bool>(); var currentHeight = FrameContainer.Height; await Task.WhenAll( pickerClass.FadeTo(0), pickerStream.FadeTo(0), pickerSection.FadeTo(0), btnOK.FadeTo(0), CloseImage.FadeTo(0)); FrameContainer.Animate("HideAnimation", d => { FrameContainer.HeightRequest = d; }, start: currentHeight, end: 170, finished: async(d, b) => { await Task.Delay(300); taskSource.TrySetResult(true); }); await taskSource.Task; }
protected override async void OnDisappearingAnimationBegin() { if (!IsAnimationEnabled) { return; } var taskSource = new TaskCompletionSource <bool>(); var currentHeight = FrameContainer.Height; await Task.WhenAll( UsernameEntry.FadeTo(0), PasswordEntry.FadeTo(0), LoginButton.FadeTo(0)); FrameContainer.Animate("HideAnimation", d => { FrameContainer.HeightRequest = d; }, start: currentHeight, end: 170, finished: async(d, b) => { await Task.Delay(300); taskSource.TrySetResult(true); }); await taskSource.Task; }
public static void UpdateMaterials( FrameContainer frames, int[] colors, float[] lights, MaterialPropertyBlock materialPropertyBlock) { var indices = CarColors.FromIndices(colors); Color32 headLightColor = new Color32(255, 255, 255, 255); Color32 tailLightColor = new Color32(255, 255, 255, 255); // compute car colors Color32[] carColors = new [] { new Color32(255, 255, 255, 255), indices[0], indices[1], indices[2], indices[3], headLightColor, headLightColor, tailLightColor, tailLightColor, }; // compute car emissions float[] carEmissions = new[] { 0f, 0f, 0f, 0f, 0f, Mathf.Exp(lights[0] * 2) - 1, Mathf.Exp(lights[1] * 2) - 1, Mathf.Exp(lights[2] * 2) - 1, Mathf.Exp(lights[3] * 2) - 1, }; foreach (var frame in frames) { var mr = frame.GetComponent <MeshRenderer>(); if (mr == null) { continue; } // get color index from each material, and assign properties accordingly var materials = mr.sharedMaterials; for (int i = 0; i < materials.Length; i++) { int carColorIndex = materials[i].GetInt(Importing.Conversion.Geometry.CarColorIndexId); materialPropertyBlock.SetColor(CarColorPropertyId, carColors[carColorIndex]); materialPropertyBlock.SetFloat(CarEmissionPropertyId, carEmissions[carColorIndex]); mr.SetPropertyBlock(materialPropertyBlock, i); } } }
protected override async Task OnDisappearingAnimationBeginAsync() { if (!IsAnimationEnabled) { return; } var taskSource = new TaskCompletionSource <bool>(); var currentHeight = FrameContainer.Height; FrameContainer.Animate("HideAnimation", d => { FrameContainer.HeightRequest = d; }, start: currentHeight, end: 170, finished: async(d, b) => { await Task.Delay(300); taskSource.TrySetResult(true); }); await taskSource.Task; }
public Animation Load(string clipName, FrameContainer frames) { if (_anims.ContainsKey(clipName)) { return(_anims[clipName]); } var anim = new Animation(_package[clipName], frames); _anims.Add(clipName, anim); return(anim); }
static void Main(string[] args) { if (args.Length < 2) { Usage(); return; } FrameContainer container = ContainerLoader.FromFile(args[0]); File.WriteAllBytes(args[1], container.Image.Array); }
public static Animation Load(string fileName, string clipName, FrameContainer frames) { Package package; if (!_sLoaded.ContainsKey(fileName)) { _sLoaded.Add(fileName, package = new Package(fileName)); } else { package = _sLoaded[fileName]; } return package.Load(clipName, frames); }
// public static AnimationCurve[] GetAllCurvesForClip (UnityEngine.AnimationClip clip) // { // if (s_curvesPerClip.ContainsKey (clip)) { // return s_curvesPerClip [clip].ToArray (); // } else { // return new AnimationCurve[0]; // } // } public static void RemovePositionCurves(UnityEngine.AnimationClip clip, FrameContainer frames) { foreach (var frame in frames) { string bonePath = frame.Path; // foreach (var translateAxis in s_translateAxes) { // clip.SetCurve (bonePath, typeof(Transform), "localPosition." + translateAxis.Name, null); // } clip.SetCurve(bonePath, typeof(Transform), "m_LocalPosition", null); } }
public SequenceBaseObject() { m_border = new FrameContainer() { ManipulationMode = ManipulationModes.TranslateX, BorderThickness = new Thickness(4, 0, 4, 0), MinHeight = 100, MinWidth = 10, AccentColor = Colors.PaleVioletRed }; m_border.ManipulationStarted += OnManipulationStarted; m_border.ManipulationDelta += OnManipulationDelta; m_border.ManipulationCompleted += OnManipulationCompleted; }
// All loaded anims. Each entry contains file name and corresponding ifp package. // public static IEnumerable<KeyValuePair<string, Package>> Loaded { get { return _sLoaded; } } public static Animation Load(string fileName, string clipName, FrameContainer frames) { Package package; if (!_sLoaded.ContainsKey(fileName)) { _sLoaded.Add(fileName, package = new Package(fileName)); } else { package = _sLoaded[fileName]; } return(package.Load(clipName, frames)); }
public static void SetColors(FrameContainer frames, int[] colors) { var props = new MaterialPropertyBlock(); var indices = CarColors.FromIndices(colors); int[] vehicleColorIds = Vehicle.CarColorIds; for (int i = 0; i < vehicleColorIds.Length; ++i) { props.SetColor(vehicleColorIds[i], indices[i]); } foreach (var mr in frames.Select(f => f.GetComponent <MeshRenderer>()).Where(mr => mr != null)) { mr.SetPropertyBlock(props); } }
public List <Frame> GetAnswerByFrame(Frame frame) { FrameContainer kBFrameContainer = this.GetFrameContainer(); List <Frame> frameAnswer = kBFrameContainer.GetAnswer(frame); string answer = ""; if (frameAnswer != null) { answer = frameAnswer[0].name; } else { frameAnswer = null; answer = "Наша система не может найти ответ, попробуйте обратиться к другой системе"; } MessageBox.Show("Ответ: " + answer); return(frameAnswer); }
protected override async Task OnDisappearingAnimationBeginAsync() { if (!IsAnimationEnabled) { return; } var taskSource = new TaskCompletionSource <bool>(); var currentHeight = FrameContainer.Height; //await Task.WhenAll( // HabitEntry.FadeTo(0), // DescriptionLabel.FadeTo(0), // DescriptionEditor.FadeTo(0), // StartPicker.FadeTo(0), // EndPicker.FadeTo(0), // EndPicker.FadeTo(0) // ErrorLabel.FadeTo(0), // LoadingActivityIndicator.FadeTo(0) // ); await Task.Run(() => Parallel.ForEach(PageStack.Children, (c) => c.FadeTo(0))); FrameContainer.Animate("HideAnimation", d => { FrameContainer.HeightRequest = d; }, start: currentHeight, end: currentHeight + 20, finished: async(d, b) => { await Task.Delay(100); taskSource.TrySetResult(true); }); await taskSource.Task; }
private void SuccessLoadFile(string path) { using (StreamReader reader = new StreamReader(path)) { string line; while ((line = reader.ReadLine()) != null) { try { FrameContainer fc = JsonUtility.FromJson <FrameContainer>(line); frameList.Add(fc); } catch (Exception e) { Debug.Log(e.Message); } } } Debug.Log(frameList.Count + " count"); StartCoroutine(LoopFrames()); }
protected async override Task OnDisappearingAnimationBegin() { var taskSource = new TaskCompletionSource <bool>(); var currentHeight = FrameContainer.Height; await Task.WhenAll( WineVintage.FadeTo(0), OKButton.FadeTo(0)); FrameContainer.Animate("HideAnimation", d => { FrameContainer.HeightRequest = d; }, start: currentHeight, end: 170, finished: async(d, b) => { await Task.Delay(300); taskSource.TrySetResult(true); }); await taskSource.Task; }
private void Initialize(VehicleDef def, int[] colors = null) { Definition = def; if (colors != null && colors[0] != -1) { SetColors(colors); } else { var defaultClrs = CarColors.GetCarDefaults(Definition.ModelName); if (defaultClrs != null) { SetColors(defaultClrs[UnityEngine.Random.Range(0, defaultClrs.Count)]); } else { Debug.LogWarningFormat("No colours defined for {0}!", def.GameName); } } name = Definition.GameName; _geometryParts = Geometry.Load(Definition.ModelName, TextureDictionary.Load(Definition.TextureDictionaryName), TextureDictionary.Load("vehicle"), TextureDictionary.Load("misc")); _frames = _geometryParts.AttachFrames(transform, MaterialFlags.Vehicle); var wheelFrame = _frames.FirstOrDefault(x => x.Name == "wheel"); if (wheelFrame == null) { Debug.LogWarningFormat("No wheels defined for {0}!", def.GameName); Destroy(gameObject); return; } foreach (var frame in _frames) { if (!frame.Name.StartsWith("wheel_")) { continue; } if (!frame.Name.EndsWith("_dummy")) { continue; } var childFrames = _frames.Where(x => x.ParentIndex == frame.Index); // disable all children of wheel dummies foreach (var childFrame in childFrames) { childFrame.gameObject.SetActive(false); } var wheelAlignment = GetWheelAlignment(frame.Name); Wheel inst; // see if this wheel dummy has a wheel child var wheel = childFrames.FirstOrDefault(x => x.Name == "wheel"); if (wheel == null) { var copy = Instantiate(wheelFrame.transform); copy.SetParent(frame.transform, false); _wheels.Add(inst = new Wheel { Alignment = wheelAlignment, Parent = frame.transform, Child = copy, }); } else { // all children of wheel dummies get set to inactive so activate this one wheel.gameObject.SetActive(true); _wheels.Add(inst = new Wheel { Alignment = wheelAlignment, Parent = frame.transform, Child = wheel.transform, }); } if (inst.IsLeftHand) { frame.transform.Rotate(Vector3.up, 180.0f); } inst.Complement = _wheels.FirstOrDefault(x => (x.Alignment & WheelAlignment.LeftRightMask) != (inst.Alignment & WheelAlignment.LeftRightMask) && (x.Alignment & WheelAlignment.FrontMidRearMask) == (inst.Alignment & WheelAlignment.FrontMidRearMask)); if (inst.Complement != null) { inst.Complement.Complement = inst; } } InitializePhysics(); foreach (var pair in _frames.Where(x => x.Name.StartsWith("door_"))) { var doorAlignment = GetDoorAlignment(pair.Name); if (doorAlignment == DoorAlignment.None) { continue; } var hinge = pair.gameObject.AddComponent <HingeJoint>(); hinge.axis = Vector3.up; hinge.useLimits = true; var limit = 90.0f * ((doorAlignment == DoorAlignment.LeftFront || doorAlignment == DoorAlignment.LeftRear) ? 1.0f : -1.0f); hinge.limits = new JointLimits { min = Mathf.Min(0, limit), max = Mathf.Max(0, limit), }; hinge.connectedBody = gameObject.GetComponent <Rigidbody>(); } var frontSeat = GetPart("ped_frontseat"); var backSeat = GetPart("ped_backseat"); if (frontSeat != null) { var frontSeatMirror = new GameObject("ped_frontseat").transform; frontSeatMirror.SetParent(frontSeat.parent, false); frontSeatMirror.localPosition = Vector3.Scale(frontSeat.localPosition, new Vector3(-1f, 1f, 1f)); if (frontSeat.localPosition.x > 0f) { AttachSeat(frontSeat, SeatAlignment.FrontRight); AttachSeat(frontSeatMirror, SeatAlignment.FrontLeft); } else { AttachSeat(frontSeatMirror, SeatAlignment.FrontRight); AttachSeat(frontSeat, SeatAlignment.FrontLeft); } DriverTransform = GetSeat(SeatAlignment.FrontLeft).Parent; } if (backSeat != null) { var backSeatMirror = new GameObject("ped_backseat").transform; backSeatMirror.SetParent(backSeat.parent, false); backSeatMirror.localPosition = Vector3.Scale(backSeat.localPosition, new Vector3(-1f, 1f, 1f)); if (backSeat.localPosition.x > 0f) { AttachSeat(backSeat, SeatAlignment.BackRight); AttachSeat(backSeatMirror, SeatAlignment.BackLeft); } else { AttachSeat(backSeatMirror, SeatAlignment.BackRight); AttachSeat(backSeat, SeatAlignment.BackLeft); } } gameObject.SetLayerRecursive(Layer); }
protected override void OnLaunched(LaunchActivatedEventArgs e) { #if DEBUG if (System.Diagnostics.Debugger.IsAttached) { this.DebugSettings.EnableFrameRateCounter = true; } #endif FrameContainer appContainer = Window.Current.Content as FrameContainer; Frame rootFrame = null; if (appContainer != null) { AppContainer = appContainer; rootFrame = appContainer.Content as Frame; RootFrame = rootFrame; } // Initialize application if not initialized if (appContainer == null) { // Create application container and a root frame // Set up a new Frame to be placed inside container appContainer = new FrameContainer(); rootFrame = new Frame() { Background = null }; RootFrame = rootFrame; appContainer.Content = rootFrame; AppContainer = appContainer; // TODO: customize this value to obtain the best caching value for your app rootFrame.CacheSize = 1; if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) { // TODO: Load previous application state } // Set application container as current frame Window.Current.Content = appContainer; } if (rootFrame.Content == null) { // Remove first animation if (rootFrame.ContentTransitions != null) { this.transitions = new TransitionCollection(); foreach (var c in rootFrame.ContentTransitions) { this.transitions.Add(c); } } rootFrame.ContentTransitions = null; rootFrame.Navigated += this.RootFrame_FirstNavigated; // Navigate to first page, when stack is not recovered if (!rootFrame.Navigate(typeof(MainPage), e.Arguments)) { throw new Exception("Failed to create initial page"); } } //Workaround for global font setting RootFrame.FontFamily = new FontFamily("Segoe WP"); // Activate current Window Window.Current.Activate(); }
public Editor(Page page) { InitializeComponent(); FrameContainer.Navigate(page); }
private Animation(Clip anim, FrameContainer frames) { _clip = Convert(anim, frames, out _rootStart, out _rootEnd); }
private void LoadModel(string modelName, params string[] txds) { if (_frames != null) { Destroy(_frames.Root.gameObject); Destroy(_frames); _loadedAnims.Clear(); } var geoms = Geometry.Load(modelName, txds); _frames = geoms.AttachFrames(transform, MaterialFlags.Default); _root = _frames.GetByName("Root"); }
private void Initialize(VehicleDef def, int[] colors = null) { Definition = def; if (colors != null && colors[0] != -1) { SetColors(colors); } else { var defaultClrs = CarColors.GetCarDefaults(Definition.ModelName); if (defaultClrs != null) { SetColors(defaultClrs[UnityEngine.Random.Range(0, defaultClrs.Count)]); } else { Debug.LogWarningFormat("No colours defined for {0}!", def.GameName); } } name = Definition.GameName; _geometryParts = LoadGeometryParts(Definition); _frames = _geometryParts.AttachFrames(transform, MaterialFlags.Vehicle); var wheelFrame = _frames.FirstOrDefault(x => x.Name == "wheel"); if (wheelFrame == null) { Debug.LogWarningFormat("No wheels defined for {0}!", def.GameName); Destroy(gameObject); return; } var engineFrame = _frames.FirstOrDefault(x => x.Name == "engine"); if (engineFrame != null) { this.EngineTransform = engineFrame.transform; } var petrolcapFrame = _frames.FirstOrDefault(x => x.Name == "petrolcap"); if (petrolcapFrame != null) { this.PetrolcapTransform = petrolcapFrame.transform; } foreach (var frame in _frames) { if (!frame.Name.StartsWith("wheel_")) { continue; } if (!frame.Name.EndsWith("_dummy")) { continue; } var childFrames = _frames.Where(x => x.ParentIndex == frame.Index); // disable all children of wheel dummies foreach (var childFrame in childFrames) { childFrame.gameObject.SetActive(false); } var wheelAlignment = GetWheelAlignment(frame.Name); Wheel inst; // see if this wheel dummy has a wheel child var wheel = childFrames.FirstOrDefault(x => x.Name == "wheel"); if (wheel == null) { var copy = Instantiate(wheelFrame.transform); copy.SetParent(frame.transform, false); _wheels.Add(inst = new Wheel { Alignment = wheelAlignment, Parent = frame.transform, Child = copy, }); } else { // all children of wheel dummies get set to inactive so activate this one wheel.gameObject.SetActive(true); _wheels.Add(inst = new Wheel { Alignment = wheelAlignment, Parent = frame.transform, Child = wheel.transform, }); } if (inst.IsLeftHand) { frame.transform.Rotate(Vector3.up, 180.0f); } inst.Complement = _wheels.FirstOrDefault(x => (x.Alignment & WheelAlignment.LeftRightMask) != (inst.Alignment & WheelAlignment.LeftRightMask) && (x.Alignment & WheelAlignment.FrontMidRearMask) == (inst.Alignment & WheelAlignment.FrontMidRearMask)); if (inst.Complement != null) { inst.Complement.Complement = inst; } } InitializePhysics(); this.Health = this.MaxHealth = Mathf.Pow(this.HandlingData.Mass, VehicleManager.Instance.massToHealthExponent); //this.SetupDoorsHingeJoints(); var frontSeat = GetPart("ped_frontseat"); var backSeat = GetPart("ped_backseat"); if (frontSeat != null) { var frontSeatMirror = new GameObject("ped_frontseat").transform; frontSeatMirror.SetParent(frontSeat.parent, false); frontSeatMirror.localPosition = Vector3.Scale(frontSeat.localPosition, new Vector3(-1f, 1f, 1f)); if (frontSeat.localPosition.x > 0f) { AttachSeat(frontSeat, SeatAlignment.FrontRight); AttachSeat(frontSeatMirror, SeatAlignment.FrontLeft); } else { AttachSeat(frontSeatMirror, SeatAlignment.FrontRight); AttachSeat(frontSeat, SeatAlignment.FrontLeft); } DriverTransform = GetSeat(SeatAlignment.FrontLeft).Parent; } if (backSeat != null) { var backSeatMirror = new GameObject("ped_backseat").transform; backSeatMirror.SetParent(backSeat.parent, false); backSeatMirror.localPosition = Vector3.Scale(backSeat.localPosition, new Vector3(-1f, 1f, 1f)); if (backSeat.localPosition.x > 0f) { AttachSeat(backSeat, SeatAlignment.BackRight); AttachSeat(backSeatMirror, SeatAlignment.BackLeft); } else { AttachSeat(backSeatMirror, SeatAlignment.BackRight); AttachSeat(backSeat, SeatAlignment.BackLeft); } } // Add vehicle damage /* * var dam = gameObject.AddComponent<VehicleDamage>(); * dam.damageParts = new Transform[] { transform.GetChild(0).Find("engine") }; * dam.deformMeshes = gameObject.GetComponentsInChildren<MeshFilter>(); * dam.displaceParts = gameObject.GetComponentsInChildren<Transform>().Where(x => x.GetComponent<Frame>() != null || x.GetComponent<FrameContainer>() != null).ToArray(); * dam.damageFactor = VehicleAPI.constDamageFactor; * dam.collisionIgnoreHeight = -.4f; * dam.collisionTimeGap = .1f; * * //OptimizeVehicle(); * * dam.deformColliders = gameObject.GetComponentsInChildren<MeshCollider>(); */ gameObject.SetLayerRecursive(Layer); SetupHighDetailMesh(); }
private static UnityEngine.AnimationClip Convert(Clip animation, FrameContainer frames, out UVector3 rootStart, out UVector3 rootEnd) { var clip = new UnityEngine.AnimationClip(); clip.legacy = true; var rotateAxes = new[] { new { Name = "x", Mask = new UVector4(1f, 0f, 0f, 0f) }, new { Name = "y", Mask = new UVector4(0f, 1f, 0f, 0f) }, new { Name = "z", Mask = new UVector4(0f, 0f, 1f, 0f) }, new { Name = "w", Mask = new UVector4(0f, 0f, 0f, 1f) } }; var translateAxes = new[] { new { Name = "x", Mask = new UVector3(1f, 0f, 0f) }, new { Name = "y", Mask = new UVector3(0f, 1f, 0f) }, new { Name = "z", Mask = new UVector3(0f, 0f, 1f) }, }; var root = animation.Bones.FirstOrDefault(x => x.BoneId == 0); if (root != null && root.FrameCount > 0) { rootStart = Types.Convert(root.Frames.First().Translation); rootEnd = Types.Convert(root.Frames.Last().Translation); } else { rootStart = rootEnd = UVector3.zero; } foreach (var bone in animation.Bones) { var bFrames = bone.Frames; var frame = frames.GetByBoneId(bone.BoneId); string bonePath = frame.Path; var axisAngle = bFrames.ToDictionary(x => x, x => { var q = Types.Convert(x.Rotation); float ang; UnityEngine.Vector3 axis; q.ToAngleAxis(out ang, out axis); return(new UVector4(q.x, q.y, q.z, q.w)); }); foreach (var axis in rotateAxes) { var keys = bFrames .Select(x => new Keyframe(x.Time * TimeScale, UVector4.Dot(axisAngle[x], axis.Mask))) .ToArray(); clip.SetCurve(bonePath, typeof(Transform), "localRotation." + axis.Name, new UnityEngine.AnimationCurve(keys)); } var converted = bFrames.Select(x => Types.Convert(x.Translation)).ToArray(); if (!converted.Any(x => !x.Equals(UVector3.zero))) { continue; } var anyVelocities = false; var deltaVals = converted.Select((x, i) => { var prev = Math.Max(0, i - 1); var next = Math.Min(i + 1, converted.Length - 1); var prevTime = bFrames[prev].Time * TimeScale; var nextTime = bFrames[next].Time * TimeScale; return(prevTime == nextTime || !(anyVelocities = true) ? UVector3.zero : (converted[next] - converted[prev]) / (nextTime - prevTime)); }).ToArray(); foreach (var translateAxis in translateAxes) { var positions = bFrames .Select((x, i) => new Keyframe(x.Time * TimeScale, UVector3.Dot(frame.transform.localPosition + converted[i], translateAxis.Mask))) .ToArray(); var deltas = bFrames.Select((x, i) => new Keyframe(x.Time * TimeScale, UVector3.Dot(deltaVals[i], translateAxis.Mask))).ToArray(); clip.SetCurve(bonePath, typeof(Transform), "localPosition." + translateAxis.Name, new UnityEngine.AnimationCurve(positions)); if (!anyVelocities) { continue; } clip.SetCurve(bonePath, typeof(BFrame), "LocalVelocity." + translateAxis.Name, new UnityEngine.AnimationCurve(deltas)); } } clip.wrapMode = WrapMode.Loop; clip.EnsureQuaternionContinuity(); return(clip); }
private void Initialize(VehicleDef def, int[] colors = null) { Definition = def; if (colors != null && colors[0] != -1) { SetColors(colors); } else { var defaultClrs = CarColors.GetCarDefaults(Definition.ModelName); if (defaultClrs != null) { SetColors(defaultClrs[UnityEngine.Random.Range(0, defaultClrs.Count)]); } else { Debug.LogWarningFormat("No colours defined for {0}!", def.GameName); } } name = Definition.GameName; _geometryParts = Geometry.Load(Definition.ModelName, TextureDictionary.Load(Definition.TextureDictionaryName), TextureDictionary.Load("vehicle"), TextureDictionary.Load("misc")); _frames = _geometryParts.AttachFrames(transform, MaterialFlags.Vehicle); var wheelFrame = _frames.FirstOrDefault(x => x.Name == "wheel"); if (wheelFrame == null) { Debug.LogWarningFormat("No wheels defined for {0}!", def.GameName); Destroy(gameObject); return; } foreach (var frame in _frames) { if (!frame.Name.StartsWith("wheel_")) { continue; } if (!frame.Name.EndsWith("_dummy")) { continue; } var childFrames = _frames.Where(x => x.ParentIndex == frame.Index); // disable all children of wheel dummies foreach (var childFrame in childFrames) { childFrame.gameObject.SetActive(false); } var wheelAlignment = GetWheelAlignment(frame.Name); Wheel inst; // see if this wheel dummy has a wheel child var wheel = childFrames.FirstOrDefault(x => x.Name == "wheel"); if (wheel == null) { var copy = Instantiate(wheelFrame.transform); copy.SetParent(frame.transform, false); _wheels.Add(inst = new Wheel { Alignment = wheelAlignment, Parent = frame.transform, Child = copy, }); } else { // all children of wheel dummies get set to inactive so activate this one wheel.gameObject.SetActive(true); _wheels.Add(inst = new Wheel { Alignment = wheelAlignment, Parent = frame.transform, Child = wheel.transform, }); } if (inst.IsLeftHand) { frame.transform.Rotate(Vector3.up, 180.0f); } inst.Complement = _wheels.FirstOrDefault(x => (x.Alignment & WheelAlignment.LeftRightMask) != (inst.Alignment & WheelAlignment.LeftRightMask) && (x.Alignment & WheelAlignment.FrontMidRearMask) == (inst.Alignment & WheelAlignment.FrontMidRearMask)); if (inst.Complement != null) { inst.Complement.Complement = inst; } } InitializePhysics(); foreach (var pair in _frames.Where(x => x.Name.StartsWith("door_"))) { var doorAlignment = GetDoorAlignment(pair.Name); if (doorAlignment == DoorAlignment.None) { continue; } var hinge = pair.gameObject.AddComponent <HingeJoint>(); hinge.axis = Vector3.up; hinge.useLimits = true; var limit = 90.0f * ((doorAlignment == DoorAlignment.LeftFront || doorAlignment == DoorAlignment.LeftRear) ? 1.0f : -1.0f); hinge.limits = new JointLimits { min = Mathf.Min(0, limit), max = Mathf.Max(0, limit), }; hinge.connectedBody = gameObject.GetComponent <Rigidbody>(); } var frontSeat = GetPart("ped_frontseat"); var backSeat = GetPart("ped_backseat"); if (frontSeat != null) { var frontSeatMirror = new GameObject("ped_frontseat").transform; frontSeatMirror.SetParent(frontSeat.parent, false); frontSeatMirror.localPosition = Vector3.Scale(frontSeat.localPosition, new Vector3(-1f, 1f, 1f)); if (frontSeat.localPosition.x > 0f) { AttachSeat(frontSeat, SeatAlignment.FrontRight); AttachSeat(frontSeatMirror, SeatAlignment.FrontLeft); } else { AttachSeat(frontSeatMirror, SeatAlignment.FrontRight); AttachSeat(frontSeat, SeatAlignment.FrontLeft); } DriverTransform = GetSeat(SeatAlignment.FrontLeft).Parent; } if (backSeat != null) { var backSeatMirror = new GameObject("ped_backseat").transform; backSeatMirror.SetParent(backSeat.parent, false); backSeatMirror.localPosition = Vector3.Scale(backSeat.localPosition, new Vector3(-1f, 1f, 1f)); if (backSeat.localPosition.x > 0f) { AttachSeat(backSeat, SeatAlignment.BackRight); AttachSeat(backSeatMirror, SeatAlignment.BackLeft); } else { AttachSeat(backSeatMirror, SeatAlignment.BackRight); AttachSeat(backSeat, SeatAlignment.BackLeft); } } // Add vehicle damage //GameObject carObject = GameObject.Find(Definition.GameName.ToLower()); //Debug.Log(gameObject.name); var dam = gameObject.AddComponent <VehicleDamage>(); dam.damageParts = new Transform[] { transform.GetChild(0).Find("engine") }; dam.deformMeshes = gameObject.GetComponentsInChildren <MeshFilter>(); dam.displaceParts = gameObject.GetComponentsInChildren <Transform>().Where(x => x.GetComponent <Frame>() != null || x.GetComponent <FrameContainer>() != null).ToArray(); dam.damageFactor = VehicleAPI.constDamageFactor; dam.collisionIgnoreHeight = -.4f; dam.collisionTimeGap = .1f; //OptimizeVehicle(); dam.deformColliders = gameObject.GetComponentsInChildren <MeshCollider>(); // Implemented: Add lights Transform headlights = this.GetComponentWithName <Transform>("headlights"), taillights = this.GetComponentWithName <Transform>("taillights"); Vehicle vh = gameObject.GetComponent <Vehicle>(); if (headlights != null) { m_frontLeftLight = VehicleAPI.SetCarLight(vh, headlights, VehicleLight.FrontLeft); m_frontRightLight = VehicleAPI.SetCarLight(vh, headlights, VehicleLight.FrontRight); } if (taillights != null) { m_rearLeftLight = VehicleAPI.SetCarLight(vh, taillights, VehicleLight.RearLeft); m_rearRightLight = VehicleAPI.SetCarLight(vh, taillights, VehicleLight.RearRight); } // Apply Light sources directionalLightsMat = Resources.Load <Material>("Materials/directionalLight"); VehicleAPI.SetLightSources(gameObject, directionalLightsMat); m_frontLeftLightOk = m_frontLeftLight != null; m_frontRightLightOk = m_frontRightLight != null; m_rearLeftLightOk = m_rearLeftLight != null; m_rearRightLightOk = m_rearRightLight != null; gameObject.SetLayerRecursive(Layer); }
private static UnityEngine.AnimationClip Convert(Clip animation, FrameContainer frames, out UVector3 rootStart, out UVector3 rootEnd) { var clip = new UnityEngine.AnimationClip(); clip.legacy = true; var rotateAxes = new[] { new { Name = "x", Mask = new UVector4(1f, 0f, 0f, 0f) }, new { Name = "y", Mask = new UVector4(0f, 1f, 0f, 0f) }, new { Name = "z", Mask = new UVector4(0f, 0f, 1f, 0f) }, new { Name = "w", Mask = new UVector4(0f, 0f, 0f, 1f) } }; var translateAxes = new[] { new { Name = "x", Mask = new UVector3(1f, 0f, 0f) }, new { Name = "y", Mask = new UVector3(0f, 1f, 0f) }, new { Name = "z", Mask = new UVector3(0f, 0f, 1f) }, }; var root = animation.Bones.FirstOrDefault(x => x.BoneId == 0); if (root != null && root.FrameCount > 0) { rootStart = Types.Convert(root.Frames.First().Translation); rootEnd = Types.Convert(root.Frames.Last().Translation); } else { rootStart = rootEnd = UVector3.zero; } foreach (var bone in animation.Bones) { var bFrames = bone.Frames; var frame = frames.GetByBoneId(bone.BoneId); string bonePath = frame.Path; var axisAngle = bFrames.ToDictionary(x => x, x => { var q = Types.Convert(x.Rotation); float ang; UnityEngine.Vector3 axis; q.ToAngleAxis(out ang, out axis); return new UVector4(q.x, q.y, q.z, q.w); }); foreach (var axis in rotateAxes) { var keys = bFrames .Select(x => new Keyframe(x.Time * TimeScale, UVector4.Dot(axisAngle[x], axis.Mask))) .ToArray(); clip.SetCurve(bonePath, typeof(Transform), "localRotation." + axis.Name, new UnityEngine.AnimationCurve(keys)); } var converted = bFrames.Select(x => Types.Convert(x.Translation)).ToArray(); if (!converted.Any(x => !x.Equals(UVector3.zero))) continue; var anyVelocities = false; var deltaVals = converted.Select((x, i) => { var prev = Math.Max(0, i - 1); var next = Math.Min(i + 1, converted.Length - 1); var prevTime = bFrames[prev].Time * TimeScale; var nextTime = bFrames[next].Time * TimeScale; return prevTime == nextTime || !(anyVelocities = true) ? UVector3.zero : (converted[next] - converted[prev]) / (nextTime - prevTime); }).ToArray(); foreach (var translateAxis in translateAxes) { var positions = bFrames .Select((x, i) => new Keyframe(x.Time * TimeScale, UVector3.Dot(frame.transform.localPosition + converted[i], translateAxis.Mask))) .ToArray(); var deltas = bFrames.Select((x, i) => new Keyframe(x.Time * TimeScale, UVector3.Dot(deltaVals[i], translateAxis.Mask))).ToArray(); clip.SetCurve(bonePath, typeof(Transform), "localPosition." + translateAxis.Name, new UnityEngine.AnimationCurve(positions)); if (!anyVelocities) continue; clip.SetCurve(bonePath, typeof(BFrame), "LocalVelocity." + translateAxis.Name, new UnityEngine.AnimationCurve(deltas)); } } clip.wrapMode = WrapMode.Loop; clip.EnsureQuaternionContinuity(); return clip; }
private static void SetColors(FrameContainer frames, int[] colors) { Vehicle.UpdateMaterials(frames, colors, new [] { 0f, 0f, 0f, 0f }, new MaterialPropertyBlock()); }
public static Animation Load(string fileName, string clipName, FrameContainer frames) { Package package = LoadPackageOnly(fileName); return(package.Load(clipName, frames)); }
/* Called when the application is started, before UI is available */ protected override void OnLaunched(LaunchActivatedEventArgs e) { #if DEBUG if (System.Diagnostics.Debugger.IsAttached) { this.DebugSettings.EnableFrameRateCounter = true; } #endif ApplicationView.TerminateAppOnFinalViewClose = false; Debug.WriteLine("OnLaunched"); FrameContainer appContainer = Window.Current.Content as FrameContainer; Frame rootFrame = null; if (appContainer != null) { AppContainer = appContainer; rootFrame = appContainer.Content as Frame; RootFrame = rootFrame; } if (appContainer == null) { appContainer = new FrameContainer(); appContainer.onApplyTemplate += this.OnAppReady; rootFrame = new Frame() { Background = null }; RootFrame = rootFrame; appContainer.Content = rootFrame; AppContainer = appContainer; // FIXME: Never change this, values higher than 0 cause system to reuse pages // which leads to handler being registered twice and other problems. rootFrame.CacheSize = 0; SuspensionManager.RegisterFrame(rootFrame, "AXEMASROOTFRAME"); if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) { this.OnAppStarting(this, null); } Window.Current.Content = appContainer; } if (rootFrame.Content == null) { if (rootFrame.ContentTransitions != null) { this.transitions = new TransitionCollection(); foreach (var c in rootFrame.ContentTransitions) { this.transitions.Add(c); } } rootFrame.ContentTransitions = null; rootFrame.Navigated += this.OnAppFirstNavigated; } // Workaround for global font setting RootFrame.FontFamily = new FontFamily("Segoe WP"); _uiDispatcher = Windows.UI.Core.CoreWindow.GetForCurrentThread().Dispatcher; this.connectivityAlert = new ProgressRingWithText(); NetworkInformation.NetworkStatusChanged += new NetworkStatusChangedEventHandler(Connection_NetworkStatusChanged); Window.Current.Activate(); }
public void GetAttributes(Frame[] frames, Animation[] animations, string code, byte[] sp12, byte[] sp34) { GlobalPalette = new GlobalColorPaletteContainer(); GlobalPalette.ToGlobalColorPaletteContainer(); Code = code; SP12 = sp12; SP34 = sp34; List <HitBox> hbs = new List <HitBox>(); List <InteractionPoint> ips = new List <InteractionPoint>(); foreach (Frame f in frames) { foreach (HitBox hb in f.HitBoxes) { if (!hbs.Contains(hb)) { hbs.Add(hb); } } foreach (InteractionPoint hb in f.InteractionPoints) { if (!ips.Contains(hb)) { ips.Add(hb); } } } Hitboxes = new HitboxContainer[hbs.Count]; int i = 0; foreach (HitBox hb in hbs) { if (hb.GetType() == typeof(RectangleHitBox)) { Hitboxes[i] = new RectangleHitboxContainer(); } else { Hitboxes[i] = new HitboxContainer(); } Hitboxes[i].ToHitboxContainer(hb); Hitboxes[i].Name = "" + i + "_" + Hitboxes[i].Name; i++; } InteractionPoints = new InteractionPointContainer[ips.Count]; i = 0; foreach (InteractionPoint hb in ips) { InteractionPoints[i] = new InteractionPointContainer(); InteractionPoints[i].ToHitboxContainer(hb); InteractionPoints[i].Name = "" + i + "_" + InteractionPoints[i].Name; i++; } Frames = new FrameContainer[frames.Length]; i = 0; foreach (Frame f in frames) { Frames[i] = new FrameContainer(); Frames[i].ToFrameContainer(f, hbs, ips); i++; } Animations = new AnimationContainer[animations.Length]; for (i = 0; i < animations.Length; i++) { Animations[i] = new AnimationContainer(); Animations[i].ToAnimationContainer(animations[i]); } }
private void Initialize(VehicleDef def, int[] colors = null) { Definition = def; if (colors != null && colors[0] != -1) { SetColors(colors); } else { var defaultClrs = CarColors.GetCarDefaults(Definition.ModelName); if (defaultClrs != null) { SetColors(defaultClrs[UnityEngine.Random.Range(0, defaultClrs.Count)]); } else { Debug.LogWarningFormat("No colours defined for {0}!", def.GameName); } } name = Definition.GameName; _geometryParts = Geometry.Load(Definition.ModelName, TextureDictionary.Load(Definition.TextureDictionaryName), TextureDictionary.Load("vehicle"), TextureDictionary.Load("misc")); _frames = _geometryParts.AttachFrames(transform, MaterialFlags.Vehicle); var wheelFrame = _frames.FirstOrDefault(x => x.Name == "wheel"); if (wheelFrame == null) { Debug.LogWarningFormat("No wheels defined for {0}!", def.GameName); Destroy(gameObject); return; } foreach (var frame in _frames) { if (!frame.Name.StartsWith("wheel_")) continue; if (!frame.Name.EndsWith("_dummy")) continue; var childFrames = _frames.Where(x => x.ParentIndex == frame.Index); // disable all children of wheel dummies foreach (var childFrame in childFrames) { childFrame.gameObject.SetActive(false); } var wheelAlignment = GetWheelAlignment(frame.Name); Wheel inst; // see if this wheel dummy has a wheel child var wheel = childFrames.FirstOrDefault(x => x.Name == "wheel"); if (wheel == null) { var copy = Instantiate(wheelFrame.transform); copy.SetParent(frame.transform, false); _wheels.Add(inst = new Wheel { Alignment = wheelAlignment, Parent = frame.transform, Child = copy, }); } else { // all children of wheel dummies get set to inactive so activate this one wheel.gameObject.SetActive(true); _wheels.Add(inst = new Wheel { Alignment = wheelAlignment, Parent = frame.transform, Child = wheel.transform, }); } if (inst.IsLeftHand) { frame.transform.Rotate(Vector3.up, 180.0f); } inst.Complement = _wheels.FirstOrDefault(x => (x.Alignment & WheelAlignment.LeftRightMask) != (inst.Alignment & WheelAlignment.LeftRightMask) && (x.Alignment & WheelAlignment.FrontMidRearMask) == (inst.Alignment & WheelAlignment.FrontMidRearMask)); if (inst.Complement != null) { inst.Complement.Complement = inst; } } InitializePhysics(); foreach (var pair in _frames.Where(x => x.Name.StartsWith("door_"))) { var doorAlignment = GetDoorAlignment(pair.Name); if (doorAlignment == DoorAlignment.None) continue; var hinge = pair.gameObject.AddComponent<HingeJoint>(); hinge.axis = Vector3.up; hinge.useLimits = true; var limit = 90.0f * ((doorAlignment == DoorAlignment.LeftFront || doorAlignment == DoorAlignment.LeftRear) ? 1.0f : -1.0f); hinge.limits = new JointLimits { min = Mathf.Min(0, limit), max = Mathf.Max(0, limit), }; hinge.connectedBody = gameObject.GetComponent<Rigidbody>(); } var frontSeat = GetPart("ped_frontseat"); var backSeat = GetPart("ped_backseat"); if (frontSeat != null) { var frontSeatMirror = new GameObject("ped_frontseat").transform; frontSeatMirror.SetParent(frontSeat.parent, false); frontSeatMirror.localPosition = Vector3.Scale(frontSeat.localPosition, new Vector3(-1f, 1f, 1f)); if (frontSeat.localPosition.x > 0f) { AttachSeat(frontSeat, SeatAlignment.FrontRight); AttachSeat(frontSeatMirror, SeatAlignment.FrontLeft); } else { AttachSeat(frontSeatMirror, SeatAlignment.FrontRight); AttachSeat(frontSeat, SeatAlignment.FrontLeft); } DriverTransform = GetSeat(SeatAlignment.FrontLeft).Parent; } if (backSeat != null) { var backSeatMirror = new GameObject("ped_backseat").transform; backSeatMirror.SetParent(backSeat.parent, false); backSeatMirror.localPosition = Vector3.Scale(backSeat.localPosition, new Vector3(-1f, 1f, 1f)); if (backSeat.localPosition.x > 0f) { AttachSeat(backSeat, SeatAlignment.BackRight); AttachSeat(backSeatMirror, SeatAlignment.BackLeft); } else { AttachSeat(backSeatMirror, SeatAlignment.BackRight); AttachSeat(backSeat, SeatAlignment.BackLeft); } } gameObject.SetLayerRecursive(Layer); }
public Animation Load(string clipName, FrameContainer frames) { if (_anims.ContainsKey(clipName)) return _anims[clipName]; var anim = new Animation(_package[clipName], frames); _anims.Add(clipName, anim); return anim; }