public Hexagon(Vector3 position, Vector2 indexNumber, Vector2[] neighbors, Logic.Vars_Func.HexTyp typ) { imps = new List <Imp>(); this.position = position; this.indexNumber = indexNumber; this.neighbors = neighbors; this.typ = typ; drawColor = Color.White; building = false; roomNumber = 0; parent = indexNumber; boneTransforms = new Matrix[Logic.Vars_Func.getHexagonModell(typ).Model.Bones.Count]; currentDrawPosition = Vector3.Zero; isEnlightend = false; isStartLight = false; isEntrance = false; isHQ = false; lightPower = 0; fireModels = new FireModel[3]; randomValue = new Random(); growObject = Logic.Vars_Func.GrowObject.length; targetFlag = false; fireBalls = new List <FireBallModel>(); }
public Map(int sidelength, Logic.Vars_Func.HexTyp typ, Boolean newGame, float hexagonSideLength) { map = new Hexagon[sidelength * sidelength]; rooms = new List <Room>(); nests = new List <Nest>(); temples = new List <Nest>(); farms = new List <Nest>(); entrances = new List <Nest>(); creatures = new List <Creature>(); heroes = new List <Creature>(); impList = new List <Imp>(); jobsWaiting = new Queue <Job>(); jobsInProgress = new List <Job>(); jobsDone = new List <Job>(); mineJobs = new List <Vector2>(); fires = new List <FireModel>(); dyingCreatures = new List <Creature>(); waves = new List <Wave>(); endedWaves = new List <Wave>(); fireBalls = new List <FireBallModel>(); hqPosition = new Vector2(); //drawHeight = 2; //how many hexagons are drawn up and down of the middle (+1) //drawWidth = 5; //how many hexagons are drawn left and right of the middle (+1) this.hexagonSideLength = hexagonSideLength; if (newGame) { Vector2 indexNumber = new Vector2(0, 0); this.planeSidelength = sidelength; //creates a map with proportions sidelength * sidelength for (int i = 0; i < sidelength; ++i) { for (int j = 0; j < sidelength; ++j) { Vector2[] neighbors = new Vector2[6]; //neighbor indices for i even if (i % 2 == 0) { float xValue = (indexNumber.X - 1 + sidelength) % sidelength; float yUpValue = (indexNumber.Y + 1) % sidelength; float yDownValue = (indexNumber.Y - 1 + sidelength) % sidelength; neighbors[0] = new Vector2(indexNumber.X, yUpValue); neighbors[1] = new Vector2(indexNumber.X + 1, indexNumber.Y); neighbors[2] = new Vector2(indexNumber.X + 1, yDownValue); neighbors[3] = new Vector2(indexNumber.X, yDownValue); neighbors[4] = new Vector2(xValue, yDownValue); neighbors[5] = new Vector2(xValue, indexNumber.Y); map[(int)(indexNumber.X * sidelength + indexNumber.Y)] = new Hexagon(new Vector3(i * 3 / 2 * hexagonSideLength + hexagonSideLength * 1.5f, j * 2 * hexagonSideLength * 7 / 8 + hexagonSideLength * 7 / 8, 0), indexNumber, neighbors, typ); } //neighbor indices for i uneven else { float xValue = (indexNumber.X + 1) % sidelength; float yUpValue = (indexNumber.Y + 1) % sidelength; float yDownValue = (indexNumber.Y - 1 + sidelength) % sidelength; neighbors[0] = new Vector2(indexNumber.X, yUpValue); neighbors[1] = new Vector2(xValue, yUpValue); neighbors[2] = new Vector2(xValue, indexNumber.Y); neighbors[3] = new Vector2(indexNumber.X, yDownValue); neighbors[4] = new Vector2(indexNumber.X - 1, indexNumber.Y); neighbors[5] = new Vector2(indexNumber.X - 1, yUpValue); map[(int)(indexNumber.X * sidelength + indexNumber.Y)] = new Hexagon(new Vector3(i * 3 / 2 * hexagonSideLength + hexagonSideLength * 1.5f, j * 2 * hexagonSideLength * 7 / 8 + hexagonSideLength * 7 / 8 * 2, 0), indexNumber, neighbors, typ); } ++indexNumber.Y; ; } indexNumber.Y = 0; ++indexNumber.X; } } else { // insert the savegame here. //load(null); } }