コード例 #1
0
ファイル: ArbiterControl.cs プロジェクト: taimish/PoleWars
    // 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()));
    }
コード例 #2
0
ファイル: ArbiterControl.cs プロジェクト: taimish/PoleWars
    // ********************************************************************************************************
    // 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);
    }