コード例 #1
0
        static void InitShape()
        {
            Coefficients coe = TimeWarp.Coefficients;

            Vector2D[] hullverticies = new Vector2D[]
            {
                new Vector2D(5, 5),
                new Vector2D(-5, 5),
                new Vector2D(-5, -5),
                new Vector2D(5, -5)
            };
            IGeometry2D hull = new Polygon2D(ALVector2D.Zero, hullverticies);

            DefaultShape = new RigidBodyTemplate(MassInertia.FromRectangle(.1f, 10, 10), new IGeometry2D[] { hull }, new Coefficients[] { coe });
            DefaultShape.BalanceBody();
        }
コード例 #2
0
        RigidBodyTemplate GetPrimaryWeaponShape()
        {
            Coefficients coe = TimeWarp.Coefficients;

            Vector2D[] bulletverticies = new Vector2D[]
            {
                new Vector2D(30, 5),
                new Vector2D(-30, 5),
                new Vector2D(-30, -5),
                new Vector2D(30, -5)
            };
            IGeometry2D       enginecone   = new Polygon2D(ALVector2D.Zero, bulletverticies);
            RigidBodyTemplate DefaultShape = new RigidBodyTemplate(MassInertia.FromRectangle(1, 10, 2), new IGeometry2D[] { enginecone }, new Coefficients[] { coe });

            DefaultShape.BalanceBody();
            return(DefaultShape);
        }
コード例 #3
0
 static void InitShape()
 {
     DefaultShape = new RigidBodyTemplate(MassInertia.FromRectangle(.01f, 5, 10), new IGeometry2D[] { new Polygon2D(ALVector2D.Zero, Polygon2D.FromRectangle(5, 10)) }, new Coefficients[] { TimeWarp.Coefficients });
 }
コード例 #4
0
        public static void CreateDebris(GameResult gameResult, IControlable wrecked)
        {
            PhysicsState state;
            int          length    = wrecked.CollidableParts.Length;
            float        totalArea = 0;

            float[] areas = new float[length];
            for (int pos = 0; pos < length; ++pos)
            {
                totalArea += (areas[pos] = wrecked.CollidableParts[pos].BaseGeometry.Area);
            }
            float totalAreaInv = 1 / totalArea;

            if (wrecked is IShip)
            {
                float           smallest = float.MaxValue;
                ControlableWave wave;
                for (int pos = 0; pos < length; ++pos)
                {
                    state = new PhysicsState(wrecked.Current);
                    state.Position.Linear = wrecked.CollidableParts[pos].Position.Linear + new Vector2D((float)((rand.NextDouble() - .5f) * 2) * wrecked.CollidableParts[pos].BaseGeometry.InnerRadius, (float)((rand.NextDouble() - .5f) * 2) * wrecked.CollidableParts[pos].BaseGeometry.InnerRadius);
                    smallest = MathHelper.Min(smallest, wrecked.CollidableParts[pos].BaseGeometry.InnerRadius);


                    wave = new ControlableWave(
                        new LifeSpan(TimeForSecondaryExplosions),
                        wrecked.MassInfo.Mass * totalAreaInv * areas[pos] * .5f,
                        state,
                        wrecked.CollidableParts[pos].BaseGeometry.InnerRadius,
                        (wrecked.BoundingRadius - wrecked.CollidableParts[pos].BaseGeometry.InnerRadius) / TimeForSecondaryExplosions,
                        TimeWarp.DefaultExposionColors,
                        TimeWarp.DefaultExplosionPrimaryColor,
                        new ShipMovementInfo(DefaultShipMovementInfo),
                        new ShipState(DefaultShipState),
                        AsteroidFaction,
                        new ControlableSounds());

                    wave.OnCreation(gameResult, new FactionInfo(AsteroidFaction));
                }
                state = new PhysicsState(wrecked.Current);
                wave  = new ControlableWave(new LifeSpan(TimeForPrimaryExplosion),
                                            wrecked.MassInfo.Mass * .5f,
                                            state,
                                            smallest,
                                            (wrecked.BoundingRadius - smallest) / TimeForPrimaryExplosion,
                                            TimeWarp.DefaultExposionColors,
                                            TimeWarp.DefaultExplosionPrimaryColor,
                                            new ShipMovementInfo(DefaultShipMovementInfo),
                                            new ShipState(DefaultShipState),
                                            AsteroidFaction,
                                            new ControlableSounds());
                wave.OnCreation(gameResult, new FactionInfo(AsteroidFaction));
            }
            for (int pos = 0; pos < length; ++pos)
            {
                state          = new PhysicsState(wrecked.Current);
                state.Position = wrecked.CollidableParts[pos].Position;
                MassInertia massInfo;
                float       mass = wrecked.MassInfo.Mass * totalAreaInv * areas[pos];
                if (wrecked.CollidableParts[pos].UseCircleCollision)
                {
                    massInfo = MassInertia.FromSolidCylinder(mass, wrecked.CollidableParts[pos].BaseGeometry.BoundingRadius);
                }
                else
                {
                    wrecked.CollidableParts[pos].SetPosition(ALVector2D.Zero);
                    wrecked.CollidableParts[pos].CalcBoundingBox2D();
                    BoundingBox2D box = wrecked.CollidableParts[pos].BoundingBox2D;
                    massInfo = MassInertia.FromRectangle(mass, box.Upper.X - box.Lower.X, box.Upper.Y - box.Lower.Y);
                }
                //ColoredRigidBodyPart part = new ColoredRigidBodyPart(ALVector2D.Zero, state.Position, wrecked.CollidableParts[pos].BaseGeometry, DefaultCoefficients, DefaultColors, DefaultPrimaryColor);
                RigidBodyPart part = new RigidBodyPart(ALVector2D.Zero, state.Position, wrecked.CollidableParts[pos].BaseGeometry, DefaultCoefficients);
                Asteroid      roid = new Asteroid(part, massInfo, state);
                roid.OnCreation(gameResult, new FactionInfo(AsteroidFaction));
            }
        }