private void OnGUI() { if (!MarkTarget) { return; } if (StatMaster.isMP && StatMaster.isHosting) { if (parentBlock.ParentMachine.PlayerID != 0) { return; } } if (!Switch) { return; } if (RadarType == RadarTypes.PassiveRadar) { return; } if (RadarTarget.IsNullTarget()) { return; } if (Vector3.Dot(Camera.main.transform.forward, targetPosition - Camera.main.transform.position) > 0) { Vector3 onScreenPosition; onScreenPosition = Camera.main.WorldToScreenPoint(targetPosition); GUI.DrawTexture(new Rect(onScreenPosition.x - squareWidth * 0.5f, Camera.main.pixelHeight - onScreenPosition.y - squareWidth * 0.5f, squareWidth, squareWidth), redSquareAim); if (ShowBulletLanding && foundHitPosition) { onScreenPosition = Camera.main.WorldToScreenPoint(hitPosition); GUI.DrawTexture(new Rect(onScreenPosition.x - circleWidth * 0.5f, Camera.main.pixelHeight - onScreenPosition.y - circleWidth * 0.5f, circleWidth, circleWidth), redCircleAim); } } }
void UpdateGameComponenets() { if (animator == null) { animator = gameObject.GetComponent <Animator>(); } if (navMeshAgent == null) { navMeshAgent = gameObject.GetComponent <NavMeshAgent>(); } if (charController == null) { charController = gameObject.GetComponent <CharacterController>(); } //Attack mode uses a collider to negate the character controller's push against the player //And this to allow the collider to interact with terrain correctly Rigidbody attackRb = gameObject.GetComponent <Rigidbody>(); if (attackRb) { Destroy(attackRb); } CapsuleCollider attackCollider = gameObject.GetComponent <CapsuleCollider>(); if (attackCollider) { Destroy(attackCollider); } RadarTarget radarTarget = gameObject.GetComponentInChildren <RadarTarget>(); if (radarTarget) { //Makes the radar refresh more responsive so the radar objects won't track dead zombies Destroy(radarTarget.gameObject); } animatedDeath = true; }
private void Update() { if (lastSwitchState != Switch) { lastSwitchState = Switch; if (Switch) { if (RadarType == RadarTypes.ActiveRadar) { ActivateDetectionZone(); } else { OnNotifyActiveRadarForNewTarget?.Invoke(parentBlock.GetComponent <RocketScript>().GroupFireKey.GetKey(0)); } } else { DeactivateDetectionZone(); } } if (!Switch) { return; } if (StatMaster.isClient) { return; } if (canBeOverridden || RadarType == RadarTypes.PassiveRadar) { return; } if (RadarTarget != null) { if (!InRadarRange(RadarTarget)) { ClearTarget(true); } } if (targetList.Count > 0 && !targetList.SetEquals(lastTargetList) || RadarTarget == null) { #if DEBUG //Debug.Log(blockList.Count)); #endif if (!isChoosingBlock) { #if DEBUG Debug.Log("choose target"); #endif isChoosingBlock = true; lastTargetList = targetList; if (RadarTarget == null) { RadarTarget = new Target(); } ChooseTargetInTargetList(targetList); void ChooseTargetInTargetList(HashSet <Target> targets) { foreach (var itemTarget in targets) { CompareTarget(itemTarget); } isChoosingBlock = false; void CompareTarget(Target other) { //Debug.Log(ignoreList.Contains(other.ReturnTargetName()) + " exist"); //if (ignoreList.Contains(other.ReturnTargetName())) return; if (CheckIfSameGroupRocket(other)) { return; } RadarTarget.RefreshWarningValue(); other.RefreshWarningValue(); if (other.WarningValue > RadarTarget.WarningValue) { SetTarget(other); } else if (other.WarningValue == RadarTarget.WarningValue) { var distance = (other.Position - transform.position).magnitude; if (distance < TargetDistance) { SetTarget(other); } } } bool CheckIfSameGroupRocket(Target target) { if (StatMaster.isMP) { return(false); } if (target.ReturnTimedrocket() == null) { return(false); } RocketScript rs = target.ReturnBlockBehaviour().GetComponentInAll <RocketScript>(); RocketScript selfRS = parentBlock.GetComponentInAll <RocketScript>(); if (selfRS == null) { return(false); } if (rs == null) { return(false); } if (selfRS.SPTeamKey.GetKey(0) == rs.SPTeamKey.GetKey(0)) { return(true); } return(false); } } } } }