Example #1
0
    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();
 }
Example #3
0
        /// <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;
            }
        }
Example #5
0
      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();
      }
Example #6
0
            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();
            }
Example #7
0
        /// <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;
        }
Example #8
0
            /// <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();
                }
            }
Example #9
0
        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();
        }
Example #10
0
    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();
    }
Example #11
0
        /// <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);
 }
Example #13
0
 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;
 }
Example #19
0
        /// <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);
 }
Example #21
0
 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()));
 }