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); } }
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); }
private void WriteKeyframe(KeyFrameInfo info, XmlWriter writer) { writer.WriteStartElement("Keyframe"); foreach (var command in info.Commands) { _commandWriter.Write(command, writer); } writer.WriteEndElement(); }
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; }
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); }
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); }
/** * 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; }
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); } }
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; }
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); }
private void TriggerKeyFrame(KeyFrameInfo info) { RunCommands(info.Commands); }
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))); }
//! 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)); }
private void ITweenMoveTo(KeyFrameInfo _keyInfo, iTween.EventDelegate complete) { ITweenMoveTo(targetGameObj, _keyInfo, complete, _keyInfo.TransformTime); }