using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerBehavior : MonoBehaviour
{
public float moveSpeed = 10f;
public float rotateSpeed = 75f;
public float jumpVelocity = 5f;
public float distanceToGround = 0.1f;
public LayerMask groundLayer;
public GameObject bullet;
public float bulletSpeed = 100f;
public delegate void JumpingEvent(bool isGrounded);
public event JumpingEvent playerJump;
private float _vInput;
private float _hInput;
private Rigidbody _rb;
private CapsuleCollider _col;
private GameBehavior _gameManager;
void Start()
{
_rb = GetComponent<Rigidbody>();
_col = GetComponent<CapsuleCollider>();
_gameManager = GameObject.Find("Game Manager").GetComponent<GameBehavior>();
}
void Update()
{
_vInput = Input.GetAxis("Vertical") * moveSpeed;
_hInput = Input.GetAxis("Horizontal") * rotateSpeed;
if(IsGrounded() && Input.GetKeyDown(KeyCode.Space))
{
_rb.AddForce(Vector3.up * jumpVelocity, ForceMode.Impulse);
playerJump(IsGrounded());
}
//this.transform.Translate(Vector3.forward * vInput * Time.deltaTime);
//this.transform.Rotate(Vector3.up * hInput * Time.deltaTime);
}
void FixedUpdate()
{
Vector3 rotation = Vector3.up * _hInput * Time.fixedDeltaTime;
Quaternion deltaRotation = Quaternion.Euler(rotation);
_rb.MovePosition(this.transform.position + this.transform.forward * _vInput * Time.fixedDeltaTime);
_rb.MoveRotation(_rb.rotation * deltaRotation);
if (Input.GetMouseButtonDown(0))
{
GameObject newBullet = Instantiate(bullet, this.transform.position, this.transform.rotation) as GameObject;
newBullet.transform.Translate(0f, 0.1f, 1.5f);
Rigidbody bulletRB = newBullet.GetComponent<Rigidbody>();
bulletRB.velocity = this.transform.forward * bulletSpeed;
}
}
private bool IsGrounded()
{
Vector3 endPosition = new Vector3(_col.bounds.center.x, _col.bounds.min.y, _col.bounds.center.z);
return Physics.CheckCapsule(_col.bounds.center, endPosition, distanceToGround, groundLayer, QueryTriggerInteraction.Ignore);
}
void OnCollisionEnter(Collision collision)
{
if(collision.gameObject.name == "Enemy")
{
_gameManager.Lives -= 1;
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public static class Utilities
{
public static int playerDeaths = 0;
public static string UpdateDeathCount(out int countReference)
{
countReference = 1;
return "Next time you'll be at number " + countReference;
}
public static void RestartLevel()
{
SceneManager.LoadScene(0);
Time.timeScale = 1.0f;
Debug.Log("Player deaths: " + playerDeaths);
string message = UpdateDeathCount(out playerDeaths);
Debug.Log("Player deaths: " + playerDeaths);
}
public static bool RestartLevel(int sceneIndex)
{
if(sceneIndex < 0)
{
throw new System.ArgumentException("Scene index cannot be negative");
}
SceneManager.LoadScene(sceneIndex);
Time.timeScale = 1.0f;
return true;
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BulletBehavior : MonoBehaviour
{
public float onscreenDelay = 5f;
void Update ()
{
Destroy(this.gameObject, onscreenDelay);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraBehavior : MonoBehaviour
{
public Vector3 offset;
private Transform playerPos;
void Start()
{
playerPos = GameObject.Find("Player").transform;
}
void LateUpdate()
{
this.transform.position = playerPos.TransformPoint(offset);
this.transform.LookAt(playerPos);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Character
{
public string name;
public int exp = 0;
public Character()
{
name = "Not assigned";
}
public Character(string name)
{
this.name = name;
}
public virtual void PrintStatsInfo()
{
Debug.LogFormat("Hero: {0} - {1} EXP", name, exp);
}
private void Reset()
{
this.name = "Not assigned";
this.exp = 0;
}
}
public class Paladin: Character
{
public Weapon weapon;
public Paladin(string name, Weapon weapon): base(name)
{
this.weapon = weapon;
}
public override void PrintStatsInfo()
{
Debug.LogFormat("Hail {0} - take up your {2}!", name, exp, weapon.name);
}
}
public struct Weapon
{
public string name;
public int damage;
public Weapon(string name, int damage)
{
this.name = name;
this.damage = damage;
}
public void PrintWeaponStats()
{
Debug.LogFormat("Weapon: {0} - {1} DMG", name, damage);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class EnemyBehavior : MonoBehaviour
{
public Transform player;
public Transform patrolRoute;
public List<Transform> locations;
private int locationIndex = 0;
private NavMeshAgent agent;
private int _lives = 3;
public int Lives
{
get { return _lives; }
private set
{
_lives = value;
if (_lives <= 0)
{
Destroy(this.gameObject);
Debug.Log("Enemy down.");
}
}
}
void Start()
{
agent = GetComponent<NavMeshAgent>();
player = GameObject.Find("Player").transform;
InitializePatrolRoute();
MoveToNextPatrolLocation();
}
void Update()
{
if (agent.remainingDistance < 0.2f && !agent.pathPending)
{
MoveToNextPatrolLocation();
}
}
void InitializePatrolRoute()
{
foreach (Transform child in patrolRoute)
{
locations.Add(child);
}
}
void MoveToNextPatrolLocation()
{
if (locations.Count == 0)
return;
agent.destination = locations[locationIndex].position;
locationIndex = (locationIndex + 1) % locations.Count;
}
void OnTriggerEnter(Collider other)
{
if (other.name == "Player")
{
agent.destination = player.position;
Debug.Log("Enemy detected!");
}
}
void OnTriggerExit(Collider other)
{
if(other.name == "Player")
{
Debug.Log("Enemy out of range.");
}
}
void OnCollisionEnter(Collision collision)
{
if(collision.gameObject.name == "Bullet(Clone)")
{
Lives -= 1;
Debug.Log("Critical hit!");
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace CustomExtensions
{
public static class StringExtensions
{
public static void FancyDebug(this string str)
{
Debug.LogFormat("This string contains {0} characters.", str.Length);
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using CustomExtensions;
public class GameBehavior : MonoBehaviour, IManager
{
public string labelText = "Collect all 4 items and win your freedom!";
public readonly int maxItems = 4;
public bool showWinScreen = false;
public bool showLossScreen = false;
public delegate void DebugDelegate(string newText);
public DebugDelegate debug = Print;
private string _state;
public string State
{
get { return _state; }
set { _state = value; }
}
private int _itemsCollected = 0;
public int Items
{
get { return _itemsCollected; }
set {
_itemsCollected = value;
if (_itemsCollected >= maxItems)
{
labelText = "You've found all the items!";
showWinScreen = true;
Time.timeScale = 0;
}
else
{
labelText = "Item found, only " + (maxItems - _itemsCollected) + " more to go!";
}
}
}
private int _playerLives = 3;
public int Lives
{
get { return _playerLives; }
set {
_playerLives = value;
if(_playerLives <= 0)
{
labelText = "You want another life with that?";
showLossScreen = true;
Time.timeScale = 0;
}
else
{
labelText = "Ouch... that's got hurt.";
}
}
}
void Start()
{
Initialize();
InventoryList<string> inventoryList = new InventoryList<string>();
inventoryList.SetItem("Potion");
Debug.Log(inventoryList.item);
}
public void Initialize()
{
_state = "Manager initialized..";
_state.FancyDebug();
debug(_state);
LogWithDelegate(debug);
PlayerBehavior playerBehavior = GameObject.Find("Player").GetComponent<PlayerBehavior>();
playerBehavior.playerJump += HandlePlayerJump;
}
public void HandlePlayerJump(bool isGrounded)
{
if(isGrounded)
{
debug("Player has jumped...");
}
}
public static void Print(string newText)
{
Debug.Log(newText);
}
public void LogWithDelegate(DebugDelegate debug)
{
debug("Delegating the debug task...");
}
void OnGUI()
{
GUI.Box(new Rect(20, 20, 150, 25), "Player Health: " + _playerLives);
GUI.Box(new Rect(20, 50, 150, 25), "Items Collected: " + _itemsCollected);
GUI.Label(new Rect(Screen.width / 2 - 100, Screen.height - 50, 300, 50), labelText);
if (showWinScreen)
{
if (GUI.Button(new Rect(Screen.width/2 - 100, Screen.height/2 - 50, 200, 100), "YOU WON!"))
{
Utilities.RestartLevel();
}
}
if(showLossScreen)
{
if (GUI.Button(new Rect(Screen.width / 2 - 100, Screen.height / 2 - 50, 200, 100), "You lose..."))
{
try
{
Utilities.RestartLevel(-1);
debug("Level restarted successfully...");
}
catch (System.ArgumentException e)
{
Utilities.RestartLevel(0);
debug("Reverting to scene 0: " + e.ToString());
}
finally
{
Utilities.RestartLevel(0);
debug("Restart handled...");
}
}
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public interface IManager
{
string State { get; set; }
void Initialize();
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class InventoryList<T> where T: class
{
private T _item;
public T item
{
get { return _item; }
set { _item = value; }
}
public InventoryList()
{
Debug.Log("Generic list initalized...");
}
public void SetItem(T newItem)
{
_item = newItem;
Debug.Log("New item added...");
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ItemBehavior : MonoBehaviour
{
public GameBehavior gm;
void Start()
{
gm = GameObject.Find("Game Manager").GetComponent<GameBehavior>();
}
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.name == "Player")
{
Destroy(this.transform.parent.gameObject);
Debug.Log("Item collected!");
gm.Items += 1;
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LearningCurve : MonoBehaviour
{
private int firstNumber = 2;
public int secondNumber = 3;
public float pi = 3.14f;
public string characterName = "Bilbo";
public bool allGood = true;
public Transform camTransform;
public GameObject directionLight;
public Transform lightTransform;
// Use this for initialization
void Start()
{
int characterLevel = 32;
int nextSkillLevel = GenerateCharacter("Spike", characterLevel);
Debug.Log(nextSkillLevel);
Debug.Log(GenerateCharacter("Faye", characterLevel));
}
void LoopExample()
{
int playerLives = 3;
while (playerLives > 0)
{
Debug.Log("Still alive!");
playerLives--;
}
Debug.Log("Player KO'd...");
}
public int GenerateCharacter(string name, int level)
{
//Debug.LogFormat("Character: {0} - Level: {1}", name, level);
return level + 5;
}
public void DisplaySkillProgression(int level)
{
Debug.LogFormat("New skill available at level {0}", level);
}
/// <summary>
/// Adds the numbers.
/// </summary>
void AddNumbers()
{
Debug.Log(firstNumber + secondNumber);
}
void GetComponentExample()
{
camTransform = this.GetComponent<Transform>();
Debug.Log(camTransform.localPosition);
directionLight = GameObject.Find("Directional Light");
lightTransform = directionLight.GetComponent<Transform>();
Debug.Log(lightTransform.localPosition);
}
void OOPExample()
{
Character hero = new Character();
Character hero2 = hero;
hero2.name = "Sir Krane the Brave";
//hero.PrintStatsInfo();
//hero2.PrintStatsInfo();
Weapon huntingBow = new Weapon("Hunting Bow", 105);
Paladin knight = new Paladin("Sir Arthur", huntingBow);
knight.PrintStatsInfo();
Character heroine = new Character("Agatha");
heroine.PrintStatsInfo();
Weapon warBow = huntingBow;
warBow.name = "War Bow";
warBow.damage = 155;
huntingBow.PrintWeaponStats();
warBow.PrintWeaponStats();
}
}