コード例 #1
0
        private void StabilizeTargetedObject()
        {
            TargetedObject.SetLinearVelocity(Vector2.Zero);

            m_distanceJointObject = Game.CreateObject("InvisibleBlockSmall");
            m_distanceJointObject.SetBodyType(BodyType.Dynamic);

            m_distanceJoint = (IObjectDistanceJoint)Game.CreateObject("DistanceJoint");
            m_distanceJoint.SetLineVisual(LineVisual.None);
            m_distanceJoint.SetLengthType(DistanceJointLengthType.Fixed);

            m_targetedObjectJoint = (IObjectTargetObjectJoint)Game.CreateObject("TargetObjectJoint");

            var targetedObjPosition = TargetedObject.GetAABB().Center;

            m_distanceJointObject.SetWorldPosition(targetedObjPosition);
            TargetedObject.SetWorldPosition(targetedObjPosition);
            m_pullJoint.SetWorldPosition(targetedObjPosition);
            m_distanceJoint.SetWorldPosition(targetedObjPosition);
            // if DistanceJoint and TargetObjectJoint is at the same position, weird things may happen
            // uncomment the part below to stop it
            m_targetedObjectJoint.SetWorldPosition(m_distanceJointObject.GetWorldPosition() /* - Vector2.UnitY*/);

            m_pullJoint.SetTargetObject(m_distanceJointObject);
            m_distanceJoint.SetTargetObject(m_distanceJointObject);
            m_distanceJoint.SetTargetObjectJoint(m_targetedObjectJoint);
            m_targetedObjectJoint.SetTargetObject(TargetedObject);
            m_pullJoint.SetForce(15);

            IsTargetedObjectStabilized = true;
        }
コード例 #2
0
            public void Movement()
            {
                if (!EnableMovement || CurrentPath.Count == 0)
                {
                    StopMovement();
                    return;
                }
                Vector2 position = MainMotor.GetWorldPosition();

                if ((position - CurrentPath[CurrentPath.Count - 1]).Length() <= 1 || RailJoint == null)
                {
                    CurrentPath.RemoveAt(CurrentPath.Count - 1);
                    if (CurrentPath.Count == 0)
                    {
                        StopMovement();
                        return;
                    }
                    else
                    {
                        StopMovement(false);
                    }
                    RailJoint      = (IObjectRailJoint)GlobalGame.CreateObject("RailJoint", position);
                    TargetObject   = (IObjectTargetObjectJoint)GlobalGame.CreateObject("TargetObjectJoint", CurrentPath[CurrentPath.Count - 1]);
                    RailAttachment = (IObjectRailAttachmentJoint)GlobalGame.CreateObject("RailAttachmentJoint", position);
                    RailJoint.SetTargetObjectJoint(TargetObject);
                    RailAttachment.SetRailJoint(RailJoint);
                    RailAttachment.SetTargetObject(Hull);
                    RailAttachment.SetMotorEnabled(true);
                    RailAttachment.SetMaxMotorTorque(10);
                    RailAttachment.SetMotorSpeed(Speed);
                    Hull.SetBodyType(BodyType.Dynamic);
                }
            }
コード例 #3
0
        protected override void OnHover()
        {
            base.OnHover();
            Instance.FlagForRemoval();

            // no blackhole too close with other blackholes
            foreach (var hole in BlackholeLocations)
            {
                if (ScriptHelper.GrowFromCenter(hole, DestroyRadius * 2).Contains(HoverPosition))
                {
                    Destroy();
                    return;
                }
            }
            BlackholeLocations.Add(HoverPosition);

            var noCollision = Constants.NoCollision;

            if (Size == BlackholeSize.Big)
            {
                Game.RunCommand("/settime .1");
                ScriptHelper.Timeout(() => Game.RunCommand("/settime 1"), 2000);
            }

            m_blackhole = Game.CreateObject("Shadow00A");
            m_blackhole.SetBodyType(BodyType.Dynamic);
            m_blackhole.SetCollisionFilter(noCollision);
            m_blackhole.SetWorldPosition(HoverPosition);

            ScriptHelper.RunIn(() => Game.DrawCircle(HoverPosition, .5f, Color.Green), 10000);

            for (var i = 1; i < 40; i++)
            {
                var egg = Game.CreateObject("Shadow00A");
                egg.SetAngle(MathHelper.TwoPI * i / 39);
                egg.SetBodyType(BodyType.Static);
                egg.SetCollisionFilter(noCollision);
                egg.SetWorldPosition(HoverPosition);
                m_blackholes.Add(egg);
            }

            m_magnetJoint = (IObjectTargetObjectJoint)Game.CreateObject("TargetObjectJoint");
            m_magnetJoint.SetWorldPosition(HoverPosition);
            m_magnetJoint.SetTargetObject(m_blackhole);

            m_revoluteJoint = (IObjectRevoluteJoint)Game.CreateObject("RevoluteJoint");
            m_revoluteJoint.SetWorldPosition(HoverPosition);
            m_revoluteJoint.SetTargetObjectA(m_blackhole);
            //m_revoluteJoint.SetMotorEnabled(true);
            m_revoluteJoint.SetMotorSpeed(3000);
            m_revoluteJoint.SetMaxMotorTorque(50000);

            m_activeTime = Game.TotalElapsedGameTime;
        }
