Cose da fare

- Ambiente
  - Generazione mappa (Bob)
- Elementi dell'ambiente
  - Alberi (Ila)
  - Tenda (?)
  - Letti (Ila)
  - Cespugli cibo (Ila)
- Personaggio
  - Sonno (Sleep)
  - Spavento (Fear)
  - Fame (Hunger)
  - Vita (Health)
  - // Curiosità (Curious)
  - State : StateType
    * Sleepy
    * Fearful
    * Hungry
	* Hurt
    * Base
- Nemici (Gio)
  - Scopo: uccidere il giocatore
  - Come: pathfinding verso il giocatore

  - Animali neutrali
    - diventano aggressivi se sotto spavento
    - fuggono sotto fame
  - Animali sempre aggressivi

- Meccanica di gioco (stati, modificatori, plus, minus...)
  - When Tired
    -> do tired animation -> controlled by Player
	-> reduce speed -> controlled by Player (problem)
	-> eventually die -> controlled by Player
  - When Hungry
    -> chase food -> controlled by NeutralEnemy (needs to become food)
	-> see fake food -> controlled by SpawnPoint
	-> eventually die -> controlled by Player
  - When Scared
    -> be chased by everything -> controlled by NeutralEnemy
	-> becomes nighter -> controlled by Player (change skybox)
	-> add jumpscares -> controlled by Player (use overlay on camera)
	-> noises on trees -> controlled by Tree
	-> eventually stop being scared -> controlled by Player
	-> see fireplace / off fireplace -> controlled by SpawnPoint
  - When Hurt
    -> bleed -> throw NotImplemented
	-> see stuff redder -> controlled by Player (use overlay on camera)
	-> get hungry even if still -> controlled by Player
	-> eventually not hurt any more -> controlled by Player
	-> possibly die -> controlled by Player (.Hurt())
  - When Base
    -> See goal objects -> controlled by SpawnPoint
	-> maybe collect goal objects -> controlled by Player+SpawnPoint
	-> eventually win -> controlled by Player

Implementation detail:
- Tag:
  Player
  -> FirstPersonController
  -> check if clicked object is IInteractible
     -> .Interact(this)
  -> .Update()
	 -> apply current state modifiers
	    -> Health() -> no change unless .Hurt, increase over time
		-> Sleep() -> increase over time, decrease when sleeping
		-> Hunger() -> increase over time, modified by geometric mean of previous K samples of speed,
			apply random, modified by health, decrease when eating
		-> Fear() -> increase if num enemies > threshold, decrease over time, apply random
	 -> compute primary state
		   -> Scared if Fear > .5
		   -> Sleepy if Sleep > .5
		   -> Hungry if Hunger > .5
		   -> Base if Others
     -> EnsureEnemies() -> create and destroy enemies as needed
  Interactible (Tent, Bed, Food)
  -> IInteractible
     .Interact(Player go)
  Enemy
  -> .Update() -> do something
  => NeutralEnemy | AggressiveEnemy
     -> PathFindToPlayer() -> simply move towards the Player
     -> PathFindAwayFromPlayer() -> move randomly in the cone opposed the Player
     -> RandomRoam() -> move randomly in a decent direction
	 
Object List
- Player #Player -> Player, SpawnController, JumpScareController
- JumpScarePrefab (in JumpScareController) -> GUITexture
- SpawnPoint #SpawnPoint -> SpawnPoint
- GoodFoodPrefab (in SpawnPoint) #Interactible -> Food
- EvilFoodPrefab (in SpawnPoint) #Interactible -> Spawnable
- same for evil food, good bench, etc.
- NeutralAnimal #Animal -> NeutralAnimal, NormalMesh, FoodMesh
- AggressiveAnimal #Animal -> AggressiveAnimal
- Tree #Tree