Esempio n. 1
0
    public void FollowCharacter(CharacterPlayer instance)
    {
        float distance = Vector3.Distance(transform.position, CharacterPlayer.instance.transform.position);

        MoveToTargetPos(instance.transform.position);

        if (distance < EntityManager.Instance.npcCorpseDetectionDistance / 4)
        {
            CheckForCatchDistance(distance);
        }
        else if (distance < EntityManager.Instance.npcCorpseDetectionDistance / 2)
        {
            lastKnownPosition   = instance.GetPosition();
            lastKnownFleeAlley  = null;
            CurrentTaskDuration = AlarmedDuration;
            SetStatus(ENPCStatus.Alarmed);
        }
        else if (distance < EntityManager.Instance.npcCorpseDetectionDistance)
        {
            lastKnownPosition   = instance.GetPosition();
            lastKnownFleeAlley  = null;
            CurrentTaskDuration = AlarmedDuration;
            SetStatus(ENPCStatus.Alert);
        }
        else
        {
            Debug.LogError("Incosistent State: Cant follow player that is to far away.");
        }
    }
Esempio n. 2
0
    public void TransitionToStreet(Alley alley)
    {
        var tempsss = alley.GetCurrentStreet().GetComponent <StreetSpriteSort>();

        if (tempsss != null)
        {
            tempsss.spriteColour   = Color.white;
            tempsss.transitionFrac = 1;
            tempsss.layer          = SortLayer.BUILDING_FRONT;
        }
        tempsss = (CurrentStreet = alley.GetTargetAlley().GetCurrentStreet()).GetComponent <StreetSpriteSort>();
        if (tempsss != null)
        {
            tempsss.spriteColour   = Color.black;
            tempsss.transitionFrac = 1;
            tempsss.layer          = SortLayer.BACKGROUND;
        }
        var delta = transform.position.y;

        gameObject.transform.SetParent(CurrentStreet.gameObject.transform);
        Vector3 temp = alley.GetTargetAlley().gameObject.transform.localPosition;

        temp.y     = CurrentStreet.StreetYOffset;
        sss.street = CurrentStreet.streetID;
        if (currentCorpse != null)
        {
            currentCorpse.gameObject.GetComponent <StreetSpriteSort>().street = sss.street;
        }
        gameObject.transform.localPosition = temp;

        delta -= transform.position.y;

        StreetSpriteSort.PlayerStreetSwapp(sss.street);

        AudioManager.Instance.SwitchAtmosphere(CurrentStreet.AtmoType);

        // SmoothCamera.camT.transform.parent = transform.parent;
        if (SmoothCamera.locked = CurrentStreet.lockable)
        {
            SmoothCamera.lockPos  = Vector3.zero;
            SmoothCamera.lockSize = CurrentStreet.size;
            float dy = CurrentStreet.transform.position.y + CurrentStreet.StreetYOffset - (CurrentStreet.GetSuperStreet().transform.position.y + CurrentStreet.GetSuperStreet().StreetYOffset);
            SmoothCamera.lockSize.y += Mathf.Abs(dy);
            SmoothCamera.lockPos.y  -= dy * 0.5f;
            SmoothCamera.Target      = CurrentStreet.transform;
        }
        else
        {
            SmoothCamera.Target  = transform;
            SmoothCamera.lockPos = Vector3.zero;
            // SmoothCamera.targetPosition.x=-transform.position.x/SmoothCamera.Parallax(1,0,delta);
        }

        AudioManager.Instance.PlaySoundOneShot(AudioManager.Instance.ClipEffectTransition, 0.25f);
    }
Esempio n. 3
0
    public void TransitionToStreet(Alley alley)
    {
        CurrentStreet = alley.GetTargetAlley().GetCurrentStreet();
        gameObject.transform.SetParent(CurrentStreet.gameObject.transform);
        Vector3 temp = alley.GetTargetAlley().gameObject.transform.localPosition;

        temp.y = CurrentStreet.StreetYOffset;

        StreetSpriteSort sss = GetComponent <StreetSpriteSort>();

        sss.street = CurrentStreet.streetID;
        gameObject.transform.localPosition = temp;
    }
Esempio n. 4
0
    public void TransitionStreet(Alley alley)
    {
        //if(CurrentStreet != null)
        //{
        //    CurrentStreet.Hide();
        //}
        CurrentStreet = alley.GetTargetAlley().GetCurrentStreet();
        CharacterPlayer.instance.TransitionToStreet(alley);

        //if (CurrentStreet != null)
        //{
        //    CurrentStreet.Show();
        //}
    }
    public static void SimulateBowlingArena(int numberOfLanes, int numberOfGamesToBePlayed, IBonusStrategy bonusStrategy)
    {
        Alley = new Alley(numberOfLanes);

        while (numberOfGamesToBePlayed > 0)
        {
            int numberOfGamesThatCanBeAccomodated = Math.Min(numberOfGamesToBePlayed, numberOfLanes);

            for (int i = 0; i < numberOfGamesThatCanBeAccomodated; i++)
            {
                Alley.FindEmptyLaneAndAssignGame(random.Next(MinNumberOfPlayers, MaxNumberOfPlayers), bonusStrategy);
            }

            Alley.StartGamesInAllOccupiedLanes();

            numberOfGamesToBePlayed = numberOfGamesToBePlayed - numberOfGamesThatCanBeAccomodated;
        }
    }
