public void setExpRatio(float targetRatio) { targetRatio = Mathf.Clamp(targetRatio, 0.0f, 1.0f); float lastRatio = _keys.Count == 0 ? _curRatio : _keys[_keys.Count - 1].value; float intPartOfRatio = Mathf.Floor(lastRatio); float fractPartOfRatio = lastRatio - intPartOfRatio; FrameKey key = new FrameKey(); if (targetRatio < fractPartOfRatio) { key.value = intPartOfRatio + 1.0f + targetRatio; } else { key.value = intPartOfRatio + targetRatio; } int preKeyCount = _keys.Count; _keys.Add(key); if (0 == preKeyCount) { StartCoroutine("startAnimation"); } }
public void GoBack(FrameKey framekey, bool recursive = false) { if (FrameDictionary.ContainsKey(framekey)) if (recursive) while (FrameDictionary[framekey].CanGoBack) FrameDictionary[framekey].GoBack(); else FrameDictionary[framekey].GoBack(); }
/// <summary> /// Insert a new frame to the frame store. /// </summary> /// <param name="client">The client used to insert the frame to the store.</param> /// <param name="frame"></param> /// <param name="bytes"></param> /// <param name="address"></param> /// <param name="frameFlowKey"></param> /// <returns></returns> private unsafe void InsertFrame(RawFramesStore.ClientSession client, ref FrameKey frameKey, ref FlowKey frameFlowKey, ref FrameMetadata frameMetadata, Span <byte> frameBytes) { var bufferSize = Unsafe.SizeOf <FrameMetadata>() + frameBytes.Length; if (bufferSize < 128) { var bufferPtr = stackalloc byte[bufferSize]; var frameValue = new Span <byte>(bufferPtr, bufferSize); Unsafe.Copy(bufferPtr, ref frameMetadata); frameBytes.CopyTo(frameValue[Unsafe.SizeOf <FrameMetadata>()..]);
public void Configure(FrameKey framekey, Frame frame) { if (!FrameDictionary.ContainsKey(framekey)) FrameDictionary.Add(framekey, frame); else FrameDictionary[framekey] = frame; if (framekey == FrameKey.MainFrame) { MainFrame = frame; frame.Navigated += MainFrame_Navigated; } }
private async Task ProcessFile(IIgnite client, FileInfo fileInfo, FastPcapFileReaderDevice device) { device.Open(); var frameKeyProvider = new FrameKeyProvider(); var cache = CacheFactory.GetOrCreateFrameCache(client, FrameCacheName ?? fileInfo.Name); using (var dataStreamer = client.GetDataStreamer <FrameKey, FrameData>(cache.Name)) { var frameIndex = 0; var frameArray = new KeyValuePair <FrameKey, FrameData> [ChunkSize]; var cacheStoreTask = Task.CompletedTask; var currentChunkBytes = 0; var currentChunkNumber = 0; RawCapture rawCapture = null; while ((rawCapture = device.GetNextPacket()) != null) { currentChunkBytes += rawCapture.Data.Length + 4 * sizeof(int); var frame = new FrameData { LinkLayer = (LinkLayerType)rawCapture.LinkLayerType, Timestamp = rawCapture.Timeval.ToUnixTimeMilliseconds(), Data = rawCapture.Data }; var frameKey = new FrameKey(frameIndex, frameKeyProvider.GetKeyHash(frame)); frameArray[frameIndex % ChunkSize] = KeyValuePair.Create(frameKey, frame); // Is CHUNK full? if (frameIndex % ChunkSize == ChunkSize - 1) { OnChunkLoaded?.Invoke(this, currentChunkNumber, currentChunkBytes); cacheStoreTask = cacheStoreTask.ContinueWith(CreateStoreAction(dataStreamer, frameArray, ChunkSize, currentChunkNumber, currentChunkBytes)); currentChunkNumber++; currentChunkBytes = 0; } frameIndex++; } OnChunkLoaded?.Invoke(this, currentChunkNumber, currentChunkBytes); cacheStoreTask = cacheStoreTask.ContinueWith(CreateStoreAction(dataStreamer, frameArray, frameIndex % ChunkSize, currentChunkNumber, currentChunkBytes)); await cacheStoreTask; dataStreamer.Flush(); //dataStreamer.Close(false); // HACK: causes Exception in JVM.DLL } device.Close(); }
void Generate() { void onNextFrame(ref ulong key, ref SpanByte value) { FrameKey frameKey = new FrameKey(key); FrameMetadata frameMetadata = default; var frameBytes = FrameMetadata.FromBytes(value.AsSpan(), ref frameMetadata); _observer.OnNext(_processor(ref frameKey, ref frameMetadata, frameBytes)); } _framesStore.ProcessEntries(onNextFrame, _cancel.Token); _observer.OnCompleted(); }
/// <summary> /// Sets the animation frame /// </summary> /// <param name="frameKey">sets which frame should start</param> public void SetAnimationFrame(FrameKey frameKey) { switch (frameKey) { case FrameKey.Idle: CurrentFrame = Idle; break; case FrameKey.RightFoot: CurrentFrame = RightFoot; break; default: CurrentFrame = LeftFoot; break; } CurrentFrameKey = frameKey; }
/// <summary> /// Inserts a frame to the table doing all necessary processing. /// <para> /// While <see cref="RawFrame"/> object can contain byte array in <see cref="RawFrame.Data"/> field /// this method uses separate parameter <paramref name="frameBytes"/> to provide frame bytes. /// This parameter, however, can refer to <see cref="RawFrame.Data"/> bytes. /// </para> /// </summary> /// <param name="frame">The raw frame object.</param> /// <param name="frameNumber">The frame number.</param> /// <exception cref="InvalidOperationException">Raises when the stremer is closed.</exception> public void AddFrame(RawCapture frame) { if (_closed) { throw new InvalidOperationException("Cannot add new data. The stream is closed."); } var frameFlowKey = _table.GetFlowKey(frame.LinkLayerType, frame.Data); var frameMeta = GetFrameMetadata(frame, frameFlowKey); // stack allocated struct var frameKey = new FrameKey(frameMeta.Ticks, (uint)_table._framesCount); _table.InsertFrame(_framesStoreClient, ref frameKey, ref frameFlowKey, ref frameMeta, frame.Data); _outstandingRequests++; if (_outstandingRequests > _autoFlushRecordCount) { CompletePending(); } }
private async Task ProcessFile(IIgnite client, FileInfo fileInfo, FastPcapFileReaderDevice device) { device.Open(); var frameKeyProvider = new FrameKeyProvider(); var cache = CacheFactory.GetOrCreateFrameCache(client, FrameCacheName ?? fileInfo.Name); RawCapture rawCapture = null; var frameIndex = 0; var currentChunkBytes = 0; var currentChunkNumber = 0; while ((rawCapture = device.GetNextPacket()) != null) { currentChunkBytes += rawCapture.Data.Length + 4 * sizeof(int); var frame = new FrameData { LinkLayer = (LinkLayerType)rawCapture.LinkLayerType, Timestamp = rawCapture.Timeval.ToUnixTimeMilliseconds(), Data = rawCapture.Data }; var frameKey = new FrameKey(frameIndex, frameKeyProvider.GetKeyHash(frame)); var storedFrame = await cache.GetAsync(frameKey); if (storedFrame == null) { OnErrorFrameOccured(fileInfo, frameIndex, null); } if (storedFrame != null && frame.Timestamp != storedFrame.Timestamp) { OnErrorFrameOccured(fileInfo, frameIndex, storedFrame); } if (frameIndex % ChunkSize == ChunkSize - 1) { OnChunkLoaded(currentChunkNumber, currentChunkBytes); OnChunkStored(currentChunkNumber, currentChunkBytes); currentChunkNumber++; currentChunkBytes = 0; } frameIndex++; } device.Close(); }
IEnumerator startAnimation() { while (_curKeyIndex < _keys.Count) { FrameKey curKey = _keys[_curKeyIndex]; if (_curRatio >= curKey.value) { ++_curKeyIndex; } _curRatio += Time.deltaTime * _speed; updateWidth(); yield return(null); } _curRatio = _keys[_keys.Count - 1].value; _keys.Clear(); _curKeyIndex = 0; updateWidth(); }
/// <summary> /// 初始化 /// </summary> /// <param name="client">帧同步客户端对象</param> /// <param name="maxClient">最大客户端数</param> public void Init(FSClient client, int maxClient) { this.client = client; timer = new Timer(FSClient.deltaTime.ToFloat() * 1000); timer.AutoReset = true; timer.Elapsed += SendClientFrame; timer.Enabled = true; _m_serverStep = 0; _m_clientStep = 0; _m_inputs = new InputUnit[maxClient + 1]; joySticks = new Dictionary <KeyNum, JoyStickKey>(); sendKey = new FrameKey(); for (int i = 0; i < maxClient + 1; i++) { _m_inputs[i] = new InputUnit(); _m_inputs[i].Init(); } }
public bool FrameAvailable(FrameKey framekey) { return FrameDictionary.ContainsKey(framekey); }
public (long Ticks, TValue Value) Invoke(ref FrameKey frameKey, ref FrameMetadata frameMetadata, Span <byte> frameBytes) { return(frameMetadata.Ticks, processor(ref frameKey, ref frameMetadata, frameBytes)); }
/// <summary> /// Sets current animation frame /// </summary> /// <param name="frameKey">what frame you want to set</param> public void SetCurrentAnimationFrame(FrameKey frameKey) { ((PlayerAnimation)Animations[CurrentAnimation]).SetAnimationFrame(frameKey); }
public static Packet FrameProcessor(ref FrameKey frameKey, ref FrameMetadata frameMetadata, Span <byte> frameBytes) { return(Packet.ParsePacket((LinkLayers)frameMetadata.LinkLayer, frameBytes.ToArray())); }
public void ClearCache(FrameKey framekey) { var size = FrameDictionary[framekey].CacheSize; FrameDictionary[framekey].CacheSize = 0; FrameDictionary[framekey].CacheSize = size; }
public Frame GetFrame(FrameKey framekey) { if (FrameDictionary.ContainsKey(framekey)) return FrameDictionary[framekey]; return null; }
public bool CanGoBack(FrameKey framekey) { if (FrameDictionary.ContainsKey(framekey)) return FrameDictionary[framekey].CanGoBack; return true; }
/// <summary> /// Starts the game /// </summary> /// <param name="gameTime">provides a snapshot of the gametime</param> public void PlayGame(GameTime gameTime) { switch (_textDisplayState) { case TextDisplayState.TextDisplaying: DisplayText(gameTime); break; } PreviousMoveState = moveState; moveState = MoveState; if (PreviousMoveState != moveState) if (moveState == MoveState.Still) _encounterChecked = false; var motion = new Vector2(); // Get input if the Player is not already moving if (MoveState == MoveState.Still) { // Pause if (InputHandler.ActionKeyPressed(ActionKey.Pause, PlayerIndex.One)) _gameState = GameState.Paused; // DEBUG // Start combat if (InputHandler.ActionKeyPressed(ActionKey.Back, PlayerIndex.One)) { DataManager.RandomWildPokemon(); _gameRef.BattleScreen.InitializeBattle(DataManager.Trainers["Trond"], DataManager.Trainers["Tall Grass"]); } //If last movement brought you onto a trigger tile if (_collision == CollisionType.TrainerTriggerBush) GamePlayScreen.Trainers["Sabrina"].TriggerTrainer(AnimationKey.Right); else if (_collision == CollisionType.TrainerTrigger) GamePlayScreen.Trainers["Giovanni"].TriggerTrainer(AnimationKey.Right); else if (_collision == CollisionType.HealingHerb && InputHandler.ActionKeyPressed(ActionKey.ConfirmAndInteract, PlayerIndex.One) && !_justConfirmedPrompt) { foreach (var pokemonNr in PlayerTrainer.PokemonSet) pokemonNr.FullRestore(); TextPanel.BattleText.FirstLine = "Your pokemon ate some herbs."; TextPanel.BattleText.SecondLine = "They feel healthy!"; MoveState = MoveState.Frozen; _textDisplayState = TextDisplayState.TextDisplaying; } //Decides when to encounter wild pokemon else if (_collision == CollisionType.Bush && !_encounterChecked) { _encounterChecked = true; var rand = new Random(); int tau = rand.Next(200); //Console.WriteLine(tau); if (tau < 18) { DataManager.RandomWildPokemon(); _gameRef.BattleScreen.InitializeBattle(DataManager.Trainers["Trond"], DataManager.Trainers["Tall Grass"]); return; } } _justConfirmedPrompt = false; // Check for sprint if (InputHandler.ActionKeyDown(ActionKey.Sprint, PlayerIndex.One)) { _framesPerMovement = FramesPerMovement / 2; } else { _framesPerMovement = FramesPerMovement; } // Check for EnemyTrainer if (InputHandler.ActionKeyPressed(ActionKey.ConfirmAndInteract, PlayerIndex.One)) { var checkPoint = new Vector2(Sprite.Position.X + (float)Sprite.Width / 2 + _movementVector.X * Sprite.Speed, Sprite.Position.Y + (float)Sprite.Height / 2 * 1.5f + _movementVector.Y * Sprite.Speed); // Check for EnemyTrainer _map.CheckForCollisions(checkPoint, ref _encounteredEnemyTrainer); if (_encounteredEnemyTrainer != null && _encounteredEnemyTrainer.CurrentState != EnemyTrainerState.BattleFinished) _encounteredEnemyTrainer.TriggerTrainer(Sprite.CurrentAnimation); } else if (InputHandler.ActionKeyDown(ActionKey.Up, PlayerIndex.One)) { Sprite.CurrentAnimation = AnimationKey.Up; motion.Y = -1; _movementVector = motion; } else if (InputHandler.ActionKeyDown(ActionKey.Down, PlayerIndex.One)) { Sprite.CurrentAnimation = AnimationKey.Down; motion.Y = 1; _movementVector = motion; } else if (InputHandler.ActionKeyDown(ActionKey.Left, PlayerIndex.One)) { Sprite.CurrentAnimation = AnimationKey.Left; motion.X = -1; _movementVector = motion; } else if (InputHandler.ActionKeyDown(ActionKey.Right, PlayerIndex.One)) { Sprite.CurrentAnimation = AnimationKey.Right; motion.X = 1; _movementVector = motion; } else if (_movementJustFinished) { _movementJustFinished = false; Sprite.SetCurrentAnimationFrame(FrameKey.Idle); } } // If the player moves in a new direction if (Sprite.CurrentAnimation != _previousMovementDirection && _collision == CollisionType.Unwalkable) _collision = CollisionType.Walkable; // If the player is not already moving AND the player has initiated movement AND didn't previously try to move onto an unwalkable tile if (MoveState == MoveState.Still && motion != Vector2.Zero && _collision != CollisionType.Unwalkable) { var checkPoint = new Vector2(Sprite.Position.X + (float)Sprite.Width / 2 + motion.X * Sprite.Speed, Sprite.Position.Y + (float)Sprite.Height / 2 * 1.5f + motion.Y * Sprite.Speed); // Check for collisions _collision = _map.CheckForCollisions(checkPoint, ref _encounteredEnemyTrainer); if (_collision != CollisionType.Unwalkable) { MoveState = MoveState.Moving; Sprite.IsAnimating = true; } else { _previousMovementDirection = Sprite.CurrentAnimation; } } // Process movement if movement is initiated if (MoveState == MoveState.Moving) { // FIRST FRAME: Proceed to the next animation frame if (_frameCounter == 0) { if (_lastFoot == FrameKey.RightFoot) { Sprite.SetCurrentAnimationFrame(FrameKey.LeftFoot); _lastFoot = FrameKey.LeftFoot; } else { Sprite.SetCurrentAnimationFrame(FrameKey.RightFoot); _lastFoot = FrameKey.RightFoot; } } // Increment the frame counter _frameCounter++; // Update the position of the sprite Sprite.Position += _movementVector * Sprite.Speed / _framesPerMovement; // MIDDLE OF MOVEMENT: Proceed to the next animation frame if (_frameCounter == _framesPerMovement / 2) Sprite.SetCurrentAnimationFrame(FrameKey.Idle); // MOVEMENT FINISHED if (_frameCounter == _framesPerMovement) { _movementJustFinished = true; // Set position of the sprite to integers Sprite.Position = new Vector2((int)Math.Round(Sprite.Position.X), (int)Math.Round(Sprite.Position.Y)); // Reset the frame counter _frameCounter = 0; // Not moving anymore MoveState = MoveState.Still; // Not animating anymore Sprite.IsAnimating = false; // Save the direction of the movement _previousMovementDirection = Sprite.CurrentAnimation; } base.Update(gameTime); } Camera.LockToSprite(Sprite); Camera.Update(gameTime); // DEBUG //Console.Clear(); //Console.WriteLine("Zone: " + (_map.CurrentMapComponent != null ? _map.CurrentMapComponent.Name : "")); //Console.WriteLine("Collision: " + _collision); //Console.WriteLine("Moving: " + MoveState); //Console.WriteLine("EnemyTrainer: " + (_encounteredEnemyTrainer != null ? _encounteredEnemyTrainer.Name : "")); foreach (var drawableBattleComponent in Components) { drawableBattleComponent.Position = Sprite.Position; drawableBattleComponent.Update(gameTime); } }
public virtual void NavigateTo(Pages page, object parameter = null, FrameKey framekey = FrameKey.MainFrame) { Debug.WriteLine(page.ToString()); FrameDictionary[framekey].Navigate(PageDictionary[page], parameter); }
public void Init() { frameKey = new FrameKey(); joySticks = new Dictionary <KeyNum, JoyStickKey>(); }
public (long Ticks, Packet Packet) Invoke(ref FrameKey frameKey, ref FrameMetadata frameMetadata, Span <byte> frameBytes) { return(frameMetadata.Ticks, Packet.ParsePacket((LinkLayers)frameMetadata.LinkLayer, frameBytes.ToArray())); }