private void Update()
    {
        if (SceneGlobals.Paused)
        {
            goto PAUSEDRUNNTIME;
        }
        if (Time.frameCount % 60 == countID)
        {
            UpdateTgts();
        }

        RaycastHit hit;

        if (Physics.Raycast(Infront, out hit, speed * Time.deltaTime, Physics.DefaultRaycastLayers, QueryTriggerInteraction.Collide))
        {
            BulletCollisionDetection behaviour = hit.collider.GetComponent <BulletCollisionDetection>();
            if (behaviour != null)
            {
                behaviour.Collide(instance);
            }
        }

        if (lifespan > 20)
        {
            Destroy(gameObject);
        }

        lifespan += Time.deltaTime;

        PAUSEDRUNNTIME :;
    }
Exemple #2
0
    public static MissileLauncher GetFromDS(DataStructure part_data, DataStructure specific_data, Transform parent)
    {
        if (part_data.Get <GameObject>("source") == null)
        {
            Debug.Log(part_data);
        }

        GameObject launcher_obj = Object.Instantiate(part_data.Get <GameObject>("source"));

        launcher_obj.transform.position = parent.position + parent.rotation * specific_data.Get <Vector3>("position");
        launcher_obj.transform.rotation = parent.rotation * specific_data.Get <Quaternion>("rotation");
        launcher_obj.transform.SetParent(parent, true);

        MissileLauncher launcher_instance = new MissileLauncher((float)part_data.Get <ushort>("hp"), launcher_obj, part_data.Get <float>("mass"))
        {
            missile_source  = part_data.Get <DSPrefab>("missile source"),
            missile_mass    = part_data.Get <float>("missile mass"),
            Positions       = specific_data.Get("positions", part_data.Get <Vector3[]>("positions"), quiet: true),
            orientation     = part_data.Get <Quaternion>("orientation"),
            acceleration    = part_data.Get <float>("acceleration"),
            flight_duration = part_data.Get <float>("duration"),
            description_ds  = part_data,
        };

        launcher_instance.HP             = specific_data.Get("hp", launcher_instance.InitHP, quiet: true);
        launcher_instance.main_component = specific_data.Get("main component", true, quiet: true);

        BulletCollisionDetection launcher_behaviour = Loader.EnsureComponent <BulletCollisionDetection>(launcher_obj);

        launcher_behaviour.Part = launcher_instance;

        launcher_instance.Spawn();
        return(launcher_instance);
    }
Exemple #3
0
    public static AmmoBox GetFromDS(DataStructure part_data, DataStructure specific_data, Transform parent)
    {
        GameObject box_obj = Object.Instantiate(part_data.Get <GameObject>("source"));

        box_obj.transform.position = parent.position + parent.rotation * specific_data.Get <Vector3>("position");
        box_obj.transform.rotation = parent.rotation * specific_data.Get <Quaternion>("rotation");
        box_obj.transform.SetParent(parent, true);

        if (!Globals.ammunition_insts.ContainsKey(part_data.Get <string>("ammotype")))
        {
            throw new System.Exception(string.Format("No such ammo: {0}", part_data.Get <string>("ammotype")));
        }

        AmmoBox box_instance = new AmmoBox((float)part_data.Get <ushort>("hp"), box_obj, part_data.Get <float>("mass"))
        {
            AmmoType       = Globals.ammunition_insts[part_data.Get <string>("ammotype")],
            Ammunition     = part_data.Get <System.UInt16>("ammo"),
            description_ds = part_data,
        };

        box_instance.HP             = specific_data.Get("hp", box_instance.InitHP, quiet: true);
        box_instance.main_component = specific_data.Get("main component", true, quiet: true);

        box_instance.Ammunition = (uint)specific_data.Get("ammo", (int)box_instance.FullAmmunition, quiet: true);

        BulletCollisionDetection box_behaviour = Loader.EnsureComponent <BulletCollisionDetection>(box_obj);

        box_behaviour.Part = box_instance;

        return(box_instance);
    }
