This was SVN commit r2687.
This commit is contained in:
parent
4cc30aeb56
commit
c428f510f6
@ -1,48 +1,12 @@
|
||||
// constants
|
||||
|
||||
const SIZE = 208;
|
||||
const NUM_PLAYERS = 4;
|
||||
|
||||
// some utility stuff
|
||||
|
||||
const PI = Math.PI;
|
||||
|
||||
function fractionToTiles(f) {
|
||||
return SIZE * f;
|
||||
}
|
||||
|
||||
function tilesToFraction(t) {
|
||||
return t / SIZE;
|
||||
}
|
||||
|
||||
function fractionToSize(f) {
|
||||
return SIZE * SIZE * f;
|
||||
}
|
||||
|
||||
function sizeToFraction(s) {
|
||||
return s / SIZE / SIZE;
|
||||
}
|
||||
|
||||
function cos(x) {
|
||||
return Math.cos(x);
|
||||
}
|
||||
|
||||
function sin(x) {
|
||||
return Math.sin(x);
|
||||
}
|
||||
|
||||
function round(x) {
|
||||
return Math.round(x);
|
||||
}
|
||||
|
||||
// environment constants
|
||||
|
||||
const oTree = "flora/wrld_flora_deci_1.xml";
|
||||
const oGrass = "foliage/grass_tufts_a.xml";
|
||||
const oBush = "foliage/bush_highlands.xml";
|
||||
|
||||
const tGrass = ["grass1_a", "grass2"];
|
||||
const tCliff = ["cliff2", "cliff2_moss"];
|
||||
const tForestFloor = "grass_forest_floor_oak";
|
||||
const tForest = tForestFloor + "|" + oTree;
|
||||
const tForest = "grass_forest_floor_oak|flora/wrld_flora_oak.xml";
|
||||
const tGrassDirt75 = "grass dirt 75";
|
||||
const tGrassDirt50 = "grass dirt 50";
|
||||
const tGrassDirt25 = "grass dirt 25";
|
||||
@ -51,12 +15,29 @@ const tShore = "dirt_brown_rocks";
|
||||
const tWater = "water_2";
|
||||
const tWaterDeep = "water_3";
|
||||
|
||||
const oGrass = "foliage/grass_tufts_a.xml";
|
||||
const oTree = "flora/wrld_flora_oak.xml";
|
||||
|
||||
// some utility functions to save typing
|
||||
|
||||
function paintClass(cl) {
|
||||
return new TileClassPainter(cl);
|
||||
}
|
||||
|
||||
function avoidClasses(/*class1, dist1, class2, dist2, etc*/) {
|
||||
var ar = new Array(arguments.length/2);
|
||||
for(var i=0; i<arguments.length/2; i++) {
|
||||
ar[i] = new AvoidTileClassConstraint(arguments[2*i], arguments[2*i+1]);
|
||||
}
|
||||
return ar;
|
||||
}
|
||||
|
||||
// initialize map
|
||||
|
||||
println("Initializing map...");
|
||||
init(SIZE, tGrass, 0);
|
||||
init(SIZE, tGrass, 10);
|
||||
|
||||
// tile classes
|
||||
// create tile classes
|
||||
|
||||
clPlayer = createTileClass();
|
||||
clHill = createTileClass();
|
||||
@ -64,7 +45,7 @@ clForest = createTileClass();
|
||||
clWater = createTileClass();
|
||||
clDirt = createTileClass();
|
||||
|
||||
// player placement
|
||||
// place players
|
||||
|
||||
playerX = new Array(NUM_PLAYERS);
|
||||
playerY = new Array(NUM_PLAYERS);
|
||||
@ -75,18 +56,15 @@ for(i=0; i<NUM_PLAYERS; i++) {
|
||||
playerAngle[i] = startAngle + i*2*PI/NUM_PLAYERS;
|
||||
playerX[i] = 0.5 + 0.35*cos(playerAngle[i]);
|
||||
playerY[i] = 0.5 + 0.35*sin(playerAngle[i]);
|
||||
println("Player " + i + " is at (" + playerX[i] + ", " + playerY[i] + ")");
|
||||
}
|
||||
|
||||
// player areas
|
||||
|
||||
for(i=0; i<NUM_PLAYERS; i++) {
|
||||
println("Creating base for player " + i + "...");
|
||||
|
||||
// some constants
|
||||
radius = 18;
|
||||
cliffRadius = 3;
|
||||
elevation = 14;
|
||||
elevation = 32;
|
||||
|
||||
// get the x and y in tiles
|
||||
fx = fractionToTiles(playerX[i]);
|
||||
@ -108,7 +86,7 @@ for(i=0; i<NUM_PLAYERS; i++) {
|
||||
elevation, // elevation
|
||||
cliffRadius // blend radius
|
||||
);
|
||||
createArea(placer, [terrainPainter, elevationPainter, new TileClassPainter(clPlayer)], null);
|
||||
createArea(placer, [terrainPainter, elevationPainter, paintClass(clPlayer)], null);
|
||||
|
||||
// create the ramp
|
||||
rampAngle = playerAngle[i] + PI + (2*randFloat()-1)*PI/8;
|
||||
@ -116,7 +94,7 @@ for(i=0; i<NUM_PLAYERS; i++) {
|
||||
rampX = round(fx + rampDist * cos(rampAngle));
|
||||
rampY = round(fy + rampDist * sin(rampAngle));
|
||||
placer = new ClumpPlacer(80, 0.9, 0.5, 0, rampX, rampY);
|
||||
painter = [new TerrainPainter(tGrass), new SmoothElevationPainter(ELEVATION_SET, elevation/3, 5)];
|
||||
painter = [new TerrainPainter(tGrass), new SmoothElevationPainter(ELEVATION_SET, (elevation-10)/3+10, 5)];
|
||||
createArea(placer, painter, null);
|
||||
|
||||
// create the central dirt patch
|
||||
@ -131,71 +109,58 @@ for(i=0; i<NUM_PLAYERS; i++) {
|
||||
group = new SimpleGroup(
|
||||
[ // elements (type, count, distance)
|
||||
new SimpleObject("hele_cc", 1, 0),
|
||||
new SimpleObject("hele_iar_b", 3, 5)
|
||||
new SimpleObject("hele_isp_b", 3, 5)
|
||||
],
|
||||
true, // avoid self
|
||||
null, // tile class
|
||||
ix, iy // position
|
||||
);
|
||||
createObjectGroup(group, null);
|
||||
createObjectGroup(group, i);
|
||||
|
||||
// maybe do other stuff, like sheep and villies?
|
||||
}
|
||||
|
||||
// create lakes
|
||||
println("Creating lakes...");
|
||||
placer = new ClumpPlacer(170, 0.5, 0.1, 0);
|
||||
painter = new LayeredPainter(
|
||||
[1,1,3], // widths
|
||||
[tGrassDirt50, tShore, tWater, tWaterDeep] // terrains
|
||||
placer = new ClumpPlacer(170, 0.6, 0.1, 0);
|
||||
terrainPainter = new LayeredPainter(
|
||||
[1,1], // widths
|
||||
[tGrassDirt50, tShore, tWaterDeep] // terrains
|
||||
);
|
||||
createAreas(placer, [painter, new TileClassPainter(clWater)],
|
||||
[
|
||||
new AvoidTileClassConstraint(clPlayer, 2),
|
||||
new AvoidTileClassConstraint(clWater, 13)
|
||||
],
|
||||
elevationPainter = new SmoothElevationPainter(ELEVATION_SET, 5, 2);
|
||||
createAreas(placer, [terrainPainter, elevationPainter, paintClass(clWater)],
|
||||
avoidClasses(clPlayer, 2, clWater, 13),
|
||||
round(1.5 * NUM_PLAYERS)
|
||||
);
|
||||
|
||||
// create bumps
|
||||
println("Creating bumps...");
|
||||
placer = new ClumpPlacer(10, 0.3, 0.06, 0);
|
||||
painter = new SmoothElevationPainter(ELEVATION_MODIFY, 2.5, 2);
|
||||
painter = new SmoothElevationPainter(ELEVATION_MODIFY, 3, 2);
|
||||
createAreas(placer, painter,
|
||||
new AvoidTileClassConstraint(clWater, 2),
|
||||
SIZE*SIZE/300
|
||||
avoidClasses(clWater, 2),
|
||||
SIZE*SIZE/200
|
||||
);
|
||||
|
||||
// create forests
|
||||
println("Creating forests...");
|
||||
placer = new ClumpPlacer(30, 0.2, 0.06, 0);
|
||||
painter = new LayeredPainter([2], [[tGrass, tForest], tForest]);
|
||||
createAreas(placer, [painter, new TileClassPainter(clForest)],
|
||||
[
|
||||
new AvoidTileClassConstraint(clPlayer, 2),
|
||||
new AvoidTileClassConstraint(clWater, 5),
|
||||
new AvoidTileClassConstraint(clForest, 5),
|
||||
],
|
||||
createAreas(placer, [painter, paintClass(clForest)],
|
||||
avoidClasses(clPlayer, 2, clWater, 5, clForest, 5),
|
||||
8 * NUM_PLAYERS
|
||||
);
|
||||
|
||||
// create forests
|
||||
println("Creating hills...");
|
||||
placer = new ClumpPlacer(60, 0.4, 0.1, 0);
|
||||
placer = new ClumpPlacer(60, 0.2, 0.1, 0);
|
||||
terrainPainter = new LayeredPainter(
|
||||
[3], // widths
|
||||
[tCliff, tGrass] // terrains
|
||||
);
|
||||
elevationPainter = new SmoothElevationPainter(
|
||||
ELEVATION_SET, // type
|
||||
9, // elevation
|
||||
2 // blend radius
|
||||
);
|
||||
createAreas(placer, [terrainPainter, elevationPainter, new TileClassPainter(clHill)],
|
||||
[
|
||||
new AvoidTileClassConstraint(clPlayer, 2),
|
||||
new AvoidTileClassConstraint(clWater, 5),
|
||||
new AvoidTileClassConstraint(clForest, 5),
|
||||
],
|
||||
elevationPainter = new SmoothElevationPainter(ELEVATION_SET, 32, 2);
|
||||
createAreas(placer, [terrainPainter, elevationPainter, paintClass(clHill)],
|
||||
avoidClasses(clPlayer, 2, clWater, 5, clForest, 5),
|
||||
3 * NUM_PLAYERS
|
||||
);
|
||||
|
||||
@ -205,47 +170,28 @@ var sizes = [25,45,70];
|
||||
for(i=0; i<sizes.length; i++) {
|
||||
placer = new ClumpPlacer(sizes[i], 0.3, 0.06, 0);
|
||||
painter = new LayeredPainter([1,1], [tGrassDirt75,tGrassDirt50,tGrassDirt25]);
|
||||
createAreas(placer, [painter, new TileClassPainter(clDirt)],
|
||||
[
|
||||
new AvoidTileClassConstraint(clWater, 1),
|
||||
new AvoidTileClassConstraint(clForest, 0),
|
||||
new AvoidTileClassConstraint(clHill, 0),
|
||||
new AvoidTileClassConstraint(clDirt, 5),
|
||||
new AvoidTileClassConstraint(clPlayer, 0)
|
||||
],
|
||||
createAreas(placer, [painter, paintClass(clDirt)],
|
||||
avoidClasses(clWater, 1, clForest, 0, clHill, 0, clDirt, 5, clPlayer, 0),
|
||||
SIZE*SIZE/6000
|
||||
);
|
||||
}
|
||||
|
||||
// create straggler trees
|
||||
println("Creating straggler trees...");
|
||||
group = new SimpleGroup([new SimpleObject(oTree, 1, 0)], null);
|
||||
createObjectGroups(group,
|
||||
[
|
||||
new AvoidTileClassConstraint(clForest, 1),
|
||||
new AvoidTileClassConstraint(clWater, 1),
|
||||
new AvoidTileClassConstraint(clHill, 0),
|
||||
new AvoidTileClassConstraint(clPlayer, 1)
|
||||
],
|
||||
group = new SimpleGroup([new SimpleObject(oTree, 1, 0)]);
|
||||
createObjectGroups(group, 0,
|
||||
avoidClasses(clWater, 1, clForest, 0, clHill, 0, clPlayer, 0),
|
||||
SIZE*SIZE/7000
|
||||
);
|
||||
|
||||
// create grass tufts
|
||||
println("Creating grass tufts...");
|
||||
group = new SimpleGroup(
|
||||
[
|
||||
new SimpleObject(oGrass, 2, 0.4),
|
||||
new SimpleObject(oGrass, 2, 1.1),
|
||||
new SimpleObject(oGrass, 3, 2.0),
|
||||
],
|
||||
null
|
||||
);
|
||||
createObjectGroups(group,
|
||||
[
|
||||
new AvoidTileClassConstraint(clForest, 1),
|
||||
new AvoidTileClassConstraint(clWater, 1),
|
||||
new AvoidTileClassConstraint(clHill, 0),
|
||||
new AvoidTileClassConstraint(clPlayer, 1)
|
||||
],
|
||||
group = new SimpleGroup([
|
||||
new SimpleObject(oGrass, 2, 0.4),
|
||||
new SimpleObject(oGrass, 2, 1.1),
|
||||
new SimpleObject(oGrass, 3, 2.0)
|
||||
]);
|
||||
createObjectGroups(group, 0,
|
||||
avoidClasses(clWater, 1, clForest, 0, clHill, 0, clPlayer, 0),
|
||||
SIZE*SIZE/2500
|
||||
);
|
@ -12,13 +12,19 @@ const
|
||||
TYPE_SMOOTH_ELEVATION_PAINTER = 9,
|
||||
TYPE_SIMPLE_GROUP = 10,
|
||||
TYPE_AVOID_TILE_CLASS_CONSTRAINT = 11,
|
||||
TYPE_TILE_CLASS_PAINTER = 12;
|
||||
TYPE_TILE_CLASS_PAINTER = 12,
|
||||
TYPE_STAY_IN_TILE_CLASS_CONSTRAINT = 13,
|
||||
TYPE_BORDER_TILE_CLASS_CONSTRAINT = 14;
|
||||
|
||||
// SmoothElevationPainter constants
|
||||
|
||||
const ELEVATION_SET = 0;
|
||||
const ELEVATION_MODIFY = 1;
|
||||
|
||||
// PI
|
||||
|
||||
const PI = Math.PI;
|
||||
|
||||
// initFromScenario constants
|
||||
|
||||
const LOAD_NOTHING = 0;
|
||||
@ -29,6 +35,38 @@ const LOAD_ALL = LOAD_TERRAIN | LOAD_INTERACTIVES | LOAD_NON_INTERACTIVES;
|
||||
|
||||
// Utility functions
|
||||
|
||||
function fractionToTiles(f) {
|
||||
return getMapSize() * f;
|
||||
}
|
||||
|
||||
function tilesToFraction(t) {
|
||||
return t / getMapSize();
|
||||
}
|
||||
|
||||
function fractionToSize(f) {
|
||||
return getMapSize() * getMapSize() * f;
|
||||
}
|
||||
|
||||
function sizeToFraction(s) {
|
||||
return s / getMapSize() / getMapSize();
|
||||
}
|
||||
|
||||
function cos(x) {
|
||||
return Math.cos(x);
|
||||
}
|
||||
|
||||
function sin(x) {
|
||||
return Math.sin(x);
|
||||
}
|
||||
|
||||
function tan(x) {
|
||||
return Math.sin(x);
|
||||
}
|
||||
|
||||
function round(x) {
|
||||
return Math.round(x);
|
||||
}
|
||||
|
||||
function println(x) {
|
||||
print(x);
|
||||
print("\n");
|
||||
@ -55,11 +93,12 @@ function chooseRand() {
|
||||
return ar[randInt(ar.length)];
|
||||
}
|
||||
|
||||
function createAreas(centeredPlacer, painter, constraint, num, maxFail) {
|
||||
if(maxFail == undefined) {
|
||||
maxFail = 10 * num;
|
||||
function createAreas(centeredPlacer, painter, constraint, num, retryFactor) {
|
||||
if(retryFactor == undefined) {
|
||||
retryFactor = 10;
|
||||
}
|
||||
|
||||
var maxFail = num * retryFactor;
|
||||
var good = 0;
|
||||
var bad = 0;
|
||||
var ret = new Array();
|
||||
@ -75,20 +114,22 @@ function createAreas(centeredPlacer, painter, constraint, num, maxFail) {
|
||||
bad++;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
function createObjectGroups(placer, constraint, num, maxFail) {
|
||||
if(maxFail == undefined) {
|
||||
maxFail = 10 * num;
|
||||
function createObjectGroups(placer, player, constraint, num, retryFactor) {
|
||||
if(retryFactor == undefined) {
|
||||
retryFactor = 10;
|
||||
}
|
||||
|
||||
var maxFail = num * retryFactor;
|
||||
var good = 0;
|
||||
var bad = 0;
|
||||
while(good < num && bad <= maxFail) {
|
||||
placer.x = randInt(SIZE);
|
||||
placer.y = randInt(SIZE);
|
||||
var r = createObjectGroup(placer, constraint);
|
||||
var r = createObjectGroup(placer, player, constraint);
|
||||
if(r) {
|
||||
good++;
|
||||
}
|
||||
@ -171,6 +212,19 @@ function AvoidTileClassConstraint(tileClass, distance) {
|
||||
this.distance = distance;
|
||||
}
|
||||
|
||||
function StayInTileClassConstraint(tileClass, distance) {
|
||||
this.TYPE = TYPE_STAY_IN_TILE_CLASS_CONSTRAINT;
|
||||
this.tileClass = tileClass;
|
||||
this.distance = distance;
|
||||
}
|
||||
|
||||
function BorderTileClassConstraint(tileClass, distanceInside, distanceOutside) {
|
||||
this.TYPE = TYPE_BORDER_TILE_CLASS_CONSTRAINT;
|
||||
this.tileClass = tileClass;
|
||||
this.distanceInside = distanceInside;
|
||||
this.distanceOutside = distanceOutside;
|
||||
}
|
||||
|
||||
// Object groups
|
||||
|
||||
function SimpleObject(type, count, distance) {
|
||||
@ -179,9 +233,10 @@ function SimpleObject(type, count, distance) {
|
||||
this.distance = distance;
|
||||
}
|
||||
|
||||
function SimpleGroup(elements, tileClass, x, y) {
|
||||
function SimpleGroup(elements, avoidSelf, tileClass, x, y) {
|
||||
this.TYPE = TYPE_SIMPLE_GROUP;
|
||||
this.elements = elements;
|
||||
this.avoidSelf = avoidSelf!=undefined ? avoidSelf : false;
|
||||
this.tileClass = tileClass!=undefined ? tileClass : null;
|
||||
this.x = x!=undefined ? x : -1;
|
||||
this.y = x!=undefined ? y : -1;
|
||||
|
Loading…
Reference in New Issue
Block a user