コード例 #4
0
        public void BAdder(TriggerArgs m73)
        {
            IObject obj = (IObject)m73.Sender;

            if (1 == 1)
            {
                IObject                  obje = Game.CreateObject("InvisibleBlockNoCollision", Game.GetSingleObjectByCustomId("BlackHole").GetWorldPosition());
                IObjectPullJoint         pull = (IObjectPullJoint)Game.CreateObject("PullJoint", Game.GetSingleObjectByCustomId("BlackHole").GetWorldPosition());
                IObjectTargetObjectJoint targ = (IObjectTargetObjectJoint)Game.CreateObject("TargetObjectJoint", obj.GetWorldPosition());
                targ.SetTargetObject(obj);
                pull.SetTargetObjectJoint(targ);
                pull.SetTargetObject(obje);
                pull.SetForce(25.985459270084f * (float)obj.GetMass());
                BObjects.Add(new GObject(obj, pull, obje));
            }
        }
コード例 #5
0
        public void GAdder(TriggerArgs m73)
        {
            IObject obj = (IObject)m73.Sender;

            if (obj.GetBodyType() == BodyType.Dynamic && !(obj is IPlayer))
            {
                IObject                  obje = Game.CreateObject("BgWall00", obj.GetWorldPosition() + new Vector2(0, 800));
                IObjectPullJoint         pull = (IObjectPullJoint)Game.CreateObject("PullJoint", obj.GetWorldPosition() + new Vector2(0, 800));
                IObjectTargetObjectJoint targ = (IObjectTargetObjectJoint)Game.CreateObject("TargetObjectJoint", obj.GetWorldPosition());
                targ.SetTargetObject(obj);
                pull.SetTargetObjectJoint(targ);
                pull.SetTargetObject(obje);
                pull.SetForce(25.985459270084f * (float)obj.GetMass());
                GObjects.Add(new GObject(obj, pull, obje));
            }
        }
コード例 #6
0
ファイル: #F.cs プロジェクト: Juansero29/SFDScripts
 public void JetPack(TriggerArgs args)
 {
     foreach (IPlayer ply in Game.GetPlayers())
     {
         IObjectPullJoint         pullit   = null;
         IObjectTargetObjectJoint targetit = null;
         float forc = 0;
         if (!Bbook.ContainsKey(ply) && !ply.IsDead)
         {
             ;
             Bbook.Add(ply, true);
             IObjectWeldJoint       weld = (IObjectWeldJoint)Game.CreateObject("WeldJoint", ply.GetWorldPosition());
             IObjectActivateTrigger trig = (IObjectActivateTrigger)Game.CreateObject("ActivateTrigger", ply.GetWorldPosition() + new Vector2(0, 8));
             trig.SetBodyType(BodyType.Dynamic);
             trig.SetScriptMethod("Toggle");
             weld.AddTargetObject(trig);
             weld.AddTargetObject(ply);
         }
         if (!Gbook.ContainsKey(ply) && !ply.IsDead)
         {
             ;
             Gbook.Add(ply, 2);
         }
         if (Gbook.ContainsKey(ply) && !ply.IsDead)
         {
             int c = Gbook[ply] % demforce.Length;
             forc = force * demforce[c] / 100;
             if (ply.IsBlocking && ply.IsWalking)
             {
                 Gbook[ply] = (c + 1) % demforce.Length;
                 Game.PlayEffect("CFTXT", ply.GetWorldPosition() + new Vector2(0, 8), demforce[Gbook[ply]].ToString() + " %");
             }
         }
         if (book.ContainsKey(ply))
         {
             pullit   = book[ply];
             targetit = pullit.GetTargetObjectJoint();
             book[ply].SetWorldPosition(targetit.GetWorldPosition() + new Vector2(0, 500));
         }
         bool jeton     = (ply.IsWalking && !ply.IsDead && !ply.IsStaggering && !ply.IsRolling && (!ply.IsBlocking || ply.IsInMidAir) && !ply.IsManualAiming);
         bool mapborder = WorkOutsideBorders || Game.GetCameraArea().Contains(ply.GetWorldPosition());
         if (jeton)
         {
             if (book.ContainsKey(ply))
             {
                 book[ply].Destroy();
                 book.Remove(ply);
             }
             pullit = (IObjectPullJoint)Game.CreateObject("PullJoint", ply.GetWorldPosition() + new Vector2(0, 500));
             book.Add(ply, pullit);
             if (!mapborder)
             {
                 forc = (float)(forc / 2);
             }
             pullit.SetForce(forc);
             targetit = (IObjectTargetObjectJoint)Game.CreateObject("TargetObjectJoint", ply.GetWorldPosition());
             targetit.SetTargetObject(ply);
             pullit.SetTargetObject(concrete);
             pullit.SetTargetObjectJoint(targetit);
         }
         if (!jeton)
         {
             if (pullit != null)
             {
                 //	pullit .SetWorldPosition(ply.GetWorldPosition() + new Vector2(0,50));
                 pullit.SetForce(0f);
             }
         }
     }
 }
