예제 #1
0
        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;
        }
예제 #2
0
    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;
        }
예제 #4
0
        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: Здесь супер функция по отрисовке всех из-а для этого
                }
            }
        }
예제 #5
0
    // 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;
        }
예제 #7
0
        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;
        }
예제 #8
0
        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;
        }
예제 #10
0
            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);
            }
예제 #11
0
        static void Main(string[] args)
        {
            if (args.Length < 2)
            {
                Usage();
                return;
            }
            FrameContainer container = ContainerLoader.FromFile(args[0]);

            File.WriteAllBytes(args[1], container.Image.Array);
        }
예제 #12
0
        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);
        }
예제 #13
0
//		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);
            }
        }
예제 #14
0
        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;
        }
예제 #15
0
        // 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));
        }
예제 #16
0
        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;
        }
예제 #19
0
    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());
    }
예제 #20
0
        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;
        }
예제 #21
0
        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);
        }
예제 #22
0
        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();
        }
예제 #23
0
 public Editor(Page page)
 {
     InitializeComponent();
     FrameContainer.Navigate(page);
 }
예제 #24
0
 private Animation(Clip anim, FrameContainer frames)
 {
     _clip = Convert(anim, frames, out _rootStart, out _rootEnd);
 }
예제 #25
0
        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");
        }
예제 #26
0
        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();
        }
예제 #27
0
        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);
        }
예제 #28
0
        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);
        }
예제 #29
0
        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;
        }
예제 #30
0
 private static void SetColors(FrameContainer frames, int[] colors)
 {
     Vehicle.UpdateMaterials(frames, colors, new [] { 0f, 0f, 0f, 0f }, new MaterialPropertyBlock());
 }
예제 #31
0
        public static Animation Load(string fileName, string clipName, FrameContainer frames)
        {
            Package package = LoadPackageOnly(fileName);

            return(package.Load(clipName, frames));
        }
예제 #32
0
 private Animation(Clip anim, FrameContainer frames)
 {
     _clip = Convert(anim, frames, out _rootStart, out _rootEnd);
 }
예제 #33
0
        /* 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();
        }
예제 #34
0
        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);
        }
예제 #36
0
 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;
 }