public void CreateFormationPattern(Vector3 pos, Vector3 facing, bool vFormation) { if ((double)facing.LengthSquared <= 9.99999974737875E-06 || !facing.IsFinite() || this.m_ships.Count == 0) { return; } Matrix world = Matrix.CreateWorld(ShipFormation.GetCenterOfMass(this.m_ships), facing, Vector3.UnitY); this.m_formationPattern = !vFormation?FormationPatternCreator.CreateLineAbreastPattern(this.m_ships, world) : FormationPatternCreator.CreateVFormationPattern(this.m_ships, world); float val2 = 0.0f; foreach (FormationPatternData formationPatternData in this.m_formationPattern) { val2 = Math.Max(formationPatternData.Position.Z, val2); } List <FormationPatternData> lineAbreastPattern = FormationPatternCreator.CreateLineAbreastPattern(this.m_shipsOnBackLine, Matrix.CreateWorld(ShipFormation.GetCenterOfMass(this.m_shipsOnBackLine), facing, Vector3.UnitY)); foreach (FormationPatternData formationPatternData in lineAbreastPattern) { Vector3 position = formationPatternData.Position; position.Z += this.m_BackLineOffsetDist + val2; formationPatternData.IsLead = formationPatternData.IsLead && this.m_formationPattern.Count == 0; formationPatternData.Position = position; } this.m_formationPattern.AddRange((IEnumerable <FormationPatternData>)lineAbreastPattern); }
public FormationDefinition() { this.m_CurrentPosition = new Vector3(0.0f, 0.0f, 0.0f); this.m_formationPattern = new List <FormationPatternData>(); this._parentShipFormation = (ShipFormation)null; }