Пример #1
0
        protected override void Tick(GameTickEventArgs e)
        {
            if (waiting)
            {
                base.Tick(e);
                return;
            }

            foreach (var keyframe in info.KeyFrames)
            {
                if (keyframe.Frame == frame)
                {
                    if (keyframe.Fade)
                    {
                        KeyFrameInfo frameInfo = keyframe; // for closure
                        Engine.Instance.FadeTransition(() => TriggerKeyFrame(frameInfo));
                    }
                    else
                    {
                        TriggerKeyFrame(keyframe);
                    }
                }
            }

            base.Tick(e);

            frame++;

            if (frame >= info.Duration)
            {
                Finish(info.NextHandler);
            }
        }
Пример #2
0
 public ModsDemuxer(Stream Stream)
 {
     this.Stream = Stream;
     Header      = new ModsHeader(Stream);
     if (Header.AudioOffset != 0)
     {
         AudioCodebooks  = new byte[Header.NbChannel][];
         Stream.Position = Header.AudioOffset;
         for (int i = 0; i < Header.NbChannel; i++)
         {
             AudioCodebooks[i] = new byte[0xC34];
             Stream.Read(AudioCodebooks[i], 0, 0xC34);
         }
     }
     KeyFrames       = new KeyFrameInfo[Header.KeyframeCount];
     Stream.Position = Header.KeyframeIndexOffset;
     byte[] tmp = new byte[8];
     for (int i = 0; i < Header.KeyframeCount; i++)
     {
         KeyFrames[i] = new KeyFrameInfo();
         Stream.Read(tmp, 0, 8);
         KeyFrames[i].FrameNumber = IOUtil.ReadU32LE(tmp, 0);
         KeyFrames[i].DataOffset  = IOUtil.ReadU32LE(tmp, 4);
     }
     JumpToKeyFrame(0);
 }
Пример #3
0
 public ModsDemuxer(Stream Stream)
 {
     this.Stream = Stream;
     Header = new ModsHeader(Stream);
     if (Header.AudioOffset != 0)
     {
         AudioCodebooks = new byte[Header.NbChannel][];
         Stream.Position = Header.AudioOffset;
         for (int i = 0; i < Header.NbChannel; i++)
         {
             AudioCodebooks[i] = new byte[0xC34];
             Stream.Read(AudioCodebooks[i], 0, 0xC34);
         }
     }
     KeyFrames = new KeyFrameInfo[Header.KeyframeCount];
     Stream.Position = Header.KeyframeIndexOffset;
     byte[] tmp = new byte[8];
     for (int i = 0; i < Header.KeyframeCount; i++)
     {
         KeyFrames[i] = new KeyFrameInfo();
         Stream.Read(tmp, 0, 8);
         KeyFrames[i].FrameNumber = IOUtil.ReadU32LE(tmp, 0);
         KeyFrames[i].DataOffset = IOUtil.ReadU32LE(tmp, 4);
     }
     JumpToKeyFrame(0);
 }
Пример #4
0
        private void WriteKeyframe(KeyFrameInfo info, XmlWriter writer)
        {
            writer.WriteStartElement("Keyframe");

            foreach (var command in info.Commands)
            {
                _commandWriter.Write(command, writer);
            }

            writer.WriteEndElement();
        }
Пример #5
0
        private KeyFrameInfo LoadKeyFrame(XElement node, string basePath)
        {
            var info = new KeyFrameInfo();

            info.Frame = node.GetAttribute<int>("frame");

            info.Fade = node.TryAttribute<bool>("fade");

            info.Commands = _commandReader.LoadCommands(node, basePath);

            return info;
        }
Пример #6
0
        private KeyFrameInfo LoadKeyFrame(XElement node, string basePath)
        {
            var info = new KeyFrameInfo();

            info.Frame = node.GetAttribute <int>("frame");

            info.Fade = node.TryAttribute <bool>("fade");

            info.Commands = _commandReader.LoadCommands(node, basePath);

            return(info);
        }
