public static Missile Create(MissileInfo missileInfo, Vector3 start, Vector3 target, Unit originator) { var gameObject = new GameObject("missile_" + missileInfo.missile); var missile = gameObject.AddComponent <Missile>(); missile._animator = gameObject.AddComponent <SpriteAnimator>(); missile._renderer = gameObject.GetComponent <SpriteRenderer>(); missile._iso = gameObject.AddComponent <Iso>(); missile._info = missileInfo; missile._originator = originator; missile._speed = missileInfo.velocity; missile._iso.pos = start; missile._dir = (target - start).normalized; missile._renderer.material = missileInfo.material; missile._skillInfo = SkillInfo.Find(missileInfo.skill); missile._lifeTime = 0; var spritesheet = Spritesheet.Load(missileInfo.spritesheetFilename); int direction = Iso.Direction(start, target, spritesheet.directionCount); missile._animator.SetSprites(spritesheet.GetSprites(direction)); missile._animator.loop = missileInfo.loopAnim != 0; missile._animator.fps = missileInfo.fps; Events.InvokeMissileCreated(missile); return(missile); }
public static Missile Create(MissileInfo missileInfo, Vector3 start, Vector3 target, Character originator) { var gameObject = new GameObject("missile_" + missileInfo.missile); var missile = gameObject.AddComponent <Missile>(); missile.animator = gameObject.AddComponent <SpriteAnimator>(); missile.renderer = gameObject.GetComponent <SpriteRenderer>(); missile.iso = gameObject.AddComponent <Iso>(); missile.info = missileInfo; missile.originator = originator; missile.speed = missileInfo.velocity; missile.iso.pos = start; missile.dir = (target - start).normalized; missile.renderer.material = missileInfo.material; missile.skillInfo = SkillInfo.Find(missileInfo.skill); missile.lifeTime = 0; var spritesheet = Spritesheet.Load(missileInfo.spritesheetFilename); int direction = Iso.Direction(start, target, spritesheet.directionCount); missile.animator.sprites = spritesheet.GetSprites(direction); missile.animator.loop = missileInfo.loopAnim != 0; missile.animator.fps = missileInfo.fps; AudioManager.instance.Play(missileInfo.travelSound, missile.transform); return(missile); }
public Missile(MissileInfo info, ProjectileArgs args) { Info = info; Args = args; SubPxPosition = 1024 * Args.src; Altitude = Args.srcAltitude; Facing = Args.facing; if (info.Inaccuracy > 0) offset = (info.Inaccuracy * args.firedBy.World.SharedRandom.Gauss2D(2)).ToInt2(); if (Info.Image != null) { anim = new Animation(Info.Image, () => Facing); anim.PlayRepeating("idle"); } if (Info.ContrailLength > 0) { Trail = new ContrailHistory(Info.ContrailLength, Info.ContrailUsePlayerColor ? ContrailHistory.ChooseColor(args.firedBy) : Info.ContrailColor, Info.ContrailDelay); } }
public Missile(MissileInfo info, ProjectileArgs args) { this.info = info; this.args = args; pos = args.Source; facing = args.Facing; targetPosition = args.PassiveTarget; var world = args.SourceActor.World; if (world.SharedRandom.Next(100) <= info.LockOnProbability) lockOn = true; if (info.Inaccuracy.Range > 0) { var inaccuracy = OpenRA.Traits.Util.ApplyPercentageModifiers(info.Inaccuracy.Range, args.InaccuracyModifiers); offset = WVec.FromPDF(world.SharedRandom, 2) * inaccuracy / 1024; } if (info.Image != null) { anim = new Animation(world, info.Image, () => facing); anim.PlayRepeating("idle"); } if (info.ContrailLength > 0) { var color = info.ContrailUsePlayerColor ? ContrailRenderable.ChooseColor(args.SourceActor) : info.ContrailColor; trail = new ContrailRenderable(world, color, info.ContrailLength, info.ContrailDelay, 0); } }
public Missile(MissileInfo info, ProjectileArgs args) { this.info = info; this.args = args; pos = args.Source; facing = args.Facing; targetPosition = args.PassiveTarget; // Convert ProjectileArg definitions to world coordinates // TODO: Change the yaml definitions so we don't need this var inaccuracy = (int)(info.Inaccuracy * 1024 / Game.CellSize); speed = info.Speed * 1024 / (5 * Game.CellSize); if (info.Inaccuracy > 0) offset = WVec.FromPDF(args.SourceActor.World.SharedRandom, 2) * inaccuracy / 1024; if (info.Image != null) { anim = new Animation(info.Image, () => facing); anim.PlayRepeating("idle"); } if (info.ContrailLength > 0) { var color = info.ContrailUsePlayerColor ? ContrailRenderable.ChooseColor(args.SourceActor) : info.ContrailColor; trail = new ContrailRenderable(args.SourceActor.World, color, info.ContrailLength, info.ContrailDelay, 0); } }
public Missile(MissileInfo info, ProjectileArgs args) { this.info = info; this.args = args; pos = args.Source; facing = args.Facing; targetPosition = args.PassiveTarget; if (info.Inaccuracy.Range > 0) offset = WVec.FromPDF(args.SourceActor.World.SharedRandom, 2) * info.Inaccuracy.Range / 1024; if (info.Image != null) { anim = new Animation(args.SourceActor.World, info.Image, () => facing); anim.PlayRepeating("idle"); } if (info.ContrailLength > 0) { var color = info.ContrailUsePlayerColor ? ContrailRenderable.ChooseColor(args.SourceActor) : info.ContrailColor; trail = new ContrailRenderable(args.SourceActor.World, color, info.ContrailLength, info.ContrailDelay, 0); } }
public void RemoveMissile(MissileInfo missile) { if (missile != default(MissileInfo)) { missileList.Remove(missile); OnMissileRemoved?.Invoke(missile); } }
public static void CreateRadially(string missileId, Vector3 start, Character originator, int missileCount) { var missileInfo = MissileInfo.Find(missileId); if (missileInfo == null) { Debug.LogWarning("missile not found: " + missileId); } CreateRadially(missileInfo, start, originator, missileCount); }
private void OnMissleExploded(object sender, IMissileExplodedEventArgs e) {//Find MissileInfo of exloded chasing missile var items = aircraftLaunchedMissiles.ToList(); for (int id = 0; id < items.Count; id++) { var item = items[id].Value; //chasing missile's target var target = item.missileScript.CurrentTarget; //both aircraft's missile and SAM missile are all marked as AirTarget by this mod if (target.TargetType == TargetType.Air) { //Aircraft launched missile if (aircraftLaunchedMissiles.ContainsKey(target)) { //get intercepted missile MissileInfo hitMissile = aircraftLaunchedMissiles[target]; //Post a message on screen var msg = hitMissile.missileAircraftScript.Aircraft.Name; msg = $"{msg} is intercepted by {item.missileAircraftScript.Aircraft.Name}"; Util.GameWorld.ShowStatusMessage(msg, 4f); Destroy((MonoBehaviour)(hitMissile.missileAircraftScript)); //Manual detonation because the game won't do ExplosiveWeaponScriptBase.InvokeMethod("Detonate", hitMissile.missileScript, new object[] { Vector3.zero }); AirTarget.SetField("_aircraft", target, null); aircraftLaunchedMissiles.Remove(target); } //SAM else { bool proximityDetonation = (bool)MissileScript.InvokeMethod("CheckProximityDetonation", item.missileScript, null); if (proximityDetonation) { //Find the SAM missile and detonate KeyValuePair <ITarget, SAMMissileInfo> i = samLaunchedMissiles.FirstOrDefault(p => p.Key == target); var aaMissile = i.Value; if (aaMissile.missileScript != null) { AntiAircraftMissileScript.InvokeMethod("DestroyMissileKeepParticleEffects", aaMissile.missileScript, new object[] { ((MonoBehaviour)aaMissile.missileScript).transform.position }); //Post a message on screen var msg = $"AA missile is intercepted by { item.missileAircraftScript.Aircraft.Name}"; Util.GameWorld.ShowStatusMessage(msg, 4f); AirTarget.SetField("_aircraft", i.Key, null); samLaunchedMissiles.Remove(i.Key); } } } } } }
public static Missile Create(string missileId, Vector3 start, Vector3 target, Character originator) { var missileInfo = MissileInfo.Find(missileId); if (missileInfo == null) { Debug.LogWarning("missile not found: " + missileId); return(null); } return(Create(missileInfo, start, target, originator)); }
private bool AddMissileEntry(long id, Vector3D location, Vector3D pointingDirection, MissileType missileType) { var info = new MissileInfo(id, location, pointingDirection, missileType); if (missileList.Add(info)) { OnMissileAdded?.Invoke(info); return(true); } return(false); }
public void ChangeMissileUI(MissileInfo missileInfo, bool duringGame) { if (duringGame) { missileUIGroup.ChangeObjectDuringGame(missileInfo.missileIcon, missileInfo.missileName); } else { missileUIGroup.SetModel(missileInfo.missileIcon); missileUIGroup.SetText(missileInfo.missileName); } }
public static void CreateRadially(MissileInfo missileInfo, Vector3 start, Character originator, int missileCount) { float angle = 0; float angleStep = 360.0f / missileCount; var dir = new Vector3(1, 0); for (int i = 0; i < missileCount; ++i) { var rot = Quaternion.AngleAxis(angle, new Vector3(0, 0, 1)); Missile.Create(missileInfo, start, start + rot * dir, originator); angle += angleStep; } }
public Missile(MissileInfo info, ProjectileArgs args) { this.info = info; this.args = args; pos = args.Source; hFacing = args.Facing; gravity = new WVec(0, 0, -info.Gravity); targetPosition = args.PassiveTarget; rangeLimit = info.RangeLimit != WDist.Zero ? info.RangeLimit : args.Weapon.Range; minLaunchSpeed = info.MinimumLaunchSpeed.Length > -1 ? info.MinimumLaunchSpeed.Length : info.Speed.Length; maxLaunchSpeed = info.MaximumLaunchSpeed.Length > -1 ? info.MaximumLaunchSpeed.Length : info.Speed.Length; maxSpeed = info.Speed.Length; minLaunchAngle = info.MinimumLaunchAngle; maxLaunchAngle = info.MaximumLaunchAngle; var world = args.SourceActor.World; if (info.Inaccuracy.Length > 0) { var inaccuracy = Util.ApplyPercentageModifiers(info.Inaccuracy.Length, args.InaccuracyModifiers); offset = WVec.FromPDF(world.SharedRandom, 2) * inaccuracy / 1024; } DetermineLaunchSpeedAndAngle(world, out speed, out vFacing); velocity = new WVec(0, -speed, 0) .Rotate(new WRot(WAngle.FromFacing(vFacing), WAngle.Zero, WAngle.Zero)) .Rotate(new WRot(WAngle.Zero, WAngle.Zero, WAngle.FromFacing(hFacing))); if (world.SharedRandom.Next(100) <= info.LockOnProbability) lockOn = true; if (!string.IsNullOrEmpty(info.Image)) { anim = new Animation(world, info.Image, () => renderFacing); anim.PlayRepeating(info.Sequences.Random(world.SharedRandom)); } if (info.ContrailLength > 0) { var color = info.ContrailUsePlayerColor ? ContrailRenderable.ChooseColor(args.SourceActor) : info.ContrailColor; contrail = new ContrailRenderable(world, color, info.ContrailWidth, info.ContrailLength, info.ContrailDelay, info.ContrailZOffset); } trailPalette = info.TrailPalette; if (info.TrailUsePlayerPalette) trailPalette += args.SourceActor.Owner.InternalName; }
public MissileInfo GetMissileEntry(long missileId, bool delete) { MissileInfo tempInfo = default(MissileInfo); foreach (var info in missileList) { tempInfo = (info.id == missileId) ? info : default(MissileInfo); } if (delete) { RemoveMissile(tempInfo); } return(tempInfo); }
/*===============| Getters |==============*/ public MissileInfo GetMissileCloseTo(Vector3D location, MissileType type, bool delete) { MissileInfo tempInfo = default(MissileInfo); foreach (var info in missileList) { tempInfo = (Vector3D.DistanceSquared(info.location, location) < Vector3D.DistanceSquared(tempInfo.location, location)) && (type & info.missileType) != 0 ? info : tempInfo; } if (delete) { RemoveMissile(tempInfo); } return(tempInfo); }
public static void OnMissileLaunched(string id) { if (!string.IsNullOrWhiteSpace(id)) { if (missileList == null) { missileList = new List <MissileInfo>(); } MissileInfo info = new MissileInfo(id); missileList.Add(info); } else { Debug.LogWarning("Missile ID aka obstacle id is empty or null"); } }
public Missile(MissileInfo info, ProjectileArgs args) { Info = info; Args = args; Pos = Args.src; Altitude = Args.srcAltitude; Facing = Args.facing; if (info.Inaccuracy > 0) offset = (info.Inaccuracy * args.firedBy.World.SharedRandom.Gauss2D(2)).ToInt2(); if (Info.Image != null) { anim = new Animation(Info.Image, () => Facing); anim.PlayRepeating("idle"); } }
public MissileInfo GetMissileCloseToAndInDirection(Vector3D location, Vector3D direction, MissileType type, double range, double dotRange, bool delete) { MissileInfo tempInfo = default(MissileInfo); foreach (var info in missileList) { if (((info.direction.Dot(direction) > dotRange) && Vector3D.DistanceSquared(location, info.location) < (range * range)) && (type & info.missileType) != 0) { tempInfo = info; } } if (delete) { RemoveMissile(tempInfo); } return(tempInfo); }
private static void LoadWeaponInfo() { foreach (var item in weaponSheet) { if (item._code == null) { continue; } item.hitClass = WeaponHitClass.Find(item._hitClass); item.missileType = MissileInfo.Find(item.missileTypeId); item.code = item._code; item.cost = item._cost; item.gambleCost = item._gambleCost; item.flippyFile = item._flippyFile; item.invFile = item._invFile; item.invWidth = item._invWidth; item.invHeight = item._invHeight; item.level = item._level; item.levelReq = item._levelReq; item.weapon = item; item.name = Translation.Find(item.nameStr); item.type1Code = item._type1; item.type2Code = item._type2; item.component = item._component; item.alternateGfx = item._alternateGfx; item.dropSound = SoundInfo.Find(item._dropSound); item.dropSoundFrame = item._dropSoundFrame; item.useSound = SoundInfo.Find(item._useSound); item.alwaysUnique = item._alwaysUnique; item.normCode = item._normCode; item.uberCode = item._uberCode; item.ultraCode = item._ultraCode; if (!byCode.ContainsKey(item.code)) { byCode.Add(item.code, item); } } }
public static void LoadAll() { var sw = System.Diagnostics.Stopwatch.StartNew(); Translation.Load(); SoundInfo.Load(); SoundEnvironment.Load(); ObjectInfo.Load(); BodyLoc.Load(); ExpTable.Load(); LevelType.Load(); LevelWarpInfo.Load(); LevelPreset.Load(); LevelMazeInfo.Load(); LevelInfo.Load(); OverlayInfo.Load(); MissileInfo.Load(); ItemStat.Load(); ItemRatio.Load(); ItemType.Load(); ItemPropertyInfo.Load(); ItemSet.Load(); UniqueItem.Load(); SetItem.Load(); TreasureClass.Load(); MagicAffix.Load(); CharStatsInfo.Load(); MonLvl.Load(); MonPreset.Load(); MonSound.Load(); MonStatsExtended.Load(); MonStat.Load(); SuperUnique.Load(); SkillDescription.Load(); SkillInfo.Load(); SpawnPreset.Load(); StateInfo.Load(); Debug.Log("All txt files loaded in " + sw.ElapsedMilliseconds + " ms"); }
public void ChangeMissile(GameObject missile, int count, bool duringGame) { if (missile == null) { return; } missileInfo = missile.GetComponent <MissileInfo>(); if (missileInfo == null) { print("Changing missile to a non missile. Weapon not assigned."); return; } missileType = missile; missileCount = count; //Replace UI only for local player, and if in game if (isLocalPlayer && duringGame) { ui.ChangeMissileUI(missileInfo, duringGame); } }
public bool SendCommand(MissileInfo missile, string command) { return(antennaProtocol.PrepareMSG(command, missile.id)); }