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); }
/// <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)); }
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); }
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); }
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); }
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); }