Example #1
0
        private IEnumerator _RegisterOnTheMinimap()
        {
            while (minimap == null)
            {
                minimap = GameObject.FindObjectOfType <GameMinimap>();
                if (minimap != null)
                {
                    minimap.RegisterPersonage(this.transform, entityType, entitySecondParameter);
                }

                yield return(new WaitForSeconds(0.1f));
            }
        }
Example #2
0
    protected override void OnUpdate()
    {
        var deltaTime     = Time.DeltaTime;
        var groupEntities = _group.ToEntityArray(Allocator.TempJob);
        var otherPlayer   = _otherPlayers.ToEntityArray(Allocator.TempJob);

        if (initForMinimapForPlayers < groupEntities.Length)
        {
            InitCharactersForMinimap(groupEntities);
            initForMinimapForPlayers = groupEntities.Length;
        }

        if (gameMinimap == null)
        {
            gameMinimap = GameObject.FindObjectOfType <GameMinimap>();
        }
        if (gameTopPanel == null)
        {
            gameTopPanel = GameObject.FindObjectOfType <GameTopPanel>();
        }

        foreach (var e in groupEntities)
        {
            var player      = EntityManager.GetComponentData <PlayerData>(e);
            var isMyPlayer  = EntityManager.HasComponent <PlayerInput>(e);
            var data        = EntityManager.GetComponentData <CharacterPresenter>(e);
            var translation = EntityManager.GetComponentData <Translation>(e);

            var attack = EntityManager.GetComponentData <Attack>(e);
            var damage = EntityManager.GetComponentData <Damage>(e);

            var go       = EntityManager.GetComponentObject <GameObject>(e);
            var bindData = EntityManager.GetComponentObject <CharactersBindData>(e);

            float3 attackDirection = new float3(attack.AttackDirection.x, 0, attack.AttackDirection.y);
            var    isAutoAttack    = math.lengthsq(attackDirection) < 0.01f;

            float3 prevPos = go.transform.position;
            var    dist    = math.distance(prevPos, translation.Value);

            go.transform.position = Vector3.Lerp(go.transform.position, translation.Value, deltaTime * MoveSpeed);
            //go.transform.position = translation.Value;

            bindData.UpdateHealthBar(player.health / (float)player.maxHealth);

            if (isMyPlayer)
            {
                gameMinimap?.SetDeadZoneRadius(player.damageRadius);
                gameTopPanel?.SetCountdownValue(player.damageRadius);

                _fxData.SetDeadZoneRadius(player.damageRadius);
                _uiController.SetPlayerGo(go);
                _uiController.SetPlayerPosition(translation.Value);
                _uiController.GameUI.SetGems(player.GetItems());

                var tick = World.GetExistingSystem <ClientSimulationSystemGroup>().ServerTick;

                var input = EntityManager.GetBuffer <PlayerInput>(e);
                if (input.GetDataAtTick(tick - 1, out var pinput))
                {
                    var direction = new Vector2(pinput.horizontal, pinput.vertical);
                    var prevSpeed = bindData.Animator.GetFloat(Speed);
                    var newSpeed  = direction.sqrMagnitude > 0.01 ? 1 : 0;
                    bindData.Animator.SetFloat(Speed, math.lerp(prevSpeed, newSpeed, deltaTime * RunAnimationSmoothFactor));
                }

                if (player.health <= 0.0f && !gameOverIsShowed)
                {
                    _uiController.GameUI.HideBottom();
                    _uiController.GameOver.Setup(new Scripts.Scenes.Client.UI.RewardData());
                    _uiController.GameOver.Show(() => { InitState.ShowBattleResult = true; SceneManager.LoadScene(Constants.SCENE_LOBBY); });
                    gameOverIsShowed = true;
                }
            }
            else
            {
                var prevSpeed = bindData.Animator.GetFloat(Speed);
                var newSpeed  = dist > 0.1 ? 1 : 0;
                bindData.Animator.SetFloat(Speed, math.lerp(prevSpeed, newSpeed, deltaTime * RunAnimationSmoothFactor));
            }

            var target = attack.Target;

            if ((attack.ProccesedId != 0 || attack.AttackType != 0) && attack.NeedApplyDamage == false)
            {
                if (data.AttackTransId != attack.Seed)
                {
                    var skillInfo = _appConfig.GetSkillByAttackType(attack.AttackType);

                    Debug.Log($" [CharacterPresenter] {skillInfo.Id} " +
                              $"To => {attack.Target} => {attack.AttackType} =>" +
                              $"Direction => {attack.AttackDirection} =>" +
                              $" {data.AttackTransId} != {attack.Seed}");

                    bindData.Animator.SetInteger(Type, _appConfig.GetSkillIndex(skillInfo));
                    bindData.Animator.SetTrigger(AttackTrigger);
                    data.AttackTransId = attack.Seed;
                    EntityManager.SetComponentData(e, data);

                    var       fxDirection     = attackDirection;
                    Transform targetTransform = target == Entity.Null
                        ? default
                        : EntityManager.GetComponentObject <GameObject>(target)?.transform;

                    if (isAutoAttack)
                    {
                        if (target == Entity.Null)
                        {
                            fxDirection = go.transform.forward;
                        }
                        else
                        {
                            fxDirection = EntityManager.GetComponentData <Translation>(target).Value - translation.Value;
                        }
                    }

                    // Debug.LogWarning($"Client:Attack To => {e} => {isAutoAttack} {target} {fxDirection}");
                    _fxData.Start(skillInfo, go, bindData.Weapom.transform, fxDirection, targetTransform);
                }//else  Debug.LogWarning($"Client:Attack To => {e} => {data.AttackTransId}{attack.Seed}");

                if (isAutoAttack)
                {
                    if (target != Entity.Null)
                    {
                        var newDirection = EntityManager.GetComponentData <Translation>(target).Value - translation.Value;
                        go.transform.forward = Vector3.Lerp(go.transform.forward, math.normalize(newDirection), RotationSpeed * Time.DeltaTime);
                    }
                }
                else
                {
                    go.transform.forward = Vector3.Lerp(go.transform.forward, attackDirection, RotationSpeed * deltaTime);
                }
            }
            else
            {
                if (dist > 0.01f)
                {
                    var direction = math.normalize(translation.Value - prevPos);
                    go.transform.forward = Vector3.Lerp(go.transform.forward, direction, RotationSpeed * deltaTime);
                }
            }

            if (damage.DamageType != 0 && data.DamageTransId != damage.Seed)
            {
                Debug.LogWarning($"Client:Damage To => {e} => {damage.DamageType}");
                bindData.Animator.SetTrigger(DamageTrigger);
                data.DamageTransId = damage.Seed;
                EntityManager.SetComponentData(e, data);
            }

            bindData.Animator.SetBool(Death, player.health <= 0.0f);
        }

        groupEntities.Dispose();
        otherPlayer.Dispose();
    }