Esempio n. 1
0
    public override void Fire(Vector2 _forwardVec, Vector2 _firePosOffset, WeaponPartSchematic partSchematic)
    {
        forwardVec            = _forwardVec;
        range                 = partSchematic.Range;
        damage                = partSchematic.Damage;
        hitImpulse            = (float)partSchematic.BulletInfos["hit_impulse"];
        firePos               = Owner.transform.position + (Vector3)_firePosOffset;
        this.Body.position    = firePos;
        this.impulseVector    = forwardVec.normalized * partSchematic.ShootImpulse;
        applyImpulseNextFrame = true;

        float angle = Vector2.SignedAngle(new Vector2(0, 1).Rotate(this.Body.rotation), forwardVec);

        this.Body.rotation = angle;

        float   recoilImpulse = (float)partSchematic.BulletInfos["recoil_impulse"];
        Vector2 backVec       = forwardVec.Rotate(180);

        Owner.Body.AddForce(backVec.normalized * recoilImpulse, ForceMode2D.Impulse);

        numMissiles           = (int)partSchematic.BulletInfos["num_missiles"];
        missileRange          = (float)partSchematic.BulletInfos["missile_range"];
        missileShootTime      = (float)partSchematic.BulletInfos["missile_shoot_time"];
        missileInitImpulseMag = (float)partSchematic.BulletInfos["missile_init_impulse"];
        missileFireImpulseMag = (float)partSchematic.BulletInfos["missile_fire_impulse"];
        missileTriggerTime    = (float)partSchematic.BulletInfos["missile_trigger_time"];
    }
Esempio n. 2
0
    public override string GetStatString(PartSchematic diffSchem)
    {
        bool showDiff = diffSchem != null;

        string retStr = string.Empty;

        if (showDiff)
        {
            WeaponPartSchematic diffWeapon = (WeaponPartSchematic)diffSchem;

            string damageStr       = string.Format("Damage:\n{0} => {2}{1}</color>", diffWeapon.Damage, Damage, getColorBasedChangeInVal(diffWeapon.Damage, Damage));
            string rangeStr        = string.Format("Range:\n{0} => {2}{1}</color>", diffWeapon.Range, Range, getColorBasedChangeInVal(diffWeapon.Range, Range));
            string reloadTimeStr   = string.Format("Reload Time:\n{0} => {2}{1}</color>", diffWeapon.ReloadTimeInSec, ReloadTimeInSec, getColorBasedChangeInVal(diffWeapon.ReloadTimeInSec, ReloadTimeInSec, false));
            string fireStrengthStr = string.Format("Fire Strength:\n{0} => {2}{1}</color>", diffWeapon.ShootImpulse, ShootImpulse, getColorBasedChangeInVal(diffWeapon.ShootImpulse, ShootImpulse));
            string tierStr         = string.Format("Tier:\n{0} => {1}", diffWeapon.Tier, Tier);

            retStr = string.Format("Bullet Type:\n{0} => {1}\n{2}\n{3}\n{4}\n{5}\n{6}",
                                   diffWeapon.BulletType, BulletType, damageStr, rangeStr, reloadTimeStr, fireStrengthStr, tierStr);
        }
        else
        {
            retStr = string.Format("Bullet Type:\n{0}\nDamage:\n{1}\nRange:\n{2}\nReload Time:\n{3}\nFire Strength:\n{4}\nTier:\n{5}",
                                   BulletType, Damage, Range, ReloadTimeInSec, ShootImpulse, Tier);
        }

        return(retStr);
    }
Esempio n. 3
0
    public void SavePlayerInfo()
    {
        string weaponString = string.Empty;

        for (int i = 0; i < TankSchematic.WeaponSchematics.Length; ++i)
        {
            WeaponPartSchematic weaponSchem = TankSchematic.WeaponSchematics[i];
            weaponString += "\"";

            if (weaponSchem != null)
            {
                weaponString += weaponSchem.Name;
            }

            weaponString += "\"";

            if (i < TankSchematic.WeaponSchematics.Length - 1)
            {
                weaponString += ",";
            }
        }

        string playerInfoJson = String.Format("{{\"Tank\":{{\"Hull\":\"{0}\",\"Weapons\":[{1}]}}}}",
                                              TankSchematic.HullSchematic.Name,
                                              weaponString);

        PlayerPrefs.SetString(PlayerInfoKey, playerInfoJson);
    }
Esempio n. 4
0
    public WeaponPart(WeaponPartSchematic schematic, Vector2 weaponFireOffset, Tank owner)
    {
        Schematic = schematic;

        origWeaponFireOffset = weaponFireOffset;
        lastShotTime         = -10000;
        EquipIdx             = -1;
        OwningTank           = owner;
    }
