public void EquipWeapon(GameObject WeaponObject)
    {
        GameObject = WeaponObject;
        Animator   = GameObject.GetComponent <Animator>();
        Inputs     = GameObject.GetComponent <WeaponInputs>();
        Common     = new WeaponCommon(this);

        controller = new FSMController <WeaponController, eStates>(this);
        controller.RegisterState(eStates.Idle, new WeaponIdle());
        controller.RegisterState(eStates.Shoot, new WeaponShoot());
        controller.RegisterState(eStates.Reload, new WeaponReload());
        controller.RegisterState(eStates.Recoil, new WeaponRecoil());

        controller.AddMapping(eStates.Idle, eStates.Shoot, eStates.Reload);
        controller.AddMapping(eStates.Shoot, eStates.Recoil);
        controller.AddMapping(eStates.Reload, eStates.Idle, eStates.Shoot);
        controller.AddMapping(eStates.Recoil, eStates.Idle, eStates.Shoot, eStates.Reload);

        controller.SetLogToGUI(true, 2);

        controller.SetState(eStates.Idle);
        Common.Init();

        // sanity checks
        QLogger.Assert(Inputs.magCapacity > 0);
        QLogger.Assert(Inputs.reloadTime > 0 && Inputs.recoilTime > 0 && Inputs.accuracy > 0);
        // if ( Inputs.shotType == eShotType.BURST )
        //     QLogger.Assert ( Inputs.burstBulletCount > 1 );
        QLogger.Assert(Inputs.damage > 0 && Inputs.range > 0);
        QLogger.Assert(Inputs.muzzlePositionAndDirection != null);
    }
示例#2
0
    public void FireBullet(float accuracy)
    {
        QLogger.Assert(bulletsRemainingInMag > 0);

        GameObject bullet = GameObject.Instantiate(inputs.bulletReference);

        bullet.transform.position = inputs.muzzlePositionAndDirection.position;
        bullet.transform.forward  = inputs.muzzlePositionAndDirection.forward;
        Bullet bulletScript = bullet.GetComponent <Bullet>();

        QLogger.Assert(bulletScript != null);
        bulletScript.Init(inputs.muzzlePositionAndDirection.forward, inputs.damage, inputs.range);

        bulletsRemainingInMag--;
    }