Exemple #4
0
    public static Engine GetFromDS(DataStructure part_data, DataStructure specific_data, Transform parent)
    {
        GameObject engine_obj = Object.Instantiate(part_data.Get <GameObject>("source"));

        engine_obj.transform.position = parent.position + parent.rotation * specific_data.Get <Vector3>("position");
        engine_obj.transform.rotation = parent.rotation * specific_data.Get <Quaternion>("rotation");
        engine_obj.transform.SetParent(parent, true);

        float hp = (float)part_data.Get <ushort>("hp");

        Engine engine_instance = new Engine(hp, engine_obj, part_data.Get <float>("mass"), part_data.Get <float>("thrust"))
        {
            SpecificImpulse = part_data.Get <float>("isp"),
            description_ds  = part_data,
        };

        engine_instance.HP             = specific_data.Get("hp", engine_instance.InitHP, quiet: true);
        engine_instance.main_component = specific_data.Get("main component", true, quiet: true);
        engine_instance.Throttle       = specific_data.Get("throttle", 0, quiet: true);


        BulletCollisionDetection engine_behaviour = Loader.EnsureComponent <BulletCollisionDetection>(engine_obj);

        engine_behaviour.Part = engine_instance;

        return(engine_instance);
    }
Exemple #5
0
    public static FuelTank GetFromDS(DataStructure part_data, DataStructure specific_data, Transform parent)
    {
        GameObject tank_obj = Object.Instantiate(part_data.Get <GameObject>("source"));

        tank_obj.transform.position = parent.position + parent.rotation * specific_data.Get <Vector3>("position");
        tank_obj.transform.rotation = parent.rotation * specific_data.Get <Quaternion>("rotation");
        tank_obj.transform.SetParent(parent, true);

        FuelTank tank_instance = new FuelTank((float)part_data.Get <ushort>("hp"), tank_obj, part_data.Get <float>("mass"))
        {
            isrcs          = part_data.Get <bool>("rcs"),
            ismain         = part_data.Get <bool>("main"),
            TotFuel        = part_data.Get <float>("fuel"),
            description_ds = part_data,
        };

        tank_instance.Fuel           = specific_data.Get("fuel amount", tank_instance.TotFuel, quiet: true);
        tank_instance.HP             = specific_data.Get("hp", tank_instance.InitHP, quiet: true);
        tank_instance.main_component = specific_data.Get("main", true, quiet: true);

        BulletCollisionDetection tank_behaviour = Loader.EnsureComponent <BulletCollisionDetection>(tank_obj);

        tank_behaviour.Part = tank_instance;

        return(tank_instance);
    }
Exemple #6
0
    public static Weapon GetFromDS(DataStructure part_data, DataStructure specific_data, Transform parent)
    {
        GameObject weapon_obj = part_data.Get <GameObject>("source");
        Vector3    position   = specific_data.Get <Vector3>("position");
        Quaternion rotation   = specific_data.Get <Quaternion>("rotation");

        GameObject act_weapon_obj = Object.Instantiate(weapon_obj);

        act_weapon_obj.transform.position = parent.position + parent.rotation * position;
        act_weapon_obj.transform.rotation = parent.rotation * rotation;
        act_weapon_obj.transform.SetParent(parent, true);

        Weapon weapon_instance = new Weapon((float)part_data.Get <ushort>("hp"), act_weapon_obj, part_data.Get <float>("mass"))
        {
            empty_hull     = part_data.Get <GameObject>("hullpref"),
            BulletSpeed    = part_data.Get <float>("bulletspeed"),
            HullSpeed      = part_data.Get <float>("hullspeed"),
            ShootPos       = part_data.Get <Vector3>("bulletpos"),
            EjectPos       = part_data.Get <Vector3>("hullpos"),
            ReloadSpeed    = part_data.Get <float>("reloadspeed"),
            description_ds = part_data,
        };

        weapon_instance.HP             = specific_data.Get("hp", weapon_instance.InitHP, quiet: true);
        weapon_instance.main_component = specific_data.Get("main component", true, quiet: true);

        weapon_instance.heat         = specific_data.Get("heat", 0f, quiet: true);
        weapon_instance.ooo_time     = specific_data.Get("ooo time", 0f, quiet: true);
        weapon_instance.reload_timer = specific_data.Get("reload timer", 0f, quiet: true);
        weapon_instance.shooting     = specific_data.Get("shooting", false, quiet: true);

        BulletCollisionDetection weapon_behaviour = Loader.EnsureComponent <BulletCollisionDetection>(act_weapon_obj);

        weapon_behaviour.Part = weapon_instance;

        return(weapon_instance);
    }
