Пример #1
0
    protected IEnumerator CoroutineRotation(Vector3 targetPos)
    {
        Vector3 previousPos  = transform.position;
        float   stopDistance = 0.12f;

        if (_targetInteractable)
        {
            stopDistance = 0.125f;
        }
        if (_targetItemPickUp)
        {
            stopDistance = 0.05f;
        }

        SetAnimation(true);
        _isTapMoving = true;

        while (Vector3.Distance(transform.position, targetPos) > stopDistance)
        {
            Vector3 midPos     = ((transform.position + targetPos) / 2f);
            Vector3 snapMidPos = midPos.normalized * transform.position.magnitude;

            ECollision lCollision = CanMoveForward(playerAsset.transform.forward);

            if (lCollision == ECollision.NONE)
            {
                previousPos         = transform.position;
                transform.position += (snapMidPos - transform.position).normalized * Time.deltaTime / 3f;

                if (previousPos == transform.position)
                {
                    _isTapMoving = false;
                    break;
                }

                _targetRotation = Quaternion.LookRotation(transform.position - previousPos, transform.position);
                playerAsset.transform.rotation = Quaternion.Lerp(playerAsset.transform.rotation, _targetRotation, Time.deltaTime * 10);
                transform.position             = SnapToPlanet(transform.position);
                Reoriente();
                UpdateCells(true);

                if (posCallBack != Vector3.zero)
                {
                    if (Vector3.Distance(transform.position, posCallBack) <= 0.2f)
                    {
                        vCallBack();
                        posCallBack = Vector3.zero;
                        vCallBack   = null;
                    }
                }
            }
            else
            {
                _targetItemPickUp = null;
                _isTapMoving      = false;
                StopMove();
                break;
            }

            DoEmitter();

            yield return(null);
        }

        transform.position = SnapToPlanet(transform.position);
        SetAnimation(false);
        _isTapMoving = false;

        if (!_targetInteractable && !_targetItemPickUp)
        {
            yield break;
        }

        if (_targetItemPickUp)
        {
            if (PlayerManager.Instance.playerType != EPlayer.ECO)
            {
                CancelMove();
                yield break;
            }

            _targetItemPickUp.GetComponent <ItemPickup>().PickUp();
            StopMove();
            yield break;
        }

        if (Vector3.Distance(transform.position, targetPos) <= stopDistance)
        {
            InteractablePNJ lPnj            = _targetInteractable as InteractablePNJ;
            NPCGender       genderComponent = lPnj.GetComponent <NPCGender>();

            if (PlayerManager.Instance.playerType == EPlayer.NGO)
            {
                if (lPnj && lPnj.CanTalkTo(EPlayer.NGO))
                {
                    playerAsset.transform.rotation = Quaternion.LookRotation(lPnj.transform.position - transform.position, transform.up);
                    UIManager.instance.PNJState.Active(false);
                    PointingBubble.instance.Show(true);
                    PointingBubble.instance.SetProperties(lPnj);
                    QuestManager.Instance.NGOTalkTo(lPnj.IDname);
                    lPnj = null;
                    CancelMove();

                    if (genderComponent)
                    {
                        Events.Instance.Raise(new OnNPCDialogueSFX(genderComponent.gender));
                    }
                }
                else
                {
                    lPnj = null;
                    CancelMove();
                }
            }
            else if (lPnj && PlayerManager.Instance.playerType == EPlayer.GOV)
            {
                playerAsset.transform.rotation = Quaternion.LookRotation(lPnj.transform.position - transform.position, transform.up);
                if (lPnj.CanTalkTo(EPlayer.GOV))
                {
                    Events.Instance.Raise(new OnPopupBuilding(lPnj.budgetComponent, lPnj));
                }
                lPnj = null;
                CancelMove();

                if (genderComponent)
                {
                    Events.Instance.Raise(new OnNPCDialogueSFX(genderComponent.gender));
                }
            }
            else if (lPnj && PlayerManager.Instance.playerType == EPlayer.ECO)
            {
                playerAsset.transform.rotation = Quaternion.LookRotation(lPnj.transform.position - transform.position, transform.up);
                if (lPnj.CanTalkTo(EPlayer.ECO))
                {
                    InventoryScreen.Instance.HandleActiveFromNPC(lPnj);
                    QuestManager.Instance.EcoTalkTo(lPnj.budgetComponent.type);
                }
                lPnj = null;
                CancelMove();

                if (genderComponent)
                {
                    Events.Instance.Raise(new OnNPCDialogueSFX(genderComponent.gender));
                }
            }
        }
        else
        {
            StopMove();
        }

        yield break;
    }
Пример #2
0
 public void SetGender(NPCGender gender)
 {
     Gender = gender;
 }
Пример #3
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="isMale"></param>
 /// <returns></returns>
 public static string HumanName( NPCGender gender )
 {
     return PickFromList( (gender==NPCGender.Male ? HumamMaleNames : HumamFemaleNames) );
 }
Пример #4
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="isMale"></param>
 /// <returns></returns>
 public static string OrcishName( NPCGender gender )
 {
     return PickFromList( OrcMaleNames );
 }
Пример #5
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="isMale"></param>
 /// <returns></returns>
 public static string GnomishName( NPCGender gender )
 {
     return PickFromList( (gender==NPCGender.Male ? GnomishMaleNames : GnomishFemaleNames) );
 }
Пример #6
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="isMale"></param>
 /// <returns></returns>
 public static string HalflingName( NPCGender gender )
 {
     return PickFromList( (gender==NPCGender.Male ? HalflingMaleNames : HalflingFemaleNames) ) + " " + PickFromList( HalflingSurnames );
 }
Пример #7
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="race"></param>
        /// <param name="isMale"></param>
        /// <returns></returns>
        public static string GenerateName( NPCRace race, NPCGender gender )
        {
            switch( race )
              {
            case NPCRace.Dragonborne:
              return DragonborneName( gender );

            case NPCRace.Dwarf:
              return DwarvenName( gender );

            case NPCRace.Eldarin:
              return EladrinName( gender );

            case NPCRace.Elf:
              return ElvenName( gender );

            case NPCRace.HalfElf:
              if( rand.Next(2)==0 )
            return ElvenName( gender );
              else
            return HumanName( gender );

            case NPCRace.Gnome:
              return GnomishName( gender );

            case NPCRace.Orc:
              return OrcishName( gender );

            case NPCRace.HalfOrc:
              if( rand.Next(2)==0 )
            return OrcishName( gender );
              else
            return HumanName( gender );

            case NPCRace.Angelic:
              return AngelicName( gender );

            default: // human
              return HumanName( gender );
              }
        }
Пример #8
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="isMale"></param>
 /// <returns></returns>
 public static string ElvenName( NPCGender gender )
 {
     return PickFromList( (gender==NPCGender.Male ? ElvenMaleNames : ElvenFemaleNames) ) + " " + PickFromList( ElvenSurnames );
 }
Пример #9
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="isMale"></param>
 /// <returns></returns>
 public static string EladrinName( NPCGender gender )
 {
     return PickFromList( (gender==NPCGender.Male ? EladrinMaleNames : EladrinFemaleNames) );
 }
Пример #10
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="isMale"></param>
 /// <returns></returns>
 public static string DragonborneName( NPCGender gender )
 {
     return PickFromList( gender==NPCGender.Male ? DragonBorneMaleNames : DragonBorneFemaleNames );
 }
Пример #11
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="isMale"></param>
 /// <returns></returns>
 public static string AngelicName( NPCGender gender )
 {
     return PickFromList( AngelicMaleNames );
 }