override public void Update(cl_Sector Sector) { base.Update(Sector); position += direction * speed * Time.deltaTime; if (target == null) { if (targetTimer < 10) { targetTimer += Time.deltaTime; } else { if (Random.Range(0, 10) == 0) { List <int> targetWeights = new List <int>(); for (int i = 0; i < Sector.sectorObjects.Count; i++) { if (Sector.sectorObjects[i].tags.Contains(PLAYER) || Sector.sectorObjects[i].tags.Contains(TRADER)) { targetWeights.Add(i); } } target = Sector.sectorObjects[targetWeights[Random.Range(0, targetWeights.Count)]]; } targetTimer -= 10; } } else { for (int i = 0; i < weapons.Count; i++) { AttackShip(target, i); } } }
public override void Damaged(cl_Weapon Weapon, cl_SectorObject attacker) { base.Damaged(Weapon, attacker); if (hp <= 0) { OnDestroy(attacker); } }
//Class Methods protected override void OnDestroy(cl_SectorObject Attacker) { base.OnDestroy(Attacker); if (Attacker.tags.Contains(PLAYER)) { Attacker.GetVar <PlayerController>(cl_Ship_Player.CONTROLLER).currency += currencyVal; } }
//Base Methods virtual protected void AttackShip(cl_SectorObject Target, int Weapon) { if (Weapon < weapons.Count && Weapon >= 0) { if (weapons[Weapon].GetVar <float>(cl_Weapon.COOLDOWNTIMER) >= weapons[Weapon].GetVar <float>(cl_Weapon.COOLDOWN)) { if (Random.value < weapons[Weapon].GetVar <float>(cl_Weapon.ACCURACY) * (1.0f - evasion)) { Target.Damaged(weapons[Weapon], this); } } } else { throw new System.Exception("Index " + Weapon + " is not a valid weapon"); } }
void Start() { gyroContainer = new GameObject("Gyro Container"); gyroContainer.transform.rotation = Quaternion.Euler(90f, 90f, 0f); gyroContainer.transform.position = transform.position; rotatation = new Quaternion(0f, 0f, 1f, 0f); transform.SetParent(gyroContainer.transform); gyroEnabled = EnableGyro(); objectManager = GameObject.FindGameObjectWithTag("GameManager"); sectorController = objectManager.GetComponent <scr_SectorController>(); currSector = sectorController.currSector; //sectorObjects = currSector.sectorObjects; sectorObjects = sectorController.currSector.sectorObjects; hitPlane = new Plane(transform.forward, transform.forward * distanceToPlane); eyeTransform = eye.GetComponent <Transform>(); cam = Camera.FindObjectOfType <Camera>(); player = currSector.sectorObjects[0]; }
//Default methods virtual public void Damaged(cl_Weapon Weapon, cl_SectorObject attacker) { int damageTaken = Weapon.GetVar <int>(cl_Weapon.DAMAGE); if (Weapon.tags.Contains(cl_Weapon.PIERCING) == false) { if (Weapon.tags.Contains(cl_Weapon.EXPLOSIVE)) { damageTaken *= 2; shield -= damageTaken; damageTaken = -(shield / 2); } else { shield -= damageTaken; damageTaken = -shield; } } if (damageTaken > 0) { if (Weapon.tags.Contains(cl_Weapon.KINETIC)) { hp -= damageTaken * 2; } else { hp -= damageTaken; } if (Weapon.tags.Contains(cl_Weapon.ENERGY) == false) { damageTaken /= 2; } for (int i = 0; i < damageTaken; i++) { int target = Random.Range(0, 4 + systems.Count); if (target - 4 >= 0) { systems[target].Damaged(Weapon); } } } }
public void AttackShip(cl_SectorObject Target, int Weapon) { }
void Update() { if (gyroEnabled) { sectorObjects = sectorController.currSector.sectorObjects; if (!firstRun) { for (int i = 0; i < sectorObjects.Count; i++) { blips.Add(GameObject.Instantiate(blipPrefab)); blipToObjDict.Add(blips[i], sectorObjects[i]); } firstRun = true; } blips[0].gameObject.SetActive(false); for (int i = 0; i < sectorObjects.Count; i++) { if (sectorObjects[i].GetVar <int>("HullPoints") <= 0 && sectorObjects[i].tags.Contains("Ship")) { sectorObjects.Remove(sectorObjects[i]); GameObject.Destroy(GameObject.FindGameObjectWithTag("Gyro").GetComponent <GyroControl>().blips[i]); GameObject.FindGameObjectWithTag("Gyro").GetComponent <GyroControl>().blips.Remove(GameObject.FindGameObjectWithTag("Gyro").GetComponent <GyroControl>().blips[i]); GameObject.Destroy(GameObject.FindGameObjectWithTag("Gyro").GetComponent <GyroControl>().dispScrn); GameObject.Destroy(GameObject.FindGameObjectWithTag("Gyro").GetComponent <GyroControl>().fireButton); i--; } } if (Input.GetMouseButtonDown(0)) { Vector3 touchPosFar = new Vector3(Input.mousePosition.x, Input.mousePosition.y, cam.farClipPlane); Vector3 touchPosNear = new Vector3(Input.mousePosition.x, Input.mousePosition.y, cam.nearClipPlane); Vector3 touchPosF = cam.ScreenToWorldPoint(touchPosFar); Vector3 touchPosN = cam.ScreenToWorldPoint(touchPosNear); RaycastHit rayHit; if (Physics.Raycast(touchPosN, touchPosF - touchPosN, out rayHit)) { if (!rayHit.transform.gameObject.CompareTag("FireButton") && fireButton != null) { Destroy(fireButton); } if (!rayHit.transform.gameObject.CompareTag("TargetButton") && targetButton != null) { Destroy(targetButton); } if (rayHit.transform.gameObject.CompareTag("Radar") && dispScrn != null) { dispScrn.SetActive(false); if (traderButton != null) { Destroy(traderButton); } } else if (rayHit.transform.gameObject.CompareTag("TradeButton")) { traderObjBuffer.CallMethod("OpenShop"); Destroy(traderButton); } else if (rayHit.transform.gameObject.CompareTag("FireButton")) { player.CallMethod("AttackShip", pirateObjBuffer, 0); dispScrn.GetComponentInChildren <TMPro.TextMeshProUGUI>().text = pirateObjBuffer.GetVar <int>("HullPoints").ToString(); //Debug.Log(pirateObjBuffer.GetVar<int>("HullPoints")); } else if (rayHit.transform.gameObject.CompareTag("TargetButton")) { List <cl_Weapon> tempWeps = new List <cl_Weapon>(); //int listCount = currSector.sectorObjects[0].GetVar<int>("Weapons"); //for(int i = 0; i < listCount; i++) //{ //tempWeps.Add(currSector.sectorObjects[0].GetVarIndex<cl_Weapon>("Weapons", 0)); //} tempWeps.Add(new cl_W_LowDmg()); ((cl_Ship_Pirate)pirateObjBuffer).Target(tempWeps); Destroy(targetButton); } else if (rayHit.transform.gameObject.CompareTag("Blip")) { if (traderButton != null) { Destroy(traderButton); } cl_SectorObject tempObj = blipToObjDict[rayHit.transform.gameObject]; if (dispScrn == null) { dispScrn = GameObject.Instantiate(dispScrnPrefab); dispScrnInfo = dispScrn.GetComponentInChildren <TMPro.TextMeshProUGUI>(); string tempStr = ""; for (int i = 0; i < tempObj.tags.Count; i++) { if (tempStr != "") { tempStr += " "; } tempStr += tempObj.tags[i]; } dispScrnInfo.text = tempStr; } else { dispScrn.SetActive(true); string tempStr = ""; for (int i = 0; i < tempObj.tags.Count; i++) { if (tempStr != "") { tempStr += " "; } tempStr += tempObj.tags[i]; } dispScrnInfo.text = tempStr; } if (tempObj.tags.Contains("Trader")) { if (traderButton != null) { Destroy(traderButton); } if (targetButton != null) { Destroy(targetButton); } traderButton = GameObject.Instantiate(traderButtonPrefab); traderObjBuffer = tempObj; } if (tempObj.tags.Contains("Pirate")) { if (targetButton != null) { Destroy(targetButton); } if (traderButton != null) { Destroy(traderButton); } targetButton = GameObject.Instantiate(targetButtonPrefab); pirateObjBuffer = tempObj; } for (int i = 0; i < tempObj.tags.Count; i++) { Debug.Log(tempObj.tags[i]); } } } } distanceToQuad = quad.transform.position.z - transform.position.z; transform.localRotation = gyro.attitude * rotatation; hitPlane.SetNormalAndPosition(transform.forward, transform.forward * distanceToPlane); Debug.DrawLine(transform.position, hitPlane.ClosestPointOnPlane(transform.position), Color.red, 0.0f, false); for (int i = 0; i < sectorObjects.Count; i++) { float distanceToObject; Ray ray = new Ray(transform.position, sectorObjects[i].position); if (hitPlane.Raycast(ray, out distanceToObject)) { Vector3 v = ray.GetPoint(distanceToObject); eyeTransform.rotation = transform.rotation; blips[i].transform.position = v; blips[i].transform.SetParent(eyeTransform, false); eyeTransform.rotation = new Quaternion(0, 0, 0, 0); blips[i].transform.SetParent(eyeTransform, true); Vector3 blipV = blips[i].transform.position; if (blipV.x < -0.5f || blipV.x > 0.5f || blipV.y < -0.5f || blipV.y > 0.5f) { blips[i].GetComponent <Renderer>().enabled = false; } else { blips[i].GetComponent <Renderer>().enabled = true; } } else { blips[i].GetComponent <Renderer>().enabled = false; } } } }
virtual protected void OnDestroy(cl_SectorObject Attacker) { }
void Update() { if (gyroEnabled) { sectorObjectsVis = sectorController.sectorObjects; if (!firstRun) { for (int i = 0; i < sectorObjectsVis.Count; i++) { blips.Add(GameObject.Instantiate(blipPrefab)); blipToObjDict.Add(blips[i], sectorObjects[i]); } firstRun = true; } if (Input.GetMouseButtonDown(0)) { Vector3 touchPosFar = new Vector3(Input.mousePosition.x, Input.mousePosition.y, cam.farClipPlane); Vector3 touchPosNear = new Vector3(Input.mousePosition.x, Input.mousePosition.y, cam.nearClipPlane); Vector3 touchPosF = cam.ScreenToWorldPoint(touchPosFar); Vector3 touchPosN = cam.ScreenToWorldPoint(touchPosNear); RaycastHit rayHit; if (Physics.Raycast(touchPosN, touchPosF - touchPosN, out rayHit)) { if (rayHit.transform.gameObject.CompareTag("Radar") && dispScrn != null) { dispScrn.SetActive(false); if (traderButton != null) { Destroy(traderButton); } } else if (rayHit.transform.gameObject.CompareTag("Button")) { traderObjBuffer.CallMethod("OpenShop"); Destroy(traderButton); } else if (rayHit.transform.gameObject.CompareTag("Blip")) { if (traderButton != null) { Destroy(traderButton); } cl_SectorObject tempObj = blipToObjDict[rayHit.transform.gameObject]; if (dispScrn == null) { dispScrn = GameObject.Instantiate(dispScrnPrefab); dispScrnInfo = dispScrn.GetComponentInChildren <TMPro.TextMeshProUGUI>(); string tempStr = ""; for (int i = 0; i < tempObj.tags.Count; i++) { if (tempStr != "") { tempStr += " "; } tempStr += tempObj.tags[i]; } dispScrnInfo.text = tempStr; } else { dispScrn.SetActive(true); string tempStr = ""; for (int i = 0; i < tempObj.tags.Count; i++) { if (tempStr != "") { tempStr += " "; } tempStr += tempObj.tags[i]; } dispScrnInfo.text = tempStr; } if (tempObj.tags.Contains("Trader")) { if (traderButton != null) { Destroy(traderButton); } traderButton = GameObject.Instantiate(buttonPrefab); traderObjBuffer = tempObj; } for (int i = 0; i < tempObj.tags.Count; i++) { Debug.Log(tempObj.tags[i]); } } } } distanceToQuad = quad.transform.position.z - transform.position.z; transform.localRotation = gyro.attitude * rotatation; hitPlane.SetNormalAndPosition(transform.forward, transform.forward * distanceToPlane); Debug.DrawLine(transform.position, hitPlane.ClosestPointOnPlane(transform.position), Color.red, 0.0f, false); for (int i = 0; i < sectorObjectsVis.Count; i++) { float distanceToObject; Ray ray = new Ray(transform.position, sectorObjectsVis[i].transform.position); if (hitPlane.Raycast(ray, out distanceToObject)) { Vector3 v = ray.GetPoint(distanceToObject); eyeTransform.rotation = transform.rotation; blips[i].transform.position = v; blips[i].transform.SetParent(eyeTransform, false); eyeTransform.rotation = new Quaternion(0, 0, 0, 0); blips[i].transform.SetParent(eyeTransform, true); Vector3 blipV = blips[i].transform.position; if (blipV.x < -0.5f || blipV.x > 0.5f || blipV.y < -0.5f || blipV.y > 0.5f) { blips[i].GetComponent <Renderer>().enabled = false; } else { blips[i].GetComponent <Renderer>().enabled = true; } } else { blips[i].GetComponent <Renderer>().enabled = false; } } } }