Exemple #7
0
    public static Armor GetFromDS(DataStructure data, Ship parent)
    {
        ArmorMesh.ArmorGeometryData armordata = new ArmorMesh.ArmorGeometryData(
            data.Get <Vector3[]>("key positions"),
            data.Get <float[]>("radii"),
            data.Get <float[]>("thickness"),
            data.Get("sides", 32, quiet: true)
            );
        int[]     texture_size = data.Get <int[]> ("texture size");
        ArmorMesh armor_mesh   = new ArmorMesh(armordata, new Vector2Int(texture_size[0], texture_size[1]));

        GameObject armor_obj = armor_mesh.armor_obj;

        armor_obj.transform.SetParent(parent.Transform, false);

        // Provisory
        armor_mesh.part = new Armor(1000, armor_obj, 10, armor_mesh);

        BulletCollisionDetection armor_mono = Loader.EnsureComponent <BulletCollisionDetection>(armor_obj);

        armor_mono.Part = armor_mesh.part;

        return(armor_mesh.part);
    }
Exemple #8
0
    public static TurretGroup Load(DataStructure specific_data, Ship parent)
    {
        string name = specific_data.Name.Substring(5);

        DataStructure[] parts_data;
        if (specific_data.Contains <string[]>("parts"))
        {
            string[] part_names = specific_data.Get <string[]>("parts");
            parts_data = System.Array.ConvertAll(part_names, x => Globals.parts.Get <DataStructure>(x));
        }
        else
        {
            parts_data = System.Array.FindAll(specific_data.AllChildren, x => x.Name.StartsWith("description"));
        }

        int count = specific_data.Get <Vector3[]>("positions").Length;

        Vector3 []    weapon_pos       = specific_data.Get <Vector3[]>("positions");
        Quaternion [] weapon_rot       = specific_data.Get("rotations", new Quaternion[count]);
        float []      heats            = specific_data.Get("heat", new float[count], quiet: true);
        float []      ooo_times        = specific_data.Get("ooo time", new float[count], quiet: true);
        bool []       enabled_s        = specific_data.Get("enabled", new bool[count], quiet: true);
        Quaternion [] barrel_rotations = specific_data.Get("barrel rotation", new Quaternion[count], quiet: true);


        Turret [] weapon_array = new Turret[count];

        //This is for each weapon in it
        for (int i = 0; i < count; i++)
        {
            DataStructure part_data = parts_data[i];

            // Range
            float [] range = new float[4] {
                -1f, -1f, -1f, -1f
            };
            if (part_data.Contains <float[]>("horizontal range"))
            {
                range [0] = Mathf.Abs(Mathf.Min(part_data.Get <float[]>("horizontal range")));
                range [1] = Mathf.Abs(Mathf.Max(part_data.Get <float[]>("horizontal range")));
            }
            if (part_data.floats32_arr.ContainsKey("vertical range"))
            {
                range [2] = Mathf.Abs(Mathf.Min(part_data.Get <float[]>("vertical range")));
                range [3] = Mathf.Abs(Mathf.Max(part_data.Get <float[]>("vertical range")));
            }

            float horizontal_rate = part_data.Get <float>("horizontal rotating rate");
            float vertical_rate   = part_data.Get <float>("vertical rotating rate");

            //uint ammo = part_data.short_integers["ammunition"];

            float      reload_speed     = part_data.Get <float>("reload speed");
            float      muzzle_velocity  = part_data.Get <float>("muzzle velocity");
            Vector3 [] muzzle_positions = part_data.Get <Vector3[]>("barrels");

            GameObject pref_weapon = part_data.Get <GameObject>("source");

            Vector3    guns_p        = parent.Position + parent.Orientation * weapon_pos[i];
            Quaternion guns_rot      = parent.Orientation * weapon_rot[i];
            GameObject turret_object = Object.Instantiate(pref_weapon, guns_p, guns_rot);
            turret_object.transform.SetParent(parent.Transform);
            turret_object.name = string.Format("{0} ({1})", name, i.ToString());

            Turret turret_instance = new Turret(range, turret_object, new float[2] {
                horizontal_rate, vertical_rate
            }, part_data.Get <float>("mass"), part_data.Get <System.UInt16>("hp"))
            {
                name = turret_object.name,
                //ammo_count = ammo,
                //full_ammunition = ammo,
                reload_speed     = reload_speed,
                muzzle_velocity  = muzzle_velocity,
                sound_name       = part_data.Get <string>("sound"),
                ammo_type        = Globals.ammunition_insts[part_data.Get <string>("ammotype")],
                muzzle_positions = muzzle_positions,
                description_ds   = part_data,

                heat     = heats[i],
                ooo_time = ooo_times[i],
                Enabled  = enabled_s[i],
            };

            weapon_array [i] = turret_instance;

            BulletCollisionDetection turret_behaviour = Loader.EnsureComponent <BulletCollisionDetection>(turret_object);
            turret_behaviour.Part = turret_instance;
        }

        return(new TurretGroup(Target.None, weapon_array, name)
        {
            own_ship = parent
        });
    }