Пример #7
0
 public VxDemuxer(Stream Stream)
 {
     this.Stream     = Stream;
     Header          = new VxHeader(Stream);
     KeyFrames       = new KeyFrameInfo[Header.KeyframeCount];
     Stream.Position = Header.KeyframeIndexOffset;
     byte[] tmp = new byte[8];
     for (int i = 0; i < Header.KeyframeCount; i++)
     {
         KeyFrames[i] = new KeyFrameInfo();
         Stream.Read(tmp, 0, 8);
         KeyFrames[i].FrameNumber = IOUtil.ReadU32LE(tmp, 0);
         KeyFrames[i].DataOffset  = IOUtil.ReadU32LE(tmp, 4);
     }
     JumpToKeyFrame(0);
 }
    //! return end stop position
    public KeyFrameInfo StopTrack(string trackName)
    {
        KeyFrameInfo t_endPos = null;

        CameraTrack track = null;

        if (_mCamTrackList.TryGetValue(trackName, out track))
        {
            t_endPos = track.Stop();

            _mCamTrackList.Remove(trackName);
            GameObject.Destroy(track.gameObject);
        }

        return(t_endPos);
    }
Пример #9
0
 public VxDemuxer(Stream Stream)
 {
     this.Stream = Stream;
     Header = new VxHeader(Stream);
     KeyFrames = new KeyFrameInfo[Header.KeyframeCount];
     Stream.Position = Header.KeyframeIndexOffset;
     byte[] tmp = new byte[8];
     for (int i = 0; i < Header.KeyframeCount; i++)
     {
         KeyFrames[i] = new KeyFrameInfo();
         Stream.Read(tmp, 0, 8);
         KeyFrames[i].FrameNumber = IOUtil.ReadU32LE(tmp, 0);
         KeyFrames[i].DataOffset = IOUtil.ReadU32LE(tmp, 4);
     }
     JumpToKeyFrame(0);
 }
Пример #10
0
    /**
     *	by lsj for the case of port defense battle
     */
    public virtual void InitBattleData()
    {
        GUIRadarScan.Hide();

        // !!!! follow 3 function order can't be changed !!!!
        InitCameraPos();
        BeginBattleLogic();
        PlayBattleCameraTrack();

        // tzz added for create the selected prefab effection
        //
        if (m_battleSelectedPrefab != null)
        {
            GameObject.Destroy(m_battleSelectedPrefab);
        }

        Object t_obj = Resources.Load(BattleShipSelectedPrefab);

        m_battleSelectedPrefab = GameObject.Instantiate(t_obj) as GameObject;
        m_battleSelectedPrefab.SetActiveRecursively(false);

        GameObject.DontDestroyOnLoad(m_battleSelectedPrefab);

        // start create
        // Add Finger event
        Globals.Instance.MFingerEvent.Add3DEventListener(this);
        this.SetFingerEventActive(true);

        // Add sneak attack effect
        if (_battleResult.SneakAttackType != GameData.BattleGameData.SneakAttackType.FACE_ATTACK)
        {
            Globals.Instance.M3DItemManager.PlaySneakEffect(_battleResult, null);
        }

        if (CustomCameraState)
        {
            Globals.Instance.MCamTrackController.StopTrack(FightCameraTrack);

            KeyFrameInfo[] t_cameraInfo = m_battleCameraTrack.keyFrameInfos;
            KeyFrameInfo   t_endPos     = t_cameraInfo[t_cameraInfo.Length - 1];

            CameraTrack.ITweenMoveTo(Globals.Instance.MSceneManager.mMainCamera.gameObject, t_endPos, null, 1.0f);
        }


        _mBattleState = EBattleState.DO_STEP;
    }
Пример #11
0
        private static void InsertKeyFrames(int width, int height, List <TrackInfo> tracks, decimal currentTime, decimal baseScale,
                                            int targetX, int targetY, decimal paddingScale)
        {
            var numberOfTracksSqrt = (decimal)Math.Sqrt(tracks.Count);

            foreach (var ti in tracks)
            {
                var kf = new KeyFrameInfo();
                kf.Time         = currentTime;            //DurationPerStop * (currentKF - 1d);
                kf.Width        = width * paddingScale;   //baseScale * paddingScale;
                kf.Height       = height * paddingScale;  //baseScale * paddingScale;
                kf.PanX         = (ti.OffsetX - targetX); // paddingScale;
                kf.PanY         = (ti.OffsetY - targetY); // paddingScale;
                kf.PanZ         = numberOfTracksSqrt * 2250 * baseScale / paddingScale;
                kf.KeyframeType = VideoKeyframeType.Slow;
                ti.KeyFrames.Add(kf);
            }
        }
