コード例 #1
0
    public override void Fire(GameObject _shooter)
    {
        shooter      = _shooter;
        shooterPos   = shooter.transform.position;
        shooterSheet = shooter.GetComponent <GCS>();

        shooterSheet.ClearEnemyList();
        if (shooterSheet.enemies.Count == 0)
        {
            return;
        }
        for (int i = 0; i < shooterSheet.enemies.Count; i++)
        {
            shooterSheet.enemies[i].position = shooterSheet.enemies[i].unit.transform.position;
        }
        shooterSheet.enemies.Sort((e1, e2) => (shooterPos - e1.position).sqrMagnitude.CompareTo((shooterPos - e2.position).sqrMagnitude));


        if (!shooterSheet.enemies[0].shootable)
        {
            return;
        }

        enemy      = shooterSheet.enemies[0].unit;
        enemyPos   = enemy.transform.position;
        enemySheet = enemy.GetComponent <GCS>();

        int hitDieCount = shooterSheet.hitDieCount;
        int hitDieType  = shooterSheet.hitDieType;
        int hitDie      = 0;

        for (int i = 0; i < hitDieCount; i++)
        {
            hitDie += Random.Range(1, hitDieType + 1);
        }

        int enemyCoverLevel = EnemyCoverLevel(enemyPos, shooterPos);

        if (enemyCoverLevel == 1)
        {
            hitDie -= hitDieType / 3;
        }
        else if (enemyCoverLevel == 2)
        {
            hitDie -= hitDieType / 2;
        }


        enemySheet.Alert(shooter);
        AlertEnemiesByGunNoise(shooter, shooterPos);
        shooterSheet.commandHub.CmdApplyStress(enemy, hitDie);

        if (hitDie >= enemySheet.armorClass)
        {
            shooterSheet.commandHub.CmdHit(enemy);
        }

        shooterSheet.commandHub.CmdCreateBullet(enemyPos, shooterPos);
    }
コード例 #2
0
    public override void Fire(GameObject _shooter)
    {
        shooter      = _shooter;
        shooterSheet = shooter.GetComponent <GCS>();
        shooterPos   = shooter.transform.position;

        shooterSheet.ClearEnemyList();
        if (shooterSheet.enemies.Count == 0)
        {
            return;
        }

        for (int i = 0; i < shooterSheet.enemies.Count; i++)
        {
            shooterSheet.enemies[i].position = shooterSheet.enemies[i].unit.transform.position;
        }
        shooterSheet.enemies.Sort((e1, e2) => (shooterPos - e1.position).sqrMagnitude.CompareTo((shooterPos - e2.position).sqrMagnitude));
        shooterSheet.commandHub.ClearSpottersList();
        List <GameObject> spotters = shooterSheet.commandHub.spotters;
        List <GameObject> spottedUnits;
        int  index       = -1;
        bool targetFound = false;

        for (int i = 0; i < shooterSheet.enemies.Count; i++)
        {
            for (int j = 0; j < spotters.Count; j++)
            {
                spotters[j].GetComponent <GCS>().ClearSpottedUnitsList();
                spottedUnits = spotters[j].GetComponent <GCS>().spottedUnits;
                for (int k = 0; k < spottedUnits.Count; k++)
                {
                    if (shooterSheet.enemies[i].unit == spottedUnits[k] && shooterSheet.enemies[i].shootable)
                    {
                        index       = i;
                        targetFound = true;
                        break;
                    }
                }
                if (targetFound)
                {
                    break;
                }
            }
            if (targetFound)
            {
                break;
            }
        }
        if (index == -1)
        {
            return;
        }

        enemy      = shooterSheet.enemies[index].unit;
        enemyPos   = enemy.transform.position;
        enemySheet = enemy.GetComponent <GCS>();

        int hitDieCount = shooterSheet.hitDieCount;
        int hitDieType  = shooterSheet.hitDieType;
        int hitDie      = 0;

        for (int i = 0; i < hitDieCount; i++)
        {
            hitDie += Random.Range(1, hitDieType + 1);
        }

        int enemyCoverLevel = EnemyCoverLevel(enemyPos, shooterPos);

        if (enemyCoverLevel == 1)
        {
            hitDie -= hitDieType / 3;
        }
        else if (enemyCoverLevel == 2)
        {
            hitDie -= hitDieType / 2;
        }

        if (hitDie >= enemySheet.armorClass)
        {
            shooterSheet.commandHub.CmdHit(enemy);
        }

        enemySheet.Alert(shooter);
        AlertEnemiesByGunNoise(shooter, shooterPos);
    }
コード例 #3
0
    public override void Fire(GameObject _shooter)
    {
        shooter      = _shooter;
        shooterSheet = shooter.GetComponent <GCS>();
        shooterPos   = shooter.transform.position;

        shooterSheet.ClearEnemyList();
        if (shooterSheet.enemies.Count == 0)
        {
            return;
        }

        for (int i = 0; i < shooterSheet.enemies.Count; i++)
        {
            shooterSheet.enemies[i].position = shooterSheet.enemies[i].unit.transform.position;
        }
        shooterSheet.enemies.Sort((e1, e2) => (shooterPos - e1.position).sqrMagnitude.CompareTo((shooterPos - e2.position).sqrMagnitude));
        if (!shooterSheet.enemies[0].shootable)
        {
            return;
        }

        Vector3 enemyPos     = shooterSheet.enemies[0].position;
        Vector3 explosionPos = new Vector3(enemyPos.x - 1 + Random.Range(0, 3), enemyPos.y - 1 + Random.Range(0, 3));
        int     layerMask0   = 1 << 8;
        int     layerMask1   = 1 << 9;
        int     layerMask    = layerMask0 | layerMask1;                 //friendly fire is possible

        Collider[] unitsAffected = Physics.OverlapSphere(explosionPos, 1.5f, layerMask);

        int hitDieCount = shooterSheet.hitDieCount;
        int hitDieType  = shooterSheet.hitDieType;
        int hitDie      = 0;

        for (int i = 0; i < hitDieCount; i++)
        {
            hitDie += Random.Range(1, hitDieType + 1);
        }

        int shrapnelDmg;

        for (int i = 0; i < unitsAffected.Length; i++)
        {
            shrapnelDmg = Random.Range(1, hitDie + 1);
            if (shrapnelDmg > unitsAffected[i].gameObject.GetComponent <GCS>().armorClass)
            {
                shooterSheet.commandHub.CmdHit(unitsAffected[i].gameObject);
            }
            hitDie -= shrapnelDmg;
            if (hitDie <= 0)
            {
                break;
            }
        }
        for (int i = 0; i < unitsAffected.Length; i++)
        {
            unitsAffected[i].gameObject.GetComponent <GCS>().Alert(shooter);
        }

        AlertEnemiesByGunNoise(shooter, explosionPos);
    }