void InitialAnim()
    {
        mAnim = GetComponent<Animator>();

        if(mAnim != null)
        {
            Monitor[] monitors = mAnim.GetBehaviours<Monitor>();
            for (int Indx = 0; Indx < monitors.Length; ++Indx)
                monitors [Indx].AnimationEventFunc = AnimEventHandle;

            CameraTypeId = Animator.StringToHash ("CameraType");
        }
    }
	void Start () {
		// fighter is the model, fighterAnimator is the animation controller, we need access to it here in order
		// to set the correct bools that trigger different animation states
		fighterAnimator = fighter.GetComponent<Animator> ();
		// Capture the animation behaviors that underlie each state.  
		animatedBehaviours = fighterAnimator.GetBehaviours<BufferedStateMachineBehaviour>();

		UnityEngine.Debug.Log ("PWD: " + Directory.GetParent(Directory.GetCurrentDirectory()).FullName);

		health = 1000.0f; // Debug for animation
		maxHealth = health;

		gravity = 0.05f;
		initialJumpVelocity = .61f;

		blockPercentage = 1.0f;

		reach = 0.0f;
		attackDamage = 0.0f;
		lowAttack = false;
		inputHold = false;
		attackWasThrown = false;
		attackWasFinished = false;
		attackHit = false;
		blocking = false;
		lowBlocking = false;

		GameObject MIObj = GameObject.Find ("Info");
		MenuInfo MI_gd = MIObj.GetComponent<MenuInfo> ();
		if (player1) {
			if (MI_gd.isp1AI ()) {
				setPlayerAI ();
			}
				

			playerBodyBox = GameObject.Find ("Player1BodyBox");
			playerHitBox = GameObject.Find ("Player1HitBox");
			playerBlockBox = GameObject.Find ("Player1BlockBox");

			if (isAI) {
				int inPort = 4998;

				playerAI = new AI (inPort, inPort + 1);
				playerAI.verifyNetwork ();

			} else {
				Up = KeyCode.W;
				Down = KeyCode.S;
				Left = KeyCode.A;
				Right = KeyCode.D;
				Run = KeyCode.LeftShift;
				Attack1 = KeyCode.Q;
				Attack2 = KeyCode.E;
				Block = KeyCode.F;
			}

		} else { // player 2
			if (MI_gd.isp2AI ()) {
				setPlayerAI ();
			}
			playerBodyBox = GameObject.Find ("Player2BodyBox");
			playerHitBox = GameObject.Find ("Player2HitBox");
			playerBlockBox = GameObject.Find ("Player2BlockBox");

			if (isAI){
				int inPort = 5998;

				playerAI = new AI (inPort, inPort + 1);
				playerAI.verifyNetwork ();
			} else {
				Up = KeyCode.I;
				Down = KeyCode.K;
				Left = KeyCode.J;
				Right = KeyCode.L;
				Run = KeyCode.RightShift;
				Attack1 = KeyCode.U;
				Attack2 = KeyCode.O;
				Block = KeyCode.H;
			}

		}
	}
 void Awake()
 {
     // Find a reference to the Animator component in Awake since it exists in the scene.
     animator = GetComponent <Animator> ();
     if (animator) {
         CreatureStateMachineBehavior[] all_behaviors = animator.GetBehaviours<CreatureStateMachineBehavior>();
         for(int i=0;i<all_behaviors.Length;i++)
         {
             all_behaviors[i].game_controller = this;
         }
     }
 }
    void Start()
    {
        animator = GetComponent<Animator>();
        foreach(SlidingDoorStateBehaviour behaviour in animator.GetBehaviours<SlidingDoorStateBehaviour>()) {
            behaviour.AddListener(this);
        }

        for(int i=0; i<floorPositions.Length; i++) {
            floorPositions[i].y = floorPositions[0].y + i * GameController.floorHeight;
        }

        currentTargetFloor = currentFloor;
        positionDriver = new TransformAnimator();
        targetFloors = 0;
        transform.position = GetFloorPosition(currentFloor);
    }
    void InitialAnim()
    {
        mAnim = GetComponent<Animator>();
        Monitor[] monitors = mAnim.GetBehaviours<Monitor>();
        for (int Indx = 0; Indx < monitors.Length; ++Indx)
            monitors [Indx].AnimationEventFunc = AnimEventHandle;

        AttackTypeId = Animator.StringToHash ("AttackType");
        ActionTypeId = Animator.StringToHash ("ActionType");
        triggerActionId = Animator.StringToHash ("triggerAction");
    }