Beispiel #1
0
    /// <summary>
    /// Adds a new player position to the position list.
    /// </summary>
    /// <param name="gameObj">Object to store position from.</param>
    /// <param name="posArray">List to add position in.</param>
    public void AddPosition(GameObject gameObj, List <PlayerTimePosition> posArray)
    {
        // Making new position to store in list
        PlayerTimePosition pos = new PlayerTimePosition();

        pos.position = gameObj.transform.position;
        pos.time     = Time.time;
        pos.input    = new TimePositionInput();


        // Sprite handling
        SpriteRenderer renderer = gameObj.GetComponentInChildren <SpriteRenderer>();

        pos.sprite      = renderer.sprite;
        pos.facingRight = gameObj.GetComponent <PlayerControl>().facingRight;

        // If it's the player adding a new position, also store inputs
        if (gameObj.CompareTag("Player"))
        {
            pos.input.SetInput();
        }

        posArray.Add(pos);

        // Continuously removing all positions outside time threshold
        posArray.RemoveAll(x => x.time <= (Time.time - rewindSeconds));
    }
Beispiel #2
0
 /// <summary>
 /// Handles player movement while rewinding time.
 /// </summary>
 public void PlayerRewind()
 {
     // If there are positions left on the position list, move player past one position
     if (playerPositions.Count > 0)
     {
         PlayerTimePosition currentPos = playerPositions[playerPositions.Count - 1];
         transform.position = currentPos.position;
         // Set player inputs along with position
         player.SetInputFromPosition(currentPos.input);
         // Setting sprite
         Debug.Log(currentPos.sprite.name);
         player.GetComponentInChildren <SpriteRenderer>().sprite = currentPos.sprite;
         player.facingRight = currentPos.facingRight;
         // Insert the position on the record for the clone
         playerRecord.Insert(0, currentPos);
         // Remove the position from the stored list
         playerPositions.RemoveAt(playerPositions.Count - 1);
     }
     // If there are no positions left, player is frozen in time
     else
     {
         isFrozen = true;
         //rb.constraints = RigidbodyConstraints2D.FreezeAll;
     }
 }