Пример #12
0
    void Awake()
    {
        if (null == keyFrameInfos)
        {
            keyFrameInfos = new KeyFrameInfo[0];
        }

        // tzz f****d
        // this CameraTrack will reuse in CameraTrackController so this function will call more than one time
        // must backup the original position
        foreach (KeyFrameInfo info in keyFrameInfos)
        {
            info.PositionBackup = info.Position;
        }

        // if (null == targetGameObj)
        targetGameObj = Globals.Instance.MSceneManager.mMainCamera.gameObject;

        currentIndex   = 0;
        isTrackEnalbed = true;
    }
Пример #13
0
        public static List <TrackInfo> BuildWall(int width, int height, WallBuilderConfiguration configData)
        {
            var delay                 = (decimal)configData.DelayBeforeFirstZoom;
            var columns               = configData.Columns;
            var rows                  = configData.Rows;
            var durationPerFrame      = (decimal)configData.DurationPerFrame;
            var durationBetweenFrames = (decimal)configData.DurationBetweenFrames;
            var padding               = 100;

            var totalCells = columns * rows;
            //var Duration = totalCells * durationPerFrame + totalCells * durationBetweenFrames + durationBetweenFrames;

            var gridX = columns;
            var gridY = rows;

            var maxWidth  = width * gridX;
            var maxHeight = height * gridY;

            var tracks = new List <TrackInfo>();

            for (var x = 0; x < gridX; x++)
            {
                for (var y = 0; y < gridY; y++)
                {
                    var idx = x * gridX + y;
                    var ti  = new TrackInfo();
                    ti.Number  = idx + 1;
                    ti.OffsetX = (width * x);
                    ti.OffsetY = (height * y);
                    tracks.Add(ti);
                }
            }

            var totalKeyFrames = totalCells * 2 + 1;

            var centerX = maxWidth / 2;
            var centerY = maxHeight / 2;

            if (configData.Randomize)
            {
                ListHelpers.Shuffle(tracks, new Random(),
                                    info => { info.NewItem.Number = info.Index + 1; });
            }

            var currentTime     = delay;
            var paddingScale    = (1 - configData.Padding);
            var globalZoomLimit = (1 - configData.ZoomOffset);

            for (var currentKf = 1; currentKf < totalKeyFrames + 1; currentKf++)
            {
                if (currentKf != 0 && currentKf % 2 == 0)
                {
                    //this is a closeup
                    var currentCell  = currentKf / 2;
                    var currentTrack = tracks[currentCell - 1];
                    var targetX      = currentTrack.OffsetX;
                    var targetY      = currentTrack.OffsetY;

                    foreach (var ti in tracks)
                    {
                        var kf = new KeyFrameInfo();
                        kf.Time         = currentTime;
                        kf.PanX         = (ti.OffsetX - targetX); //*globalZoomLimit;
                        kf.PanY         = (ti.OffsetY - targetY); //*globalZoomLimit;
                        kf.Width        = width * paddingScale;   //*globalZoomLimit;
                        kf.Height       = height * paddingScale;  //*globalZoomLimit;
                        kf.KeyframeType = VideoKeyframeType.Smooth;
                        kf.PanZ         = 1000 * globalZoomLimit;
                        ti.KeyFrames.Add(kf);

                        var easing = 1.05m;
                        kf              = new KeyFrameInfo();
                        kf.Time         = currentTime + durationPerFrame / 2;
                        kf.PanX         = (ti.OffsetX - targetX); // * globalZoomLimit * easing;
                        kf.PanY         = (ti.OffsetY - targetY); // * globalZoomLimit * easing;
                        kf.Width        = width * paddingScale;   //*globalZoomLimit* easing;
                        kf.Height       = height * paddingScale;  //*globalZoomLimit* easing;
                        kf.KeyframeType = VideoKeyframeType.Smooth;
                        kf.PanZ         = 1000 * globalZoomLimit * easing;
                        ti.KeyFrames.Add(kf);

                        kf              = new KeyFrameInfo();
                        kf.Time         = currentTime + durationPerFrame;
                        kf.PanX         = (ti.OffsetX - targetX); //*globalZoomLimit;
                        kf.PanY         = (ti.OffsetY - targetY); //*globalZoomLimit;
                        kf.Width        = width * paddingScale;   //*globalZoomLimit;
                        kf.Height       = height * paddingScale;  //*globalZoomLimit;
                        kf.KeyframeType = VideoKeyframeType.Slow;
                        kf.PanZ         = 1000 * globalZoomLimit;
                        ti.KeyFrames.Add(kf);
                    }

                    currentTime += durationPerFrame;
                }
                else
                {
                    var targetX = 0;
                    var targetY = 0;

                    var baseScale         = Math.Min(1m / gridX, 1m / gridY);
                    var postframeTimeStep = durationBetweenFrames;

                    if (currentKf < 2 || currentKf > totalKeyFrames - 2)
                    {
                        //this is a full shot

                        targetX = centerX - width / 2;
                        targetY = centerY - height / 2;
                    }
                    else
                    {
                        //transitional shot

                        var previousCell  = (currentKf - 1) / 2;
                        var nextCell      = (currentKf + 1) / 2;
                        var previousTrack = tracks[previousCell - 1];
                        var nextTrack     = tracks[nextCell - 1];

                        targetX = previousTrack.OffsetX - (previousTrack.OffsetX - nextTrack.OffsetX) / 2;
                        targetY = previousTrack.OffsetY - (previousTrack.OffsetY - nextTrack.OffsetY) / 2;

                        decimal widthDiff   = Math.Abs(previousTrack.OffsetX - nextTrack.OffsetX) + width;
                        decimal heightDiff  = Math.Abs(previousTrack.OffsetY - nextTrack.OffsetY) + height;
                        var     scaleFactor = Math.Min(widthDiff / width, heightDiff / height);
                        baseScale = baseScale * scaleFactor;

                        currentTime += postframeTimeStep = durationBetweenFrames / 2;
                    }

                    if (currentKf == 1 && currentTime != 0)
                    {
                        InsertKeyFrames(width, height, tracks, 0, baseScale, targetX, targetY, paddingScale);
                    }

                    InsertKeyFrames(width, height, tracks, currentTime, baseScale, targetX, targetY, paddingScale);

                    currentTime += postframeTimeStep;
                }
            }

            return(tracks);
        }
