// START -------------------------------------------------------------------------------------------------- void Start() { // INIT OF CLASS WITH MAIN GLOBAL OBJECTS globalObjects = new MainGlobalObjects() { arbiter = gameObject, playerPole = null, mainFocus = mainFocus, mainCamera = mainCamera, mainCanvas = mainCanvas, mainCursor = mainCursor, barPrefab = barPrefab, infoText = infoText }; allPoles = new List <GameObject>(); // CREATING PLAYER POLE PoleParams playerNormPoleParams = new PoleParams(PoleType.Player); if (tmpPoleMaxSpeed != 0) { playerNormPoleParams.poleMaxSpeed = tmpPoleMaxSpeed; } PoleModification tmpPoleModif = new PoleModification(); allPoles.Add(CreateNormPole(allPoles.Count, new Vector3(0, 0, 0), 0, new BeltType[] { BeltType.machinegun, BeltType.gun }, playerNormPoleParams, tmpPoleModif)); // CREATING ENEMY PoleParams enemyNormPoleParams = new PoleParams(PoleType.Enemy, true, // newAIRandomMove - moves around randomly changing direction false, // newAISearchingMove - moves by waypoints - not currently used true, // newAIFiringOnContact - start firing guns when see the player false, // newAITargetMovePrediction - predict player motion for more accurate firing - not currently used true, // newAIManuvering - manuvering during firing at player (otherwise - standing still) true // newAISeekLastPosition - seeks last know position of player when he becomes out of sight ); if (tmpPoleMaxSpeed != 0) { enemyNormPoleParams.poleMaxSpeed = tmpPoleMaxSpeed; } allPoles.Add(CreateNormPole(allPoles.Count, new Vector3(50, 0, 0), -60, new BeltType[] { BeltType.gun, BeltType.machinegun }, enemyNormPoleParams, new PoleModification())); }
// ******************************************************************************************************** // OBJECTS CREATION *************************************************************************************** // ******************************************************************************************************** // CREATION OF NEW NORM POLE public GameObject CreateNormPole(int poleID, Vector3 startPoint, float startYRotation, BeltType[] beltTypes, PoleParams poleParams, PoleModification poleModif) { // CREATE THE NORM POLE GameObject newNormPole = Instantiate(poleNormPrefab, startPoint + new Vector3(0, 2.5f, 0), Quaternion.Euler(0, 0, 0)); PoleControl newNormPoleControl = newNormPole.GetComponent <PoleControl>(); Vector3 newNormPoleScale = newNormPole.transform.lossyScale; Vector3 newNormPoleScaleInv = new Vector3(1 / newNormPoleScale.x, 1 / newNormPoleScale.y, 1 / newNormPoleScale.z); Vector3 newNormPoleAIMoveDir = Quaternion.Euler(0, startYRotation, 0) * newNormPole.transform.forward; // TRANSFERRING GLOBAL OBJECTS, POLE PARAMS, MODIFICATION AND ASSEMBLY TO NEW POLE newNormPoleControl.globalObjects = globalObjects; newNormPoleControl.poleParams = poleParams; newNormPoleControl.poleModif = poleModif; newNormPoleControl.poleAssembly = newNormPole.transform.GetChild(0).gameObject; newNormPoleControl.AIMoveDir = newNormPoleAIMoveDir; // IF NEW POLE IS PLAYER - UPDATING GLOBAL PARAMS if (poleParams.type == PoleType.Player) { globalObjects.playerPole = newNormPole; playerPole = newNormPole; mainCamera.GetComponent <CameraControl>().focusObject = newNormPole; } // SENSOR CREATION GameObject newSensor = Instantiate(sensor1Prefab, startPoint + new Vector3(0, 4.5f, 0), newNormPole.transform.rotation, newNormPoleControl.poleAssembly.transform); newNormPoleControl.selfSensor = newSensor; newSensor.transform.localScale = newNormPoleScaleInv; // CREATING TEXT Text newText = Instantiate <Text>(infoText); newText.transform.SetParent(mainCanvas.transform); newText.transform.position = mainCanvas.transform.TransformPoint((poleID + 1) * 200 - Screen.width / 2 + 10, Screen.height / 2 - 10, 0); // CREATING ENERGYBAR Image newEnergyBar = Instantiate <Image>(globalObjects.barPrefab); newEnergyBar.transform.SetParent(mainCanvas.transform); BarControl newEnergyBarControl = newEnergyBar.GetComponent <BarControl>(); newEnergyBarControl.maxValue = poleParams.poleMaxEnergy * poleModif.energyMaxCoef; newEnergyBarControl.currValue = poleParams.poleMaxEnergy * poleModif.energyMaxCoef; newEnergyBarControl.transparency = poleParams.barTransparency; newEnergyBarControl.barHeight = barHeight; // DEFINING COLORS AND TAG switch (poleParams.type) { case PoleType.Player: newEnergyBarControl.backGroundCol = new Color32(0, 10, 73, newEnergyBarControl.transparency); newEnergyBarControl.foreGroundCol = new Color32(70, 100, 230, newEnergyBarControl.transparency); newText.color = new Color32(0, 230, 10, 255); newNormPole.tag = "PlayerTeam"; break; case PoleType.Enemy: newEnergyBarControl.backGroundCol = new Color32(0, 10, 73, newEnergyBarControl.transparency); newEnergyBarControl.foreGroundCol = new Color32(70, 100, 230, newEnergyBarControl.transparency); newText.color = new Color32(225, 0, 0, 255); newNormPole.tag = "EnemyTeam"; break; case PoleType.NeutralStatic: newText.color = new Color32(160, 160, 160, 255); newNormPole.tag = "NeutralTeam"; break; case PoleType.NeutralMovable: newText.color = new Color32(200, 200, 200, 255); newNormPole.tag = "NeutralTeam"; break; } // CREATING BELTS if (beltTypes.Length > 4) { Array.Resize(ref beltTypes, 4); } GameObject[] belts = new GameObject[beltTypes.Length]; if (beltTypes.Length > 0) { // INITIALIZING FIRST BELT PARAMS WITH UNIT PARAMS BeltParams[] newBeltsParams = new BeltParams[beltTypes.Length]; for (int i = 0; i < beltTypes.Length; i++) { // DEFINITION OF BELT SIDE if (UnitGroups.frontUnits.Contains(beltTypes[i])) { // FRONT-ORIENTED BELT newBeltsParams[i] = CreateBeltParams(beltTypes[i], BeltSide.front, poleID); } else if (UnitGroups.backUnits.Contains(beltTypes[i])) { // BACK-ORIENTED BELT newBeltsParams[i] = CreateBeltParams(beltTypes[i], BeltSide.back, poleID); } else { // SIDE-ORIENTED BELT if ((i == 0) || (!UnitGroups.sideUnits.Contains(beltTypes[i - 1]))) { // RANDOM SIDE DEFINITION if (UnityEngine.Random.Range(0, 100) < 50) { // BELT IS RANDOMLY LEFT newBeltsParams[i] = CreateBeltParams(beltTypes[i], BeltSide.left, poleID); } else { // BELT IS RANDOMLY RIGHT newBeltsParams[i] = CreateBeltParams(beltTypes[i], BeltSide.right, poleID); } } else { // DEFINING OTHER DIRECTION THEN IN PREVIOUS BELT if (newBeltsParams[i - 1].side == BeltSide.left) { newBeltsParams[i] = CreateBeltParams(beltTypes[i], BeltSide.right, poleID); } else { newBeltsParams[i] = CreateBeltParams(beltTypes[i], BeltSide.left, poleID); } } } // CREATING BELT OBJECT belts[i] = CreateBeltObject(poleID, newBeltsParams[i], ref poleModif, newNormPole, 0.55f - i * 0.1f); } } // TRANSFERRING BELTS, SENSOR, TEXT AND HEALTHBAR TO THE NEW POLE OBJECT if (beltTypes.Length > 0) { Array.Resize(ref newNormPoleControl.belts, belts.Length); Array.Resize(ref newNormPoleControl.beltTypes, beltTypes.Length); belts.CopyTo(newNormPoleControl.belts, 0); beltTypes.CopyTo(newNormPoleControl.beltTypes, 0); } newNormPoleControl.poleSensor = newSensor; newNormPoleControl.lifeText = newText; newNormPoleControl.energyBar = newEnergyBar; return(newNormPole); }