Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
            }
        }
Esempio n. 4
0
        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);
            }
        }
Esempio n. 5
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);
            }
        }
Esempio n. 6
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);
     }
 }
Esempio n. 8
0
        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);
                            }
                        }
                    }
                }
            }
        }
Esempio n. 10
0
        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);
            }
Esempio n. 12
0
 public void ChangeMissileUI(MissileInfo missileInfo, bool duringGame)
 {
     if (duringGame)
     {
         missileUIGroup.ChangeObjectDuringGame(missileInfo.missileIcon, missileInfo.missileName);
     }
     else
     {
         missileUIGroup.SetModel(missileInfo.missileIcon);
         missileUIGroup.SetText(missileInfo.missileName);
     }
 }
Esempio n. 13
0
        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;
            }
        }
Esempio n. 14
0
        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);
            }
Esempio n. 17
0
 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");
     }
 }
Esempio n. 18
0
        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);
            }
Esempio n. 20
0
    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);
            }
        }
    }
Esempio n. 21
0
        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");
        }
Esempio n. 22
0
    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));
 }