Esempio n. 5
0
    public override void Fire(Vector2 forwardVec, Vector2 firePosOffset, WeaponPartSchematic partSchematic)
    {
        damage              = partSchematic.Damage;
        hitImpulse          = (float)partSchematic.BulletInfos["hit_impulse"];
        shootForce          = partSchematic.ShootImpulse;
        this.shotForwardVec = forwardVec;
        this.Body.position  = Owner.transform.position + (Vector3)firePosOffset;

        origAngle          = Vector2.SignedAngle(new Vector2(0, 1).Rotate(this.Body.rotation), this.shotForwardVec);
        this.Body.rotation = origAngle;

        float   recoilImpulse = (float)partSchematic.BulletInfos["recoil_impulse"];
        Vector2 backVec       = this.shotForwardVec.Rotate(180);

        Owner.Body.AddForce(backVec.normalized * recoilImpulse, ForceMode2D.Impulse);
    }
Esempio n. 6
0
    public override void Fire(Vector2 forwardVec, Vector2 firePosOffset, WeaponPartSchematic partSchematic)
    {
        range                 = partSchematic.Range;
        damage                = partSchematic.Damage;
        hitImpulse            = (float)partSchematic.BulletInfos["hit_impulse"];
        firePos               = Owner.transform.position + (Vector3)firePosOffset;
        this.Body.position    = firePos;
        this.impulseVector    = forwardVec.normalized * partSchematic.ShootImpulse;
        applyImpulseNextFrame = true;

        float angle = Vector2.SignedAngle(new Vector2(0, 1).Rotate(this.Body.rotation), forwardVec);

        this.Body.rotation = angle;

        float   recoilImpulse = (float)partSchematic.BulletInfos["recoil_impulse"];
        Vector2 backVec       = forwardVec.Rotate(180);

        Owner.Body.AddForce(backVec.normalized * recoilImpulse, ForceMode2D.Impulse);
    }
Esempio n. 7
0
    private void loadWeaponParts()
    {
        Dictionary <string, PartSchematic> schematics = new Dictionary <string, PartSchematic>();

        TextAsset jsonText = Resources.Load("WeaponPartList") as TextAsset;

        JObject root = JObject.Parse(jsonText.text);

        foreach (var partInfo in root)
        {
            string name = partInfo.Key;

            JObject info = (JObject)partInfo.Value;

            float  reloadTime             = info.Value <float>("reload_time");
            int    energyUsage            = info.Value <int>("energy_usage");
            string tierStr                = info.Value <string>("tier");
            PartSchematic.WeaponTier tier = PartSchematic.WeaponTier.Light;
            if (tierStr.Equals("L"))
            {
                tier = PartSchematic.WeaponTier.Light;
            }
            else if (tierStr.Equals("M"))
            {
                tier = PartSchematic.WeaponTier.Medium;
            }
            else if (tierStr.Equals("H"))
            {
                tier = PartSchematic.WeaponTier.Heavy;
            }

            Bullet.BulletTypes bType = (Bullet.BulletTypes)Enum.Parse(typeof(Bullet.BulletTypes), info.Value <string>("bullet_type"));

            Dictionary <string, object> bulletInfoDict = parseBulletInfoJson(bType, info.Value <JObject>("bullet_info"));

            WeaponPartSchematic part = TankParSchematictFactory.CreateWeaponPartSchematic(name, reloadTime, energyUsage, tier, bType, bulletInfoDict);

            schematics.Add(part.Name, part);
        }

        partSchematicDics.Add(PartSchematic.PartType.Weapon, schematics);
    }
Esempio n. 8
0
 public override void Fire(Vector2 forwardVec, Vector2 firePosOffset, WeaponPartSchematic partSchematic)
 {
     // Not used.
     Debug.Assert(false, "Fire should never be called for MissileBullet");
 }
Esempio n. 9
0
 public abstract void Fire(Vector2 forwardVec, Vector2 firePosOffset, WeaponPartSchematic partSchematic);
Esempio n. 10
0
    public static float CalcTimeToHitPos(Vector2 curPos, Vector2 curFireVec, TankStateInfo aimingTankInfo, WeaponPartSchematic schematic, Vector2 targetPos)
    {
        float timeToHit = 0;

        Vector2 diffVec = targetPos - curPos;

        // We have to calculate three things: rotation time, travel time to in range, and bullet travel time.

        // First calculate rotation time.
        timeToHit += aimingTankInfo.CalcTimeToRotate(curFireVec, diffVec);

        // Next, calculate travel time.
        float moveAmount = Mathf.Max(diffVec.magnitude - schematic.Range, 0);

        if (moveAmount > 0)
        {
            Vector2 newPos = diffVec.normalized * moveAmount + curPos;
            timeToHit += aimingTankInfo.CalcTimeToReachPosWithNoRot(newPos);
        }

        // Finally, calculate bullet travel time.
        timeToHit += Mathf.Min(schematic.Range, diffVec.magnitude) / schematic.ShootImpulse;

        return(timeToHit);
    }