Claire Peta 5 years ago
parent
commit
8120fee09e
9 changed files with 197 additions and 148 deletions
  1. +3
    -0
      Assets/Data/Inventory/Tutorial1.asset
  2. +8
    -0
      Assets/Data/Inventory/Tutorial1.asset.meta
  3. +3
    -0
      Assets/Data/Inventory/Tutorial2.asset
  4. +8
    -0
      Assets/Data/Inventory/Tutorial2.asset.meta
  5. +3
    -0
      Assets/Data/Inventory/Tutorial3.asset
  6. +8
    -0
      Assets/Data/Inventory/Tutorial3.asset.meta
  7. +3
    -0
      Assets/Data/Inventory/Tutorial4.asset
  8. +8
    -0
      Assets/Data/Inventory/Tutorial4.asset.meta
  9. +153
    -148
      Assets/Scripts/Character.cs

+ 3
- 0
Assets/Data/Inventory/Tutorial1.asset View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:655ef64cdee98ecd6c8f7cb75875072108b55815051571d97361c5f076caaafb
size 522

+ 8
- 0
Assets/Data/Inventory/Tutorial1.asset.meta View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 808f6e35b72adbf47a19927d1f3efd35
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

+ 3
- 0
Assets/Data/Inventory/Tutorial2.asset View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9d51d42988dcad792d1a26c5f4362d573a4c660311e530fb4244d3823c245e9d
size 522

+ 8
- 0
Assets/Data/Inventory/Tutorial2.asset.meta View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: d342ea734412a4b40bb6096d5cafc2fb
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

+ 3
- 0
Assets/Data/Inventory/Tutorial3.asset View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:5b4b715f269c24473655cff17cd3b3a635111b91b4c5581be94c7686a8c18308
size 633

+ 8
- 0
Assets/Data/Inventory/Tutorial3.asset.meta View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 26baa66216f4923448239677997ac13d
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

+ 3
- 0
Assets/Data/Inventory/Tutorial4.asset View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d033311011d9927de9bedbf400dd7f1559bce5b5ebfb78681bfdc37685d9e16b
size 744

+ 8
- 0
Assets/Data/Inventory/Tutorial4.asset.meta View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: b06e54ffefee9e549a8e1652d5af07f9
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

+ 153
- 148
Assets/Scripts/Character.cs View File

