protected virtual void TabTargetUpdate() { if (PlayerCharacterEntity == null || !PlayerCharacterEntity.IsOwnerClient) { return; } if (Targeting.SelectedTarget == null && Targeting.PotentialTarget == null && Targeting.CastingTarget == null) { ClearTarget(); } if (CacheGameplayCameraControls != null) { CacheGameplayCameraControls.target = CameraTargetTransform; } if (CacheMinimapCameraControls != null) { CacheMinimapCameraControls.target = CameraTargetTransform; } if (CacheTargetObject != null) { CacheTargetObject.gameObject.SetActive(destination.HasValue); } if (PlayerCharacterEntity.IsDead()) { ClearTarget(); ClearQueueUsingSkill(); destination = null; isFollowingTarget = false; CancelBuild(); CacheUISceneGameplay.SetTargetEntity(null); } else { TabTargetUpdateTarget(); } if (destination.HasValue) { if (CacheTargetObject != null) { CacheTargetObject.transform.position = destination.Value; } if (Vector3.Distance(destination.Value, MovementTransform.position) < StoppingDistance + 0.5f) { destination = null; } } Targeting.UpdateTargeting(); ClearQueuedSkillIfInSafeZone(); TabTargetUpdateInput(); TabTargetUpdateFollowTarget(); }
protected override void Update() { if (PlayerCharacterEntity == null || !PlayerCharacterEntity.IsOwnerClient) { return; } base.Update(); if (CacheTargetObject != null) { CacheTargetObject.gameObject.SetActive(destination.HasValue); } if (PlayerCharacterEntity.IsDead()) { queueUsingSkill = null; destination = null; if (CacheUISceneGameplay != null) { CacheUISceneGameplay.SetTargetEntity(null); } CancelBuild(); } else { if (CacheUISceneGameplay != null) { CacheUISceneGameplay.SetTargetEntity(SelectedEntity); } } if (destination.HasValue) { if (CacheTargetObject != null) { CacheTargetObject.transform.position = destination.Value; } if (Vector3.Distance(destination.Value, CharacterTransform.position) < StoppingDistance + 0.5f) { destination = null; } } UpdateInput(); UpdateFollowTarget(); UpdateLookAtTarget(); }
protected virtual void TabTargetUpdateQueuedSkill() { if (PlayerCharacterEntity.IsDead()) { ClearQueueUsingSkill(); return; } if (queueUsingSkill.skill == null || queueUsingSkill.level <= 0) { return; } if (PlayerCharacterEntity.IsPlayingActionAnimation()) { return; } destination = null; BaseSkill skill = queueUsingSkill.skill; Vector3? aimPosition = queueUsingSkill.aimPosition; if (skill.HasCustomAimControls()) { // Target not required, use skill immediately TurnCharacterToPosition(aimPosition.Value); RequestUsePendingSkill(); isFollowingTarget = false; return; } if (skill.IsAttack() || skill.RequiredTarget()) { // Let's stick to tab targeting instead of finding a random entity if (CacheActionTarget != null && CacheActionTarget is BaseCharacterEntity) { UseSkillOn(CacheActionTarget); return; } ClearQueueUsingSkill(); return; } // Target not required, use skill immediately RequestUsePendingSkill(); }
protected void UpdateInput() { if (GenericUtils.IsFocusInputField()) { return; } if (PlayerCharacterEntity.IsDead()) { return; } // If it's building something, don't allow to activate NPC/Warp/Pickup Item if (!ConstructingBuildingEntity) { // Activate nearby npcs / players / activable buildings if (InputManager.GetButtonDown("Activate")) { targetPlayer = null; if (ActivatableEntityDetector.players.Count > 0) { targetPlayer = ActivatableEntityDetector.players[0]; } targetNpc = null; if (ActivatableEntityDetector.npcs.Count > 0) { targetNpc = ActivatableEntityDetector.npcs[0]; } targetBuilding = null; if (ActivatableEntityDetector.buildings.Count > 0) { targetBuilding = ActivatableEntityDetector.buildings[0]; } targetVehicle = null; if (ActivatableEntityDetector.vehicles.Count > 0) { targetVehicle = ActivatableEntityDetector.vehicles[0]; } // Priority Player -> Npc -> Buildings if (targetPlayer && CacheUISceneGameplay) { // Show dealing, invitation menu SelectedEntity = targetPlayer; CacheUISceneGameplay.SetActivePlayerCharacter(targetPlayer); } else if (targetNpc) { // Talk to NPC SelectedEntity = targetNpc; PlayerCharacterEntity.RequestNpcActivate(targetNpc.ObjectId); } else if (targetBuilding) { // Use building SelectedEntity = targetBuilding; ActivateBuilding(targetBuilding); } else if (targetVehicle) { // Enter vehicle PlayerCharacterEntity.RequestEnterVehicle(targetVehicle.ObjectId); } else { // Enter warp, For some warp portals that `warpImmediatelyWhenEnter` is FALSE PlayerCharacterEntity.RequestEnterWarp(); } } // Pick up nearby items if (InputManager.GetButtonDown("PickUpItem")) { targetItemDrop = null; if (ItemDropEntityDetector.itemDrops.Count > 0) { targetItemDrop = ItemDropEntityDetector.itemDrops[0]; } if (targetItemDrop != null) { PlayerCharacterEntity.RequestPickupItem(targetItemDrop.ObjectId); } } // Reload if (InputManager.GetButtonDown("Reload")) { // Reload ammo when press the button ReloadAmmo(); } if (InputManager.GetButtonDown("ExitVehicle")) { // Exit vehicle PlayerCharacterEntity.RequestExitVehicle(); } if (InputManager.GetButtonDown("SwitchEquipWeaponSet")) { // Switch equip weapon set PlayerCharacterEntity.RequestSwitchEquipWeaponSet((byte)(PlayerCharacterEntity.EquipWeaponSet + 1)); } if (InputManager.GetButtonDown("Sprint")) { // Toggles sprint state isSprinting = !isSprinting; } // Auto reload if (PlayerCharacterEntity.EquipWeapons.rightHand.IsAmmoEmpty() || PlayerCharacterEntity.EquipWeapons.leftHand.IsAmmoEmpty()) { // Reload ammo when empty and not press any keys ReloadAmmo(); } } // Update inputs UpdateLookInput(); UpdateWASDInput(); // Set sprinting state PlayerCharacterEntity.SetExtraMovement(isSprinting ? ExtraMovementState.IsSprinting : ExtraMovementState.None); }
protected virtual void UpdateInput() { if (GenericUtils.IsFocusInputField()) { return; } if (CacheGameplayCameraControls != null) { CacheGameplayCameraControls.updateRotationX = false; CacheGameplayCameraControls.updateRotationY = false; CacheGameplayCameraControls.updateRotation = InputManager.GetButton("CameraRotate"); } if (PlayerCharacterEntity.IsDead()) { return; } // If it's building something, don't allow to activate NPC/Warp/Pickup Item if (CurrentBuildingEntity == null) { // Activate nearby npcs / players / activable buildings if (InputManager.GetButtonDown("Activate")) { targetPlayer = null; if (activatingEntityDetector.players.Count > 0) { targetPlayer = activatingEntityDetector.players[0]; } targetNpc = null; if (activatingEntityDetector.npcs.Count > 0) { targetNpc = activatingEntityDetector.npcs[0]; } targetBuilding = null; if (activatingEntityDetector.buildings.Count > 0) { targetBuilding = activatingEntityDetector.buildings[0]; } // Priority Player -> Npc -> Buildings if (targetPlayer != null && CacheUISceneGameplay != null) { // Show dealing, invitation menu CacheUISceneGameplay.SetActivePlayerCharacter(targetPlayer); } else if (targetNpc != null) { // Talk to NPC PlayerCharacterEntity.RequestNpcActivate(targetNpc.ObjectId); } else if (targetBuilding != null) { // Use building ActivateBuilding(targetBuilding); } else { // Enter warp, For some warp portals that `warpImmediatelyWhenEnter` is FALSE PlayerCharacterEntity.RequestEnterWarp(); } } // Pick up nearby items if (InputManager.GetButtonDown("PickUpItem")) { targetItemDrop = null; if (itemDropEntityDetector.itemDrops.Count > 0) { targetItemDrop = itemDropEntityDetector.itemDrops[0]; } if (targetItemDrop != null) { PlayerCharacterEntity.RequestPickupItem(targetItemDrop.ObjectId); } } // Reload if (InputManager.GetButtonDown("Reload")) { // Reload ammo when press the button ReloadAmmo(); } // Find target to attack if (InputManager.GetButtonDown("FindEnemy")) { ++findingEnemyIndex; if (findingEnemyIndex < 0 || findingEnemyIndex >= enemyEntityDetector.characters.Count) { findingEnemyIndex = 0; } if (enemyEntityDetector.characters.Count > 0) { SetTarget(null); if (!enemyEntityDetector.characters[findingEnemyIndex].IsDead()) { SetTarget(enemyEntityDetector.characters[findingEnemyIndex]); if (SelectedEntity != null) { targetLookDirection = (SelectedEntity.CacheTransform.position - PlayerCharacterEntity.CacheTransform.position).normalized; } } } } // Auto reload if (PlayerCharacterEntity.EquipWeapons.rightHand.IsAmmoEmpty() || PlayerCharacterEntity.EquipWeapons.leftHand.IsAmmoEmpty()) { // Reload ammo when empty and not press any keys ReloadAmmo(); } } // Update enemy detecting radius to attack distance enemyEntityDetector.detectingRadius = PlayerCharacterEntity.GetAttackDistance(false) + lockAttackTargetDistance; // Update inputs UpdatePointClickInput(); UpdateWASDInput(); UpdateBuilding(); }
public virtual void TabTargetUpdateInput() { bool isFocusInputField = GenericUtils.IsFocusInputField(); bool isPointerOverUIObject = CacheUISceneGameplay.IsPointerOverUIObject(); if (CacheGameplayCameraControls != null) { CacheGameplayCameraControls.updateRotationX = false; CacheGameplayCameraControls.updateRotationY = false; CacheGameplayCameraControls.updateRotation = !isFocusInputField && !isPointerOverUIObject && InputManager.GetButton("CameraRotate"); CacheGameplayCameraControls.updateZoom = !isFocusInputField && !isPointerOverUIObject; } if (isFocusInputField) { return; } if (PlayerCharacterEntity.IsDead()) { return; } // If it's building something, don't allow to activate NPC/Warp/Pickup Item if (ConstructingBuildingEntity == null) { Targeting.HandleTargeting(); if (InputManager.GetButtonDown("PickUpItem")) { PickUpItem(); } if (InputManager.GetButtonDown("Reload")) { ReloadAmmo(); } if (InputManager.GetButtonDown("ExitVehicle")) { PlayerCharacterEntity.CallServerExitVehicle(); } if (InputManager.GetButtonDown("SwitchEquipWeaponSet")) { PlayerCharacterEntity.CallServerSwitchEquipWeaponSet((byte)(PlayerCharacterEntity.EquipWeaponSet + 1)); } if (InputManager.GetButtonDown("Sprint")) { isSprinting = !isSprinting; } // Auto reload if (PlayerCharacterEntity.EquipWeapons.rightHand.IsAmmoEmpty() || PlayerCharacterEntity.EquipWeapons.leftHand.IsAmmoEmpty()) { ReloadAmmo(); } } // Update enemy detecting radius to attack distance EnemyEntityDetector.detectingRadius = Mathf.Max(PlayerCharacterEntity.GetAttackDistance(false), wasdClearTargetDistance); // Update inputs TabTargetUpdateQueuedSkill(); TabTargetUpdatePointClickInput(); TabTargetUpdateWASDInput(); // Set sprinting state PlayerCharacterEntity.SetExtraMovement(isSprinting ? ExtraMovementState.IsSprinting : ExtraMovementState.None); }
protected virtual void UpdateInput() { var fields = ComponentCollector.Get(typeof(InputFieldWrapper)); foreach (var field in fields) { if (((InputFieldWrapper)field).isFocused) { destination = null; PlayerCharacterEntity.StopMove(); return; } } if (CacheGameplayCameraControls != null) { CacheGameplayCameraControls.updateRotation = InputManager.GetButton("CameraRotate"); } if (PlayerCharacterEntity.IsDead()) { return; } // If it's building something, don't allow to activate NPC/Warp/Pickup Item if (currentBuildingEntity == null) { // Activate nearby npcs / players / activable buildings if (InputManager.GetButtonDown("Activate")) { targetPlayer = null; targetNpc = null; tempCount = OverlapObjects(CharacterTransform.position, gameInstance.conversationDistance, gameInstance.characterLayer.Mask); for (tempCounter = 0; tempCounter < tempCount; ++tempCounter) { tempGameObject = GetOverlapObject(tempCounter); if (targetPlayer == null) { targetPlayer = tempGameObject.GetComponent <BasePlayerCharacterEntity>(); if (targetPlayer == PlayerCharacterEntity) { targetPlayer = null; } } if (targetNpc == null) { targetNpc = tempGameObject.GetComponent <NpcEntity>(); } } // Priority Player -> Npc -> Buildings if (targetPlayer != null && CacheUISceneGameplay != null) { CacheUISceneGameplay.SetActivePlayerCharacter(targetPlayer); } else if (targetNpc != null) { PlayerCharacterEntity.RequestNpcActivate(targetNpc.ObjectId); } if (overlapColliders.Length == 0) { PlayerCharacterEntity.RequestEnterWarp(); } } // Pick up nearby items if (InputManager.GetButtonDown("PickUpItem")) { tempCount = OverlapObjects(CharacterTransform.position, gameInstance.pickUpItemDistance, gameInstance.itemDropLayer.Mask); for (tempCounter = 0; tempCounter < tempCount; ++tempCounter) { tempGameObject = GetOverlapObject(tempCounter); targetItemDrop = tempGameObject.GetComponent <ItemDropEntity>(); if (targetItemDrop != null) { PlayerCharacterEntity.RequestPickupItem(targetItemDrop.ObjectId); break; } } } } UpdatePointClickInput(); UpdateWASDInput(); UpdateBuilding(); }