Exemple #1
0
        void IStateModifier.ModifyWith(object targ, StateToken token)
        {
            var cam = ComponentUtil.GetComponentFromSource <Camera>(targ);

            if (cam == null)
            {
                return;
            }

            token.CopyTo(cam);
        }
Exemple #2
0
        void IStateModifier.Modify(object targ)
        {
            var cam = ComponentUtil.GetComponentFromSource <Camera>(targ);

            if (cam == null)
            {
                return;
            }

            _cameraSettings.CopyTo(cam);
        }
Exemple #3
0
        void IStateModifier.ModifyWith(object targ, object source)
        {
            var cam = ComponentUtil.GetComponentFromSource <Camera>(targ);

            if (cam == null)
            {
                return;
            }

            DynamicUtil.CopyState(cam, source);
        }
Exemple #4
0
        void IPersistantUnityObject.OnDeserialize(SerializationInfo info, StreamingContext context, IAssetBundle assetBundle)
        {
            this.transform.position   = (Vector3)info.GetValue("pos", typeof(Vector3));
            this.transform.rotation   = (Quaternion)info.GetValue("rot", typeof(Quaternion));
            this.transform.localScale = (Vector3)info.GetValue("scale", typeof(Vector3));

            int cnt = info.GetInt32("count");

            for (int i = 0; i < cnt; i++)
            {
                ChildObjectData data = (ChildObjectData)info.GetValue(i.ToString(), typeof(ChildObjectData));
                if (data != null && data.ComponentType != null)
                {
                    IPersistantUnityObject pobj = ComponentUtil.GetComponentFromSource(data.ComponentType, (data.Path != null) ? this.transform.Find(data.Path) : this.transform) as IPersistantUnityObject;
                    if (pobj != null)
                    {
                        pobj.OnDeserialize(data.DeserializeInfo, data.DeserializeContext, assetBundle);
                    }
                }
            }
        }
Exemple #5
0
        public void LerpToTarget(object targ, float t, float lerpT)
        {
            if (_dur == 0f)
            {
                t = 1f;
            }
            else
            {
                t = t / _dur;
            }

            if (_updateTranslation > TranslationOptions.None || _updateRotation >= RotationOptions.Heading)
            {
                var trans = GameObjectUtil.GetTransformFromSource(targ);
                if (trans != null)
                {
                    if (_updateRotation == RotationOptions.Heading)
                    {
                        var wp = _path.Path.GetWaypointAt(t);
                        this.SetPosition(trans, wp.Position, float.NaN);
                        this.SetRotation(trans, Quaternion.LookRotation(wp.Heading), lerpT);
                    }
                    else if (_updateTranslation > TranslationOptions.None)
                    {
                        this.SetPosition(trans, _path.Path.GetPositionAt(t), lerpT);
                    }
                }
            }

            bool useModifiers = (_modifierTable != null && _modifierTable.Count > 0);

            if (useModifiers || _updateRotation == RotationOptions.Rotation || _updateRotation == RotationOptions.LocalRotation)
            {
                var data = _path.Path.GetRelativePositionData(t);

                var cnt = _path.Path.Count;
                int i   = data.Index;
                int j   = (_path.Path.IsClosed) ? (i + 1) % cnt : i + 1;

                if (_updateRotation == RotationOptions.Rotation || _updateRotation == RotationOptions.LocalRotation)
                {
                    var trans = GameObjectUtil.GetTransformFromSource(targ);
                    if (trans != null)
                    {
                        var a = (i >= 0 && i < cnt) ? ComponentUtil.GetComponentFromSource <Transform>(_path.Path.ControlPoint(i)) : null;
                        var b = (j >= 0 && j < cnt) ? ComponentUtil.GetComponentFromSource <Transform>(_path.Path.ControlPoint(j)) : null;

                        if (a != null)
                        {
                            bool useRelative = _path.TransformRelativeTo != null;
                            var  r           = (useRelative) ? a.GetRelativeRotation(_path.TransformRelativeTo) : a.rotation;
                            if (b != null)
                            {
                                var rb = (useRelative) ? b.GetRelativeRotation(_path.TransformRelativeTo) : b.rotation;
                                r = Quaternion.LerpUnclamped(r, rb, data.TPrime);
                            }
                            this.SetRotation(trans, r, lerpT);
                        }
                    }
                }

                if (useModifiers)
                {
                    var e = _modifierTable.GetEnumerator();
                    while (e.MoveNext())
                    {
                        var len = e.Current.Value.Length;
                        var ma  = (i >= 0 && i < len) ? e.Current.Value[i] : null;
                        var mb  = (j >= 0 && j < len) ? e.Current.Value[j] : null;

                        if (float.IsNaN(lerpT))
                        {
                            if (ma != null)
                            {
                                if (mb != null)
                                {
                                    using (var state = StateToken.GetToken())
                                    {
                                        ma.CopyTo(state);
                                        mb.LerpTo(state, data.TPrime);
                                        ma.ModifyWith(targ, state);
                                    }
                                }
                                else
                                {
                                    ma.Modify(targ);
                                }
                            }
                            else if (mb != null)
                            {
                                mb.Modify(targ);
                            }
                        }
                        else
                        {
                            using (var curState = StateToken.GetToken())
                                using (var state = StateToken.GetToken())
                                {
                                    IStateModifier m = null;
                                    if (ma != null)
                                    {
                                        m = ma;
                                        if (mb != null)
                                        {
                                            ma.CopyTo(state);
                                            mb.LerpTo(state, data.TPrime);
                                        }
                                        else
                                        {
                                            ma.CopyTo(state);
                                        }
                                    }
                                    else if (mb != null)
                                    {
                                        m = mb;
                                        mb.CopyTo(state);
                                    }

                                    if (m != null)
                                    {
                                        state.CopyTo(curState);
                                        curState.SyncFrom(targ);
                                        curState.LerpTo(state, lerpT);
                                        m.ModifyWith(state, curState);
                                    }
                                }
                        }
                    }
                }
            }
        }