@ -6,182 +6,187 @@ using UnityEngine.SceneManagement;
public class Character : MonoBehaviour
{
public string nextScene;
public string nextScene;
#region Inspector Fields
[SerializeField]
private Inventory startingInventory;
[SerializeField]
[Tooltip ("Will move to this block at start, else will try and find a block below")]
private Block CurrentBlock;
[SerializeField]
[Tooltip("Will move to this block at start, else will try and find a block below")]
private Block CurrentBlock;
[SerializeField]
[Tooltip ("Layers to ignore when checking for blocks")]
private LayerMask Ignore;
[SerializeField]
[Tooltip("Layers to ignore when checking for blocks")]
private LayerMask Ignore;
[Tooltip("Current Inventory of the player")]
public Inventory Inventory;
#endregion Inspector Fields
#endregion Inspector Fields
#region Unity Functions
#region Unity Functions
private void Awake ()
{
Inventory.Clone(startingInventory);
private void Awake()
{
if (Inventory != null || startingInventory != null)
Inventory.Clone(startingInventory);
//If no starting block find one below it
if (CurrentBlock == null)
Block.isBlockAtPosition (transform.position + Vector3.down / 2, 1, ~Ignore, out CurrentBlock);
//If no starting block find one below it
if (CurrentBlock == null)
Block.isBlockAtPosition(transform.position + Vector3.down / 2, 1, ~Ignore, out CurrentBlock);
//move to starting block
transform.position = CurrentBlock.VisualPosition;
}
//move to starting block
transform.position = CurrentBlock.VisualPosition;
}
#endregion Unity Functions
#endregion Unity Functions
#region Class Implementation
#region Class Implementation
/// <summary>
/// Moves one block in specefied direction, Can walk off obstacles
/// </summary>
/// <param name="direction">direction to walk</param>
/// <remarks>Technically is same as JumpLong(1) but kept seperate to avoid confusion</remarks>
public void Move (Direction direction)
{
//setting up variables
Vector3 position = CurrentBlock.position + direction.ToVector (transform); // position wanted
Block hit; //output of block detection
Block moveTo = CurrentBlock; //block we'll actually move to
/// <summary>
/// Moves one block in specefied direction, Can walk off obstacles
/// </summary>
/// <param name="direction">direction to walk</param>
/// <remarks>Technically is same as JumpLong(1) but kept seperate to avoid confusion</remarks>
public void Move(Direction direction)
{
//setting up variables
Vector3 position = CurrentBlock.position + direction.ToVector(transform); // position wanted
Block hit; //output of block detection
Block moveTo = CurrentBlock; //block we'll actually move to
//if move is obstucted no where to move
if (Block.isBlockAtPosition (position + Vector3.up, 1, ~Ignore))
return;
//if move is obstucted no where to move
if (Block.isBlockAtPosition(position + Vector3.up, 1, ~Ignore))
return;
//If block at Position is walkable set it to moveTo
if (Block.isBlockAtPosition (position, 1, ~Ignore, out hit) && hit.isWalkable (~Ignore))
moveTo = hit;
//If block at Position is walkable set it to moveTo
if (Block.isBlockAtPosition(position, 1, ~Ignore, out hit) && hit.isWalkable(~Ignore))
moveTo = hit;
//else if block down one is walkable
else if (Block.isBlockAtPosition (position + Vector3.down, 1, ~Ignore, out hit) && hit.isWalkable (~Ignore))
moveTo = hit;
//set current block && move
CurrentBlock = moveTo;
transform.position = CurrentBlock.VisualPosition;
}
/// <summary>
/// Upon collision with a floating block, collect its
/// Upon collision with the end portal, end of level
/// </summary>
/// <param name="other">name of collided object</param>
void OnTriggerEnter (Collider other)
{
else if (Block.isBlockAtPosition(position + Vector3.down, 1, ~Ignore, out hit) && hit.isWalkable(~Ignore))
moveTo = hit;
//set current block && move
CurrentBlock = moveTo;
transform.position = CurrentBlock.VisualPosition;
}
/// <summary>
/// Upon collision with a floating block, collect its
/// Upon collision with the end portal, end of level
/// </summary>
/// <param name="other">name of collided object</param>
void OnTriggerEnter(Collider other)
{
Collectable collectable = other.GetComponentInChildren<Collectable>();
if (other != null) {
if (collectable != null)
{
collectable.OnCollect(this);
}
if (other.gameObject.name == "End Portal") {
other.GetComponent<Collider> ().enabled = false;
Debug.Log ("You finished this level!");
SceneManager.LoadScene (nextScene);
}
}
/// <summary>
/// Rotates to point in specific direction based on current direction
/// </summary>
/// <param name="direction">Local direction to point</param>
public void Rotate (Direction direction)
{
transform.forward = direction.ToVector (transform);
}
/// <summary>
/// Jumps in specefied direction, picks between Long Jump and Jumping up
/// </summary>
/// <param name="direction">Direction to Jump</param>
public void Jump (Direction direction)
{
//if there is a block infront JumpUp else LongJump
if (Block.isBlockAtPosition (CurrentBlock.position + direction.ToVector (transform) + Vector3.up, 1, ~Ignore))
JumpUp (direction);
else
JumpLong (direction);
}
#endregion Class Implementation
#region Private Functions
/// <summary>
/// Jumps up obstacle of specific height. Jumps as high as possible
/// </summary>
/// <param name="direction">Direction of obstacle</param>
/// <param name="height">max height</param>
private void JumpUp (Direction direction, int height = 1)
{
//setting up variables
Vector3 position; // position wanted
Block hit; //output of block detection
Block moveTo = CurrentBlock; //block we'll actually move to
//Check blocks in going up then move to the heighest walkable one
for (int i = 0; i <= height; i++) {
//next position up the tower
position = CurrentBlock.position + direction.ToVector (transform) + (Vector3.up * i);
//if block is walkable set it to last known position
if (Block.isBlockAtPosition (position, 1, ~Ignore, out hit) && hit.isWalkable (~Ignore))
moveTo = hit;
}
//set current block && move
CurrentBlock = moveTo;
transform.position = CurrentBlock.VisualPosition;
}
/// <summary>
/// Long jumps forward a specified distance. Can Jump gaps. Stops at obstruction
/// </summary>
/// <param name="direction">Direction to Jump</param>
/// <param name="Distance">Max distance</param>
private void JumpLong (Direction direction, int Distance = 2)
{
//setting up variables
Vector3 position; // position wanted
Block hit; //output of block detection
Block moveTo = CurrentBlock; //block we'll actually move to
//Check blocks in front until we hit an obstruction or went the distance
for (int i = 1; i <= Distance; i++) {
//Next position to MoveTo
position = CurrentBlock.position + (direction.ToVector (transform) * i);
//if jump is obstructed, stop and go to last known block
if (Block.isBlockAtPosition (position + Vector3.up, 1, ~Ignore))
break;
//If block at Position is walkable set it to last known position
if (Block.isBlockAtPosition (position, 1, ~Ignore, out hit) && hit.isWalkable (~Ignore))
moveTo = hit;
}
if (other.gameObject.name == "End Portal")
{
other.GetComponent<Collider>().enabled = false;
Debug.Log("You finished this level!");
SceneManager.LoadScene(nextScene);
}
}
/// <summary>
/// Rotates to point in specific direction based on current direction
/// </summary>
/// <param name="direction">Local direction to point</param>
public void Rotate(Direction direction)
{
transform.forward = direction.ToVector(transform);
}
/// <summary>
/// Jumps in specefied direction, picks between Long Jump and Jumping up
/// </summary>
/// <param name="direction">Direction to Jump</param>
public void Jump(Direction direction)
{
//if there is a block infront JumpUp else LongJump
if (Block.isBlockAtPosition(CurrentBlock.position + direction.ToVector(transform) + Vector3.up, 1, ~Ignore))
JumpUp(direction);
else
JumpLong(direction);
}
#endregion Class Implementation
#region Private Functions
/// <summary>
/// Jumps up obstacle of specific height. Jumps as high as possible
/// </summary>
/// <param name="direction">Direction of obstacle</param>
/// <param name="height">max height</param>
private void JumpUp(Direction direction, int height = 1)
{
//setting up variables
Vector3 position; // position wanted
Block hit; //output of block detection
Block moveTo = CurrentBlock; //block we'll actually move to
//Check blocks in going up then move to the heighest walkable one
for (int i = 0; i <= height; i++)
{
//next position up the tower
position = CurrentBlock.position + direction.ToVector(transform) + (Vector3.up * i);
//if block is walkable set it to last known position
if (Block.isBlockAtPosition(position, 1, ~Ignore, out hit) && hit.isWalkable(~Ignore))
moveTo = hit;
}
//set current block && move
CurrentBlock = moveTo;
transform.position = CurrentBlock.VisualPosition;
}
/// <summary>
/// Long jumps forward a specified distance. Can Jump gaps. Stops at obstruction
/// </summary>
/// <param name="direction">Direction to Jump</param>
/// <param name="Distance">Max distance</param>
private void JumpLong(Direction direction, int Distance = 2)
{
//setting up variables
Vector3 position; // position wanted
Block hit; //output of block detection
Block moveTo = CurrentBlock; //block we'll actually move to
//Check blocks in front until we hit an obstruction or went the distance
for (int i = 1; i <= Distance; i++)
{
//Next position to MoveTo
position = CurrentBlock.position + (direction.ToVector(transform) * i);
//if jump is obstructed, stop and go to last known block
if (Block.isBlockAtPosition(position + Vector3.up, 1, ~Ignore))
break;
//If block at Position is walkable set it to last known position
if (Block.isBlockAtPosition(position, 1, ~Ignore, out hit) && hit.isWalkable(~Ignore))
moveTo = hit;
//else if block down one is walkable
else if (Block.isBlockAtPosition (position + Vector3.down, 1, ~Ignore, out hit) && hit.isWalkable (~Ignore))
moveTo = hit;
else if (Block.isBlockAtPosition(position + Vector3.down, 1, ~Ignore, out hit) && hit.isWalkable(~Ignore))
moveTo = hit;
}//end for
}//end for
//Set Current Block and move
CurrentBlock = moveTo;
transform.position = CurrentBlock.VisualPosition;
}
//Set Current Block and move
CurrentBlock = moveTo;
transform.position = CurrentBlock.VisualPosition;
}
#endregion Private Functions
#endregion Private Functions
}

Loading…
Cancel
Save