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 :; }
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); }
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); }
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); }
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); }
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); }
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); }
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 }); }