コード例 #7
0
        public void Fast(TriggerArgs args)
        {
            foreach (IObject missile in Game.GetMissileObjects())
            {
                if (missile is IObjectWeaponItem)
                {
                    float speed = 100;
                    if ((speed > 1 || ((IObjectWeaponItem)missile).WeaponItemType == WeaponItemType.Rifle) && !(missile.CustomId == "ScriptMarkedMissile") && (!(ThrownWeapons.Contains(missile.Name)) || AccelerateThrownWeapons) && !DisableThrowning)
                    {
                        missile.SetLinearVelocity(missile.GetLinearVelocity() * ThrowSpeedMultiply);
                        missile.CustomId = "ScriptMarkedMissile";

                        if ((CreateFireCircleOnImpact || CreateExplosionOnImpact))
                        {
                            IObjectTargetObjectJoint targetjoint = (IObjectTargetObjectJoint)Game.CreateObject("TargetObjectJoint", missile.GetWorldPosition(), 0f, missile.GetLinearVelocity(), missile.GetAngularVelocity());
                            targetjoint.SetTargetObject(missile);
                            targetjoint.CustomId = "destructjoint";
                        }

                        if (CreateRandomImpact && Rnd.Next(0, RandomProb) == 0)
                        {
                            int x = Rnd.Next(0, 25);
                            IObjectTargetObjectJoint targetjoint = (IObjectTargetObjectJoint)Game.CreateObject("TargetObjectJoint", missile.GetWorldPosition(), 0f, missile.GetLinearVelocity(), missile.GetAngularVelocity());
                            targetjoint.SetTargetObject(missile);

                            if (x < 25)
                            {
                                targetjoint.CustomId = "Minejoint";
                                missile.SetLinearVelocity(missile.GetLinearVelocity() * 1.5f);

                                IObjectTimerTrigger Timer = (IObjectTimerTrigger)Game.CreateObject("TimerTrigger");
                                Timer.SetIntervalTime(500);
                                Timer.SetRepeatCount(1);
                                Timer.SetScriptMethod("Mine");
                                Timer.Trigger();
                            }


                            if (x >= 9 && x < 15)
                            {
                                targetjoint.CustomId = "Grenadejoint";
                                missile.SetLinearVelocity(missile.GetLinearVelocity() * 1.5f);

                                IObjectTimerTrigger Timer = (IObjectTimerTrigger)Game.CreateObject("TimerTrigger");
                                Timer.SetIntervalTime(250);
                                Timer.SetRepeatCount(1);
                                Timer.SetScriptMethod("grenade");
                                Timer.Trigger();
                            }

                            if (x >= 3 && x < 9)
                            {
                                targetjoint.CustomId = "Bazookajoint";
                                missile.SetLinearVelocity(missile.GetLinearVelocity() * 1.5f);

                                IObjectTimerTrigger Timer = (IObjectTimerTrigger)Game.CreateObject("TimerTrigger");
                                Timer.SetIntervalTime(250);
                                Timer.SetRepeatCount(1);
                                Timer.SetScriptMethod("bazooka");
                                Timer.Trigger();
                            }
                            if (x <= 2)
                            {
                                targetjoint.CustomId = "Electricjoint";
                                missile.SetLinearVelocity(missile.GetLinearVelocity() * 1.5f);
                            }
                        }
                        if (IncreaseMeleeWeaponMass && ((IObjectWeaponItem)missile).WeaponItemType == WeaponItemType.Melee)
                        {
                            missile.SetMass((float)0.8);
                        }
                    }
                    if ((CreateFireCircleOnImpact || CreateExplosionOnImpact) && speed < 4 && missile.CustomId == "ScriptMarkedMissile")
                    {
                        missile.TrackAsMissile(false);
                    }

                    if (DisableThrownWeaponsCollision || DisableThrowning)
                    {
                        if (ThrownWeapons.Contains(missile.Name))
                        {
                            missile.TrackAsMissile(false);
                        }
                    }

                    if (DisableThrowning)
                    {
                        missile.TrackAsMissile(false);
                        if (speed > 5)
                        {
                            missile.SetLinearVelocity(missile.GetLinearVelocity() / 3);
                        }
                    }


                    if (SetMissileOnFire && !DisableThrowning && (missile.CustomId == "ScriptMarkedMissile"))
                    {
                        missile.SetMaxFire();
                        missile.SetHealth(100);
                    }
                }
            }
        }