/* UI Code */
proc do_cesWindow()
{
if( `window -ex system_gen_win` )
{
deleteUI system_gen_win;
}
window -t "Celestial Body Generator" -s 1 -w 400 -h 300 system_gen_win;
columnLayout -p "system_gen_win" -w 260 -h 300 system_gen_collumn;
text -l " " -p "system_gen_collumn" -h 20 -w 100 -al "center" 01Text;
rowLayout -p "system_gen_collumn" -nc 2 -h 40
-cw 1 130 -cal 1 "right"
-cw 2 145 -cal 2 "right"
name_row;
text -l "Object Name" -p "name_row" -h 25 -w 100 -al "center" nameText;
textField -p "name_row" -h 25 -w 235 name_field;
rowLayout -p "system_gen_collumn" -nc 4
-cw 1 130 -cal 1 "right"
-cw 2 60 -cal 2 "right"
-cw 3 70 -cal 3 "right"
-cw 4 60 -cal 4 "right"
type_select_row;
text -l "Celestial Object Type" -p "type_select_row" -h 80 -w 120 -al "center" typeText;
radioCollection -p "type_select_row" type_collection;
radioButton -label "Star" -sl -onc ""
-cl "type_collection" -h 80 star;
radioButton -label "Planet" -onc ""
-cl "type_collection" -h 80 planet;
radioButton -label "Detritus" -onc ""
-cl "type_collection" -h 80 detritus;
rowLayout -p "system_gen_collumn" -nc 3
-cw 1 130 -cal 1 "right"
-cw 2 145 -cal 2 "center"
-cw 3 90 -cal 3 "center"
OrbitalParent;
text -l "Orbital Parent" -p "OrbitalParent" -h 25 -w 100 -al "center" orbitText;
textField -p "OrbitalParent" -h 25 -w 130 parent_field;
button -l "Use Selection" -p "OrbitalParent" -h 25 -w 80 -al "center"
-c "textField -e -text `selectParent` parent_field;"
parent_button;
rowLayout -p "system_gen_collumn" -nc 5
-cw 1 130 -cal 1 "right"
-cw 2 60 -cal 2 "center"
-cw 3 40 -cal 3 "center"
-cw 4 40 -cal 4 "center"
-cw 5 40 -cal 5 "center"
OrbitalParams;
text -l "Orbital Distance" -p "OrbitalParams" -h 25 -w 100 -al "center" orbitText;
floatField -p "OrbitalParams" -h 25 -w 50 orbit_field;
radioCollection -p "type_select_row" param_collection;
radioButton -label "X" -sl -onc ""
-cl "param_collection" -h 25 x;
radioButton -label "Y" -onc ""
-cl "param_collection" -h 25 y;
radioButton -label "Z" -onc ""
-cl "param_collection" -h 25 z;
rowLayout -p "system_gen_collumn" -nc 4
-cw 1 130 -cal 1 "right"
-cw 2 60 -cal 2 "center"
-cw 3 115 -cal 3 "center"
-cw 4 60 -cal 4 "center"
Attributes;
text -l "Mass" -p "Attributes" -h 25 -w 100 -al "center" massText;
floatField -p "Attributes" -h 25 -w 50 mass_field;
text -l "Diameter" -p "Attributes" -h 25 -w 110 -al "center" diaText;
floatField -p "Attributes" -h 25 -w 50 dia_field;
text -l " " -p "system_gen_collumn" -h 20 -w 100 -al "center" 02Text;
rowLayout -p "system_gen_collumn" -nc 4
-cw 1 130 -cal 1 "right"
-cw 2 60 -cal 2 "center"
-cw 3 85 -cal 3 "center"
-cw 4 85 -cal 4 "center"
rowButtons;
text -l "Has Life" -p "rowButtons" -h 25 -w 100 -al "center" lifeText;
radioCollection -p "type_select_row" life_collection;
radioButton -label "Yes"
-cl "life_collection" -h 25 alive;
radioButton -label "No" -sl
-cl "life_collection" -h 25 dead;
button -l "Create" -p "rowButtons" -h 25 -w 80 -al "center"
-c "evalCreation(`textField -q -tx name_field`,`textField -q -tx parent_field`, `radioCollection -q -sl type_collection`, `radioCollection -q -sl param_collection`, `radioCollection -q -sl life_collection`, `floatField -q -v orbit_field` , `floatField -q -v mass_field`, `floatField -q -v dia_field` );"
create_button;
rowLayout -p "system_gen_collumn" -nc 1
-cw 1 40 -cal 1 "center"
clearButton;
button -l "Clear Physics" -p "clearButton" -h 25 -w 80 -al "center"
-c "clearAll"
clear_button;
showWindow system_gen_win;
}
proc string selectParent()
{
string $selected[] = `selectedNodes`;
if( `size $selected` > 1)
{
print "ERROR: You cannot use more then one parent, please select ONLY ONE object \n";
return "";
}
return $selected[0];
}
proc evalCreation(string $name, string $parent, string $type, string $param, string $life, float $orbit, float $mass, float $diameter )
{
float $parentMass;
float $parentDia;
if($mass < 0.001)
{
$mass = 0.001;
}
if($diameter <= 0 )
{
$diameter = 0.001;
}
if($parent != "")
{
$parentMass = `getAttr ($parent + ".ms")`;
$parentDia = `getAttr ($parent + ".dia")`;
if($mass > $parentMass)
{
$mass /= $parentMass;
}
if($orbit < ($parentDia / 2))
{
$orbit += ($parentDia + $diameter);
}
else if(($orbit + $diameter) < ($parentDia / 2))
{
$diameter = ($parentDia / 4);
}
}
switch ($type)
{
case "star":
starGen ($name, $parent, $param, $life, $orbit, $mass, $diameter);
break;
case "planet":
planetGen ($name, $parent, $param, $life, $orbit, $mass, $diameter);
break;
case "detritus":
detritusGen ($name, $parent, $param, $life, $orbit, $mass, $diameter);
break;
}
}
/* Solar_System Creation Code */
proc starGen (string $name, string $parent, string $param, string $life, float $orbit, float $mass, float $diameter)
{
global string $Phys_Obs[];
global int $Obs_Count;
global int $spaced;
int $count;
string $hold[];
float $parPos[3] = {0, 0, 0};
float $parVol[3] = {0, 0, 0};
string $axi[3] = {"x", "y" , "z"};
$hold = `sphere -n $name -ax 0 1 0 -r ($diameter/2) -s 2 -nsp 2 -ch 01`;
$name = strip($hold[0]);
setAttr -keyable false ($name + ".rx");
setAttr -keyable false ($name + ".ry");
setAttr -keyable false ($name + ".rz");
setAttr -keyable false ($name + ".sx");
setAttr -keyable false ($name + ".sy");
setAttr -keyable false ($name + ".sz");
setAttr -keyable false ($name + ".v");
select -r $name;
addAttr -at "float" -ln "Diameter" -sn "dia" -dv $diameter -k 0;
$Phys_Obs[$Obs_Count] = `Set_Physics $name`;
$Obs_Count ++;
setAttr ($name + ".ms") $mass;
if($parent != "")
{
$parPos = `Get_Pos $parent`;
for($count = 0; $count < 3; $count ++)
{
$parVol[$count] = `getAttr ($parent + ".v" + $axi[$count])`;
}
for($count = 0; $count < 3; $count ++)
{
setAttr ($name + ".v" + $axi[$count]) $parVol[$count];
setAttr ($name + ".t" + $axi[$count]) $parPos[$count];
}
setAttr ($name + ".t" + $param) (`getAttr ($name + ".t" + $param)` + $orbit);
switch ($param)
{
case "x":
setAttr ($name + ".vz") (`Get_Orbit $name $parent "x"`);
break;
case "y":
setAttr ($name + ".vx") (`Get_Orbit $name $parent "y"`);
break;
case "z":
setAttr ($name + ".vy") (`Get_Orbit $name $parent "z"`);
break;
}
parent $name $parent;
playButtonStepForward;
}
}
proc planetGen (string $name, string $parent, string $param, string $life, float $orbit, float $mass, float $diameter)
{
global string $Phys_Obs[];
global int $Obs_Count;
int $count;
string $hold[];
float $parPos[3] = {0, 0, 0};
float $parVol[3] = {0, 0, 0};
string $axi[3] = {"x", "y" , "z"};
$hold = `sphere -n $name -ax 0 1 0 -r ($diameter/2) -s 4 -nsp 4 -ch 01`;
$name = strip($hold[0]);
setAttr -keyable false ($name + ".rx");
setAttr -keyable false ($name + ".ry");
setAttr -keyable false ($name + ".rz");
setAttr -keyable false ($name + ".sx");
setAttr -keyable false ($name + ".sy");
setAttr -keyable false ($name + ".sz");
setAttr -keyable false ($name + ".v");
select -r $name;
addAttr -at "float" -ln "Diameter" -sn "dia" -dv $diameter -k 0;
$Phys_Obs[$Obs_Count] = `Set_Physics $name`;
$Obs_Count ++;
setAttr ($name + ".ms") $mass;
if($parent != "")
{
$parPos = `Get_Pos $parent`;
for($count = 0; $count < 3; $count ++)
{
$parVol[$count] = `getAttr ($parent + ".v" + $axi[$count])`;
}
for($count = 0; $count < 3; $count ++)
{
setAttr ($name + ".v" + $axi[$count]) $parVol[$count];
setAttr ($name + ".t" + $axi[$count]) $parPos[$count];
}
setAttr ($name + ".t" + $param) (`getAttr ($name + ".t" + $param)` + $orbit);
switch ($param)
{
case "x":
setAttr ($name + ".vz") (`Get_Orbit $name $parent "x"`);
break;
case "y":
setAttr ($name + ".vx") (`Get_Orbit $name $parent "y"`);
break;
case "z":
setAttr ($name + ".vy") (`Get_Orbit $name $parent "z"`);
break;
}
parent $name $parent;
playButtonStepForward;
}
}
proc detritusGen (string $name, string $parent, string $param, string $life, float $orbit, float $mass, float $diameter)
{
global string $Phys_Obs[];
global int $Obs_Count;
int $count;
string $hold[];
float $parPos[3] = {0, 0, 0};
float $parVol[3] = {0, 0, 0};
string $axi[3] = {"x", "y" , "z"};
$hold = `polySphere -n $name -r ($diameter/2) -sx 3 -sy 3 -ax 0 1 0 -tx 0 -ch 0`;
$name = strip($hold[0]);
setAttr -keyable false ($name + ".rx");
setAttr -keyable false ($name + ".ry");
setAttr -keyable false ($name + ".rz");
setAttr -keyable false ($name + ".sx");
setAttr -keyable false ($name + ".sy");
setAttr -keyable false ($name + ".sz");
setAttr -keyable false ($name + ".v");
select -r $name;
addAttr -at "float" -ln "Diameter" -sn "dia" -dv $diameter -k 0;
$Phys_Obs[$Obs_Count] = `Set_Physics $name`;
$Obs_Count ++;
setAttr ($name + ".ms") $mass;
if($parent != "")
{
$parPos = `Get_Pos $parent`;
for($count = 0; $count < 3; $count ++)
{
$parVol[$count] = `getAttr ($parent + ".v" + $axi[$count])`;
}
for($count = 0; $count < 3; $count ++)
{
setAttr ($name + ".v" + $axi[$count]) $parVol[$count];
setAttr ($name + ".t" + $axi[$count]) $parPos[$count];
}
setAttr ($name + ".t" + $param) (`getAttr ($name + ".t" + $param)` + $orbit);
switch ($param)
{
case "x":
setAttr ($name + ".vz") (`Get_Orbit $name $parent "x"`);
break;
case "y":
setAttr ($name + ".vx") (`Get_Orbit $name $parent "y"`);
break;
case "z":
setAttr ($name + ".vy") (`Get_Orbit $name $parent "z"`);
break;
}
parent $name $parent;
playButtonStepForward;
}
}
proc spaceGen( float $width)
{
float $offset = $width ;
float $rad = $width / 2;
string $axi[3] = {"x", "y" , "z"};
string $let;
polySphere -n "space" -r $rad -sx 12 -sy 12 -ax 0 1 0 -tx 0 -ch 0;
select -r space;
addAttr -at "float" -ln "Diameter" -sn "dia" -dv $width -min $width -max $width -k 1;
}
/* Solar_System Event Code */
proc Border()
{
global string $Phys_Obs[];
global int $Obs_Count;
int $count;
float $dis;
float $dia = ` getAttr space.dia `;
float $objectPos[];
float $spacePos[];
string $axi[3] = {"x", "y" , "z"};
string $let;
string $charCheck = "+";
for($count = 0; $count < $Obs_Count; $count ++)
{
$objectPos = `Get_Pos $Phys_Obs[$count]`;
$spacePos = `Get_Pos "space" `;
$dis = `Get_Dis $spacePos $objectPos`;
print ($Phys_Obs[$count] + " " + $dis + " " + $dia + "\n");
if($dis >= ($dia/2))
{
for( $let in $axi)
{
setAttr ($Phys_Obs[$count] + ".v" + $let) ( 0 - `getAttr($Phys_Obs[$count] + ".v" + $let)`);
}
}
}
}
proc clearAll()
{
global string $Phys_Obs[];
global int $Obs_Count;
int $count;
clear($Phys_Obs);
$Obs_Count = 0;
}
proc collision(string $name)
{
global string $Phys_Obs[];
global int $Obs_Count;
int $count;
int $boom;
float $dis;
float $obDia = `getAttr( $name + ".dia")`;
float $obMass = `getAttr( $name + ".ms")`;
float $srcDia;
float $srcMass;
float $scale = getAttr( $name + ".sx");
float $objectPos[];
float $srcPos[];
string $axi[3] = {"x", "y" , "z"};
string $let;
string $charCheck = "+";
for($count = 0; $count < $Obs_Count; $count ++)
{
$srcDia = getAttr( $Phys_Obs[$count] + ".dia");
$srcMass = getAttr( $Phys_Obs[$count] + ".ms");
$objectPos = `Get_Pos $name`;
$srcPos = `Get_Pos $Phys_Obs[$count]`;
$dis = `Get_Dis $objectPos $srcPos`;
if($Phys_Obs[$count] == $name)
{
}
else if( (($srcDia/4) + $dis) <= ($obDia/2) )
{
if($srcMass <= $obMass)
{
setAttr( $name + ".ms") ($obMass + ($srcMass));
for($let in $axi)
{
setAttr( $name + ".s" + $let) ( ( ($obMass/$srcMass) * (1/($scale * $obMass)) ) + $scale );
$scale = getAttr( $name + ".sx");
}
setAttr( $name + ".dia") ($obDia * $scale);
$scale = getAttr( $name + ".sx");
$obDia = `getAttr( $name + ".dia")`;
delete $Phys_Obs[$count];
removeElement $count;
}
}
}
}
               (
geocities.com/nighzmarquls)