Пример #14
0
 private void TriggerKeyFrame(KeyFrameInfo info)
 {
     RunCommands(info.Commands);
 }
Пример #15
0
 private void TriggerKeyFrame(KeyFrameInfo info)
 {
     RunCommands(info.Commands);
 }
Пример #16
0
        private static TrackMotionKeyframe SelectOrInsertKeyFrame(VideoTrack videoTrack, KeyFrameInfo kf)
        {
            if (kf.Time == 0)
            {
                var mkf = videoTrack.TrackMotion.MotionKeyframes[0];
                if (mkf.Position.FrameCount > 0)
                {
                    mkf.Position = new Timecode((double)kf.Time * 1000);
                }
                return(mkf);
            }

            return(videoTrack.TrackMotion.InsertMotionKeyframe(new Timecode((double)kf.Time * 1000)));
        }
Пример #17
0
 //! tzz added for camera move
 public static void ITweenMoveTo(GameObject _obj, KeyFrameInfo _keyInfo, iTween.EventDelegate complete, float time)
 {
     iTween.MoveTo(_obj, iTween.Hash("position", _keyInfo.Position, "time", time, "delay", _keyInfo.DelayTime, "easetype", iTween.EaseType.easeInOutSine),
                   null, complete);
     iTween.RotateTo(_obj, iTween.Hash("rotation", _keyInfo.EulerAngles, "time", time, "delay", _keyInfo.DelayTime, "easetype", iTween.EaseType.easeInOutSine));
 }
Пример #18
0
 private void ITweenMoveTo(KeyFrameInfo _keyInfo, iTween.EventDelegate complete)
 {
     ITweenMoveTo(targetGameObj, _keyInfo, complete, _keyInfo.TransformTime);
 }