Esempio n. 6
0
    public override void Tick()
    {
        base.Tick();

        if (bIsDying || IntroManager.instance == null || !IntroManager.instance.bIntroDone)
        {
            return;
        }

        if (CurrentStatus != ENPCStatus.Sleeping)
        {
            currentSleepiness += (SleepinessIncrease * Time.deltaTime);
        }

        //CurrentAction = EAction.Idle;
        CurrentTaskDuration -= Time.deltaTime;

        Log("state: " + CurrentStatus + "" +
            "CurrentTaskDuration: " + CurrentTaskDuration.ToString("##.##") + " - " +
            currentSleepiness.ToString("#.###"));

        float distance   = 0;
        bool  isInVision = CheckPlayerIsInVision(out distance);


        if (CurrentStatus == ENPCStatus.Alarmed || CurrentStatus == ENPCStatus.Alert || CurrentStatus == ENPCStatus.Aggressive)
        {
            if (!lastKnownPosition.HasValue && lastKnownFleeAlley == null)
            {
                //lost all tracks, where is she ?
                Debug.LogWarning("Inconsistent State: no last knownPosition. setting NPC Status back to Neutral.");
                SetStatus(ENPCStatus.Neutral);
                return;
            }

            if (isInVision)
            {
                lastKnownPosition  = CharacterPlayer.instance.transform.position;
                lastKnownFleeAlley = null; // we saw the player, we don't need to remember potential fleeAlley.

                //we see here, don't give up.
                this.CurrentTaskDuration = this.AlarmedDuration;

                //EntityManager.Instance.npcCorpseDetectionDistance
                MoveToTargetPos(lastKnownPosition.Value);
                //check gameover instance here ?!

                //Second winning condition:
                // if the NPC saw you already wtih the corpse,
                // he will chase you to dead even if you don't wear the corpse anymore.
                CheckForCatchDistance(distance);
            }
            else if (lastKnownFleeAlley != null)
            {
                var distanceAlley = Vector3.Distance(lastKnownFleeAlley.transform.position, transform.position);
                if (distanceAlley < EntityManager.Instance.interactableRadius)
                {
                    //Alley targetAlley =  lastKnownFleeAlley.GetTargetAlley();
                    LogWarn("Warping!");
                    TransitionToStreet(lastKnownFleeAlley);

                    //this.transform.position = targetAlley.GetPosition();
                    lastKnownFleeAlley = null;
                    lastKnownPosition  = null;
                }
                else
                {
                    //abbroach further to this alley.
                    //because of parallax scrolling the allay moves - so we update the move to every frame.
                    MoveToTargetPos(lastKnownFleeAlley.GetPosition());
                }
            }
            else
            {
                if (CurrentTaskDuration <= 0)
                {
                    Log("Calming down from State.");
                    //maybe we chased long enought and can calm down.
                    SetStatus(ENPCStatus.Neutral);
                    return;
                }

                //we don't see the player anymore. maybe he used an interactable ?!
                StreetSpriteSort sort = this.GetComponent <StreetSpriteSort>();
                if (sort == null)
                {
                    Debug.LogError("This NPC does not have a StreetSpriteSort", this);
                    return;
                }
                int streetID = 1;
                if (sort == null)
                {
                    Debug.LogWarning("Unable to determine Street ID of NPC ", this);
                }
                else
                {
                    streetID = sort.street;
                }

                var interactable = EntityManager.Instance.GetClosestInteractableWithinRange(lastKnownPosition.Value, streetID);

                if (interactable != null)
                {
                    if (interactable is Alley)
                    {
                        lastKnownPosition  = null;
                        lastKnownFleeAlley = interactable as Alley;
                    }
                    else
                    {
                        LogWarn("Wheres the Player  ? " + interactable.ToString());
                    }
                }



                // we are moving to the last known position.
                //maybe there is an interactable there ?
                //MoveToTargetPos(lastKnownPosition.Value);
            }
            //if ()
            //is player still in sight ?!
            //GetClosestInteractableWithinRange
        }
        else if (CurrentTaskDuration >= 0.0f)
        {
            //just finish current action.
            //Debug.Log("current Action: " + CurrentAction);
        }
        else
        {
            CurrentThinkCooldown -= Time.deltaTime;
            if (CurrentThinkCooldown <= 0.0f)
            {
                Think();
            }
        }

        // START: Stuff from EntityManager
        bool foundACorpse = false;
        bool foundPlayerCarryingCorpse = false;

        if (isInVision)
        {
            if (CharacterPlayer.instance.GetCurrentCorpse() != null && !CharacterPlayer.instance.IsHiding())
            {
                FollowCharacter(CharacterPlayer.instance);
            }

            /*else if (CharacterPlayer.instance.IsHiding())
             * {
             *  SetStatus(ENPCStatus.Neutral);
             * }*/

            foundPlayerCarryingCorpse = true;
            ActivateFoundCorpseText(foundACorpse);

            if (AudioManager.Instance != null)
            {
                if (foundPlayerCarryingCorpse)
                {
                    AudioManager.Instance.SwitchMusic(AudioManager.Instance.ClipMusicChase);
                    //Debug.Log("Player is seen carrying corpse by: " + npc);
                }
                else
                {
                    AudioManager.Instance.SwitchMusic(AudioManager.Instance.ClipMusicWander);
                }
            }
            Log("Corpse detected!! Distance: " + distance);
        }
        // END: Stuff from EntityManager
    }