示例#1
0
    IEnumerator ActionAnimateDead()
    {
        int wagonNumber;

        FindMostDamagedCarriage();
        //Choose spawn point
        //If player health below 50%, spawn there
        //If carriage health below 50%, spawn there
        //else spawn near player
        if (lowestCarriageHealth <= 50.0f && playerHealth >= 50.0f)
        {
            wagonNumber = lowestCarriageHealthIndex;
        }
        else
        {
            wagonNumber = FindSpawnPointNearPlayer();
        }
        //Spawn undead
        for (int i = 0; i < undeadAnimatedPerAction; i++)
        {
            if (currentHenchmenCount >= maxHenchmen)
            {
                break;
            }
            GameObject henchman = Instantiate(henchmenCharacter, spawnPoints[wagonNumber].transform.position, spawnPoints[wagonNumber].transform.rotation);
            henchman.GetComponent <HenchmanCharacter>().wagonNo = wagonNumber;
            henchmenAI.AddHenchmen(henchman, wagonNumber);
            currentHenchmenCount++;
            yield return(new WaitForSeconds(1));
        }
        //Set state to Idle
        pState = PestilenceState.Idle;
        yield return(null);
    }
示例#2
0
    void ActionToxicCloud()
    {
        int wagonNo = Random.Range(0, wagonManagerList.Length);

        Instantiate(toxicCloud, wagonManagerList[wagonNo].transform.position + new Vector3(0, Random.Range(0f, 40f)), Quaternion.identity);
        //Choose location (maybe check if its free of clouds)
        //Spawn cloud
        //Set state to Idle
        pState = PestilenceState.Idle;
    }
示例#3
0
    IEnumerator ActionFireBeam()
    {
        //Locate player
        Vector3 target     = playerCharacter.transform.position;
        float   multiplier = Random.Range(-1f, 1f);

        if (multiplier <= 0)
        {
            multiplier = -1;
        }
        else
        {
            multiplier = 1;
        }
        Vector3    startPoint   = target + new Vector3(multiplier * 10, 0);
        GameObject beamInstance = Instantiate(beam, transform.position, Quaternion.identity);

        startPoint.z = 0;
        beamInstance.transform.right = (startPoint - transform.position);
        Vector3 beamStartPoint = startPoint;
        float   beamDuration   = 4.0f;
        float   beamTimer      = 0f;

        while (beamTimer < beamDuration)
        {
            beamTimer += Time.deltaTime;
            Vector3 endPoint = playerCharacter.transform.position;
            beamStartPoint += (endPoint - beamStartPoint).normalized * 0.05f;
            beamInstance.transform.right = beamStartPoint - transform.position;
            yield return(null);
        }
        Destroy(beamInstance);
        //Fire
        //Set state to Idle
        pState = PestilenceState.Idle;
        yield return(null);
    }
示例#4
0
 void ChangeState()
 {
     pState = (PestilenceState)Random.Range(0, 5);
     pState = PestilenceState.AnimateDead;
 }