Page Menu
Home
Phabricator (Chris)
Search
Configure Global Search
Log In
Files
F630215
DumbbellMap.as
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Authored By
Unknown
Size
3 KB
Referenced Files
None
Subscribers
None
DumbbellMap.as
View Options
#
include
"include/map.as"
enum
MapSetting
{
M_SystemCount
,
M_SystemSpacing
,
M_Flatten
,
M_Mirror
,
};
class
DumbbellMap
:
Map
{
DumbbellMap
()
{
super
();
name
=
locale
::
DUMBBELL_MAP
;
description
=
locale
::
DUMBBELL_MAP_DESC
;
sortIndex
=
-
100
;
color
=
0xd252ffff
;
icon
=
"maps/Dumbbell/dumbbell.png"
;
}
#
section
client
void
makeSettings
()
{
Number
(
locale
::
SYSTEM_COUNT
,
M_SystemCount
,
DEFAULT_SYSTEM_COUNT
,
decimals
=
0
,
step
=
10
,
min
=
10
,
halfWidth
=
true
);
Number
(
locale
::
SYSTEM_SPACING
,
M_SystemSpacing
,
DEFAULT_SPACING
,
decimals
=
0
,
step
=
1000
,
min
=
MIN_SPACING
,
halfWidth
=
true
);
Toggle
(
locale
::
FLATTEN
,
M_Flatten
,
false
,
halfWidth
=
true
);
Toggle
(
locale
::
PERFECT_MIRROR
,
M_Mirror
,
false
,
halfWidth
=
true
,
tooltip
=
locale
::
TT_PERFECT_MIRROR
);
}
#
section
server
void
placeSystems
()
{
uint
systemCount
=
uint
(
getSetting
(
M_SystemCount
,
DEFAULT_SYSTEM_COUNT
));
double
spacing
=
modSpacing
(
getSetting
(
M_SystemSpacing
,
DEFAULT_SPACING
));
bool
flatten
=
getSetting
(
M_Flatten
,
0.0
)
!=
0.0
;
bool
mirror
=
getSetting
(
M_Mirror
,
0.0
)
!=
0.0
;
//Calculate values
double
bellSystems
=
ceil
(
double
(
systemCount
)
*
0.43
);
double
bellRadius
=
sqrt
(
bellSystems
)
*
spacing
*
0.5
;
//Make left bell
genBell
(
vec3d
(
0
,
0
,
-
bellRadius
*
3.0
),
bellRadius
,
bellSystems
);
genCorridor
(
vec3d
(
0
,
0
,
-
bellRadius
*
2.0
+
spacing
*
0.75
),
vec3d
(
0
,
0
,
-
spacing
),
ceil
(
double
(
systemCount
)
*
0.07
));
if
(!
mirror
)
{
//Make right bell
genBell
(
vec3d
(
0
,
0
,
bellRadius
*
3.0
),
bellRadius
,
bellSystems
);
genCorridor
(
vec3d
(
0
,
0
,
0
),
vec3d
(
0
,
0
,
bellRadius
*
2.0
-
spacing
*
0.75
),
ceil
(
double
(
systemCount
)
*
0.07
));
}
else
{
//Create empty systems opposite every generated system
for
(
uint
i
=
0
,
cnt
=
systemData
.
length
;
i
<
cnt
;
++
i
)
{
auto
@
other
=
systemData
[
i
];
vec3d
pos
=
other
.
position
;
pos
.
z
=
-
pos
.
z
;
auto
@
sys
=
addSystem
(
pos
,
mirrorSystem
=
other
);
if
(
possibleHomeworlds
.
find
(
other
)
!=
-
1
)
addPossibleHomeworld
(
sys
);
}
genCorridor
(
vec3d
(
0
,
0
,
0
),
vec3d
(
0
,
0
,
0
),
ceil
(
double
(
systemCount
)
*
0.07
),
quality
=
500
);
}
}
void
genBell
(
vec3d
around
,
double
radius
,
uint
systemCount
)
{
double
spacing
=
modSpacing
(
getSetting
(
M_SystemSpacing
,
DEFAULT_SPACING
));
bool
flatten
=
getSetting
(
M_Flatten
,
0.0
)
!=
0.0
;
Poisson2D
gen
;
gen
.
circleRadius
=
radius
;
gen
.
generate
(
radius
*
2.0
,
radius
*
2.0
,
spacing
);
SystemData
@
centerMost
;
double
centerDist
=
INFINITY
;
for
(
uint
i
=
0
,
cnt
=
min
(
gen
.
length
,
systemCount
);
i
<
cnt
;
++
i
)
{
vec3d
pos
=
around
;
vec2d
offset
=
gen
[
i
]
-
vec2d
(
radius
,
radius
);
pos
.
x
+=
offset
.
x
;
pos
.
z
+=
offset
.
y
;
if
(!
flatten
)
pos
.
y
+=
randomd
(-
spacing
*
0.3
,
spacing
*
0.3
);
auto
@
sys
=
addSystem
(
pos
);
double
d
=
offset
.
length
;
if
(
d
<
centerDist
)
{
@
centerMost
=
sys
;
centerDist
=
d
;
}
}
addPossibleHomeworld
(
centerMost
);
}
void
genCorridor
(
vec3d
origin
,
vec3d
dest
,
uint
systemWidth
,
int
quality
=
0
)
{
double
spacing
=
modSpacing
(
getSetting
(
M_SystemSpacing
,
DEFAULT_SPACING
));
bool
flatten
=
getSetting
(
M_Flatten
,
0.0
)
!=
0.0
;
double
wstep
=
1.0
/ ceil(sqrt(double(systemWidth)) /
0.75
);
if
(
origin
.
distanceTo
(
dest
)
<
spacing
)
wstep
=
1.1
;
else
wstep
=
max
(
wstep
,
1.0
/ max(floor(dest.distanceTo(origin) /
spacing
),
1.0
));
uint
height
=
ceil
(
sqrt
(
double
(
systemWidth
)
*
0.75
));
double
w
=
0.0
;
while
(
w
<=
1.0
)
{
vec3d
pos
=
origin
+
(
dest
-
origin
)*
w
;
pos
.
x
-=
randomd
(
0.8
,
1.5
)
*
spacing
*
(
double
(
height
-
1
)/
2
);
for
(
uint
n
=
0
;
n
<
height
;
++
n
)
{
vec3d
sysPos
=
pos
;
if
(!
flatten
)
sysPos
.
y
+=
randomd
(-
spacing
*
0.3
,
spacing
*
0.3
);
addSystem
(
sysPos
,
quality
=
quality
);
pos
.
x
+=
randomd
(
0.8
,
1.5
)
*
spacing
;
}
w
+=
wstep
;
}
}
#
section
all
}
File Metadata
Details
Attached
Mime Type
text/x-c
Expires
Sun, Nov 15, 8:58 AM (1 d, 2 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
137110
Default Alt Text
DumbbellMap.as (3 KB)
Attached To
Mode
R80 StarRuler2-Source
Attached
Detach File
Event Timeline