Esempio n. 1
0
    protected virtual void FireOnce()
    {
        Vector3 start = userCommunicator.LookStartPos();
        Vector3 end;

        bool hitHealthComponent = false;

        Vector3 direction = Quaternion.Euler(InaccuracyOffset()) * userCommunicator.LookDirection();

        RaycastHit hitInfo;

        if (Physics.Raycast(start, direction, out hitInfo, range, layermask))   //Hits something
        {
            end = hitInfo.point;
            IHealth health = hitInfo.collider.GetComponent <IHealth>();
            Debug.Log(hitInfo.collider);
            if (health != null)
            {
                hitHealthComponent = true;
                health.Damage(damage);
            }
        }
        else
        {
            end = NagaUtils.GetPointAlongDirection(start, direction, range);
        }

        Debug.DrawLine(start, end, Color.white, 0.4f);

        onHitscanShoot.Invoke((new ShootInfo[] { new ShootInfo(start, end, hitInfo, hitHealthComponent) }));
    }
Esempio n. 2
0
 private void Awake()
 {
     sharedInstance        = this;
     mouseIOService        = NagaUtils.VerifyGetComponent <IMouseIOInfoProvider>(mouseIO);
     playerPositionService = NagaUtils.VerifyGetComponent <IPositionInfoProvider>(playerPosition);
     inventoryService      = NagaUtils.VerifyGetComponent <IInventoryService>(inventory);
     ammoDisplayService    = NagaUtils.VerifyGetComponent <IAmmoDisplayService>(ammoDisplay);
     scoreSystemService    = NagaUtils.FindObjectOfType <IScoreSystem>(); //Maybe move this (but to where?)
 }
Esempio n. 3
0
        private void CreateNewSession(ScenarioInfo info)
        {
            session?.UnregisterAllEvents();

            //session.SetScoreSystem(NagaUtils.FindObjectOfType<IScoreSystem>()); This got removed because the TimeTrial mode doesn't include score
            session = new ScenarioSession(statUI, info);
            session.SetHitMissDeterminer(NagaUtils.FindObjectsOfType <IHitMissDeterminer>()[0]); //maybe have a global notifier like KillNotifier? TODO;
            session.SetTimerEvent(scenarioTimer.onTimerTicked);
            session.SetKillNotifier(KillNotifier.onKill);
        }
Esempio n. 4
0
        private void UntimedOnScenarioLoaded()
        {
            _scenarioState = ScenarioState.Untimed;

            session.SetScoreSystem(NagaUtils.FindObjectOfType <IScoreSystem>());

            EnablePlayer();
            statUI.SetUntimed();
            countdownUI.Hide();
            onScenarioStarted.Invoke();
        }
Esempio n. 5
0
        private void SetupUI <T>(ref T fieldMember, Component prefab)
        {
            fieldMember = NagaUtils.FindObjectOfType <T>();
            if (fieldMember == null)
            {
                var obj = Instantiate(prefab);
                DontDestroyOnLoad(obj.gameObject);
                fieldMember = obj.GetComponent <T>();

                if (fieldMember == null)
                {
                    throw new System.Exception($"Prefab does not contain a component that implements {typeof(T).Name}!");
                }
            }
        }
Esempio n. 6
0
    private void AttemptToCrouch()
    {
        if (movementMode != MovementMode.crouching)
        {
            Vector3 scale = transform.localScale;
            transform.localScale = new Vector3(scale.x, scale.y * crouchScale, scale.z);

            movementMode = MovementMode.crouching;

            NagaUtils.ExecuteAfterOneFrame(() => {
                controller.Move(new Vector3(0, ((crouchScale * scale.y) - scale.y), 0));
            });

            CheckCharacterControllerScalingError();
        }
    }
Esempio n. 7
0
    public override void CreateTrail(ShootInfo shootInfo)
    {
        Vector3 start = weaponFirepos.GetWeaponFirePos();
        Vector3 end   = shootInfo.end;

        start = NagaUtils.GetPointAlongDirection(start, end - start, Random.value * startposRandomness);

        TrailRenderer trail = GenericObjectPooler.RequestObject(trailRenderer).gameObject.GetComponent <TrailRenderer>();

        trail.gameObject.transform.position = start;
        trail.gameObject.SetActive(true);

        trail.Clear();

        Timing.RunCoroutine(_TweenTrail(trail, end));
    }
Esempio n. 8
0
        private void TimedOnScenarioLoaded()
        {
            _scenarioState = ScenarioState.ShootToStart;

            session.SetScoreSystem(NagaUtils.FindObjectOfType <IScoreSystem>());

            SetupCountdownLogic();
            statUI.SetTimeDP(0);
            statUI.SetTimerMode();
            statUI.UpdateTime(session.timeAllowed * 1000);
            SetupCountdownUI();

            scenarioTimer.onEndTimer.AddListener(OnTimedScenarioEnded);

            shootToStartCoroutine = Timing.RunCoroutine(_WaitToStart(() => {
                scenarioTimer.StartTimer(session.timeAllowed, countdownTime);
                _scenarioState = ScenarioState.Countdown;
            }));
        }
Esempio n. 9
0
    /*
     *
     *  FIELDS AND PROPERTIES END
     *
     */

    private void Awake()
    {
        mouseLookScript = NagaUtils.FindObjectOfType <IMouseIOInfoProvider>();
    }
Esempio n. 10
0
 private void OnDrawGizmos()
 {
     NagaUtils.DrawCuboid(center + (relativeToTransform? transform.position : new Vector3(0, 0, 0)), size, Quaternion.Euler(rotation));
 }