Пример #1
0
        public IGameWorld GetWorld(int worldDescriptionId)
        {
            var world = new GameWorld(_geometryMathService);

            var path = "SerializedData/Worlds/1.json";
            var json = File.ReadAllText(path);

            var worldSerialized = JsonConvert.DeserializeObject <WorldSerialized>(json);

            var gameObjects = worldSerialized
                              .GameObjects.Select(sgo => _gameObjectBuilder.BuildGameObject(sgo));

            foreach (var go in gameObjects)
            {
                world.AddGameObject(go);
            }

            var gameResultGraphicComponent = new GameResultGraphicComponent(_consoleWriter);
            var gameResultLogicComponent   = new GameResultLogicComponent();
            var gameResultComponent        = new GameObject(null, null,
                                                            gameResultLogicComponent, gameResultGraphicComponent);

            gameResultComponent.IsAbstract = true;
            world.AddGameObject(gameResultComponent);

            return(world);
        }
Пример #2
0
        /// <summary>
        /// Creates a projectile starting at the given location with the given rotation in radians
        /// </summary>
        /// <param name="name"></param>
        /// <param name="origin"></param>
        /// <param name="rotation"></param>
        /// <returns></returns>
        public Projectile CreateProjectile(string name, Vec2 origin, float rotation, ProjectileSource source)
        {
            var definition = _weaponDefinitions.FirstOrDefault(x => x.Name.ToLower().Equals(name.ToLower()));

            if (definition == null)
            {
                throw new Exception($"No WeaponDefinition found for {name}");
            }

            var texture     = _contentManager.Load <Texture2D>(definition.SpriteSheet);
            var shapeDef    = new PolygonDef();
            var physicsSize = GameUtils.PhysicsVec(new Vector2(definition.Width, definition.Height));

            shapeDef.Vertices    = new Vec2[4];
            shapeDef.Vertices[0] = new Vec2(-(physicsSize.X / 2), -(physicsSize.Y / 2));
            shapeDef.Vertices[1] = new Vec2((physicsSize.X / 2), -(physicsSize.Y / 2));
            shapeDef.Vertices[2] = new Vec2((physicsSize.X / 2), (physicsSize.Y / 2));
            shapeDef.Vertices[3] = new Vec2(-(physicsSize.X / 2), (physicsSize.Y / 2));
            shapeDef.VertexCount = 4;

            shapeDef.Density  = definition.Density;
            shapeDef.Friction = definition.Friction;
            //projectiles cannot collide with eachother
            if (source == ProjectileSource.Player)
            {
                shapeDef.Filter.CategoryBits = CollisionCategory.PlayerProjectile;
                shapeDef.Filter.MaskBits     = (ushort)(CollisionCategory.Alien | CollisionCategory.AlienProjectile | CollisionCategory.Wall);
            }
            else
            {
                shapeDef.Filter.CategoryBits = CollisionCategory.AlienProjectile;
                shapeDef.Filter.MaskBits     = (ushort)(CollisionCategory.Player | CollisionCategory.PlayerProjectile | CollisionCategory.Wall);
            }

            var bodyDef = new BodyDef();

            bodyDef.IsBullet = true; bodyDef.Position.Set(origin.X, origin.Y);
            var body  = _physicsWorld.CreateBody(bodyDef);
            var shape = body.CreateShape(shapeDef);

            body.SetMassFromShapes();

            var velocityVector = GameUtils.RotationToVec2((float)(rotation * 180.0f / System.Math.PI));

            body.SetLinearVelocity(velocityVector * definition.Velocity);

            var gameObject = new Projectile(_physicsWorld
                                            , definition
                                            , texture
                                            , shape
                                            , body
                                            , origin
                                            , rotation
                                            , GameData
                                            , GameUtils);

            GameWorld.AddGameObject(gameObject);
            return(gameObject);
        }
        protected void AddAlienPlaneToField(Plane plane, AlienPlaneController controller)
        {
            Logger.Log(string.Format("Add alien's plane in position {0}...", plane.Position));

            plane.PlayerGuid = new Guid();

            m_world.AddGameObject(plane);
            m_world.AddPlaneController(new AlienPlaneController(m_world, plane));
        }
Пример #4
0
        public Animation Create(Vec2 position, string name)
        {
            var def = _definitions.FirstOrDefault(x => x.Name.Equals(name));

            if (def == null)
            {
                throw new System.Exception($"No such definition for animation {name}");
            }

            var animation = new Animation(position, def, GameData, GameUtils);

            GameWorld.AddGameObject(animation);
            return(animation);
        }
Пример #5
0
        public void CreateHealthPickup(string definitionName)
        {
            var definition = Definitions.FirstOrDefault(d => d.Name.ToLower().Equals(definitionName.ToLower()));

            if (definition == null)
            {
                throw new Exception($"No such pickup definition {definitionName}");
            }

            var template = CreatePickupTemplate(definition);

            var hp = int.Parse(definition.Values["Hp"]);

            var healthPickup = new Health(GameData, GameUtils, PhysicsWorld, template.Texture, template.Shape, template.RigidBody, hp, template.Scale);

            GameWorld.AddGameObject(healthPickup);
        }
Пример #6
0
        public void CreateLaserPickup(string definitionName)
        {
            var definition = Definitions.FirstOrDefault(d => d.Name.ToLower().Equals(definitionName.ToLower()));

            if (definition == null)
            {
                throw new Exception($"No such pickup definition {definitionName}");
            }

            var projectileName = definition.Values["ProjectileName"];
            var startingAmmo   = int.Parse(definition.Values["StartingAmmo"]);

            var template = CreatePickupTemplate(definition);

            var laserPickup = new Laser(GameData, GameUtils, PhysicsWorld, template.Texture, template.Shape, template.RigidBody, projectileName, startingAmmo, definitionName, template.Scale);

            GameWorld.AddGameObject(laserPickup);
        }
Пример #7
0
        public CommitResult CommitObjects(Guid playerGuid, List <GameObject> objects)
        {
            CommitResult result = new CommitResult()
            {
                ObjectsIds = new List <int>(objects.Count)
            };

            foreach (var obj in objects)
            {
                if (obj is Plane)
                {
                    m_playerToPlaneMapping[playerGuid] = obj as Plane; // If player commit plane when it his own plane
                }
                IntegrityDataHelper.ProcessRecieved(obj, World);

                World.AddGameObject(obj);

                result.ObjectsIds.Add(obj.Id.Value);
            }

            LogMessage(string.Format("{0} object(s) has been commited (last ID={1})", objects.Count, m_lastObjectID));

            return(result);
        }