void DrawRange() { Vectors = new List <Vector3>(); IPS_Functions.Weapons weapons = data.weapons; float Range = weapons.HighRange() / MissionController.multiplyDistance; for (float i = 0; i < 2 * Mathf.PI; i += scale) { float x = Range * Mathf.Cos(i) + data.agent.transform.position.x; float z = Range * Mathf.Sin(i) + data.agent.transform.position.z; Vector3 pos = new Vector3(x, data.agent.transform.position.y - 1f, z); Vector3 result = pos; RaycastHit hit; if (Physics.Raycast(result, (-1) * data.agent.transform.up, out hit, 1000f, 0)) { result = hit.point; result.y += 0.01f; } Vectors.Add(result); } data.lineRender[1].positionCount = Vectors.Count; data.lineRender[1].SetPositions(Vectors.ToArray()); data.lineRender[1].enabled = true; }
void WeaponInRange() { float posDistance = Vector3.Distance(data.target, data.agent.transform.position); IPS_Functions.Weapons weapons = data.weapons; float maxRange = weapons.HighRange(); canAttack = true; // 0 - brak akcji, 1 - atak, 2 - podejście i atak int[] w = new int[3]; data.slotIndex = 0; if (weapons.w1 != null && weapons.w1.canUse) { switch (weapons.w1.isWeapon) { case 1: w[1] = NoneRayHit(posDistance, weapons.w1.range); break; case 2: switch (weapons.w1.missileFlight) { case MissileFlight.curve: w[1] = CurveRayHit(posDistance, weapons.w1.range); break; case MissileFlight.simply: w[1] = SimplyRayHit(posDistance, weapons.w1.range); break; } break; } } if (weapons.w2 != null && weapons.w2.canUse) { Debug.Log(weapons.w2.canUse + " " + weapons.w2.isWeapon + " " + weapons.w2.missileFlight); switch (weapons.w2.isWeapon) { case 1: w[2] = NoneRayHit(posDistance, weapons.w2.range); break; case 2: switch (weapons.w2.missileFlight) { case MissileFlight.curve: w[2] = CurveRayHit(posDistance, weapons.w2.range); break; case MissileFlight.simply: w[2] = SimplyRayHit(posDistance, weapons.w2.range); break; } break; } } if (weapons.fist.canUse) { w[0] = NoneRayHit(posDistance, weapons.fist.range); } switch (w[1]) { case 0: break; case 1: data.slotIndex += 1; break; case 2: if (w[2] != 1) { data.slotIndex += 1; } break; } switch (w[2]) { case 0: break; case 1: data.slotIndex += 2; break; case 2: if (w[1] != 1) { data.slotIndex += 2; } break; } if (w[0] == 0 && data.slotIndex == 0) { data.slotIndex = -1; } Debug.Log("w0: " + w[0] + " w1: " + w[1] + " w2: " + w[2]); if (w.Count(x => x == 1) > 0) { ResetPath(); IPS_Functions.PathRenderAttack(data, weapons); } else { if (w.Count(x => x == 2) > 0) { IPS_Functions.PathRender(data, IPS_Functions.PathRenderType.Move_Attack); if (weapons.DistanceAttack()) { canAttack = false; } else { data.agent.SetDestination(hitTarget); } } else { ResetPath(); canAttack = false; } } IPS_Functions.MoveCost(data); AttackCost(); }