tons of stuff, colors, communication..
This commit is contained in:
152
CitizenClass.pde
152
CitizenClass.pde
@@ -1,8 +1,7 @@
|
||||
import java.lang.Double;
|
||||
int i_citizenAmount = 100;
|
||||
int i_selectedCitizen;
|
||||
int i_femaleCount;
|
||||
|
||||
int i_visionTransparency;
|
||||
boolean b_makeThemGo;
|
||||
//je nachdem wie hoch der derzeitige fokus ist wird es schwerer, ihn abzulenken.
|
||||
//intrinsischer fokus korreliert mit joy/motivation/positive erinnerung an etwas
|
||||
@@ -25,7 +24,7 @@ void initCitizen() {
|
||||
//namen: ethuriel, nathaniel, loriel, samuel, aluriel, aleriel, thaliel, suriel, kaliel,
|
||||
//int[][] claireArray = { { 00, 2 }, { 1, 3} };
|
||||
|
||||
citizen[0] = new Citizen(0, 800, "Test", 0, 27);
|
||||
citizen[0] = new Citizen(0, 0, "", 0, 0);
|
||||
citizen[1] = new Citizen(1, 121, "Matze", 1, 28);
|
||||
citizen[2] = new Citizen(2, 18, "Freddy", 1, 28);
|
||||
citizen[3] = new Citizen(3, 59, "Korbi", 1, 28);
|
||||
@@ -41,13 +40,14 @@ void initCitizen() {
|
||||
int age = int(random(0, 100));
|
||||
citizen[i] = new Citizen(i, int(random(0, houses.size())), S_citizenNames[gender][int(random(0, S_citizenNames[gender].length))], gender, age);
|
||||
}
|
||||
for (int i = 0; i < citizen.length; i++) {
|
||||
if (i != i_selectedCitizen) //hacky to set citizen[0] to a specific place
|
||||
citizen[i].spawn(citizen[i].i_home);
|
||||
else citizen[i].spawn(8, 8);
|
||||
|
||||
//if (citizen[i].b_randomRun) citizen[i].goTo(int(random(0, pg_map.width)), int(random(0, pg_map.height)), 10); //bad
|
||||
for (int i = 1; i < citizen.length; i++) {
|
||||
citizen[i].spawn(citizen[i].i_home);
|
||||
}
|
||||
citizen[0].spawn(-500, -500);
|
||||
|
||||
//if (citizen[i].b_randomRun) citizen[i].goTo(int(random(0, pg_map.width)), int(random(0, pg_map.height)), 10); //bad
|
||||
|
||||
citizen[0].despawn();
|
||||
selectCitizen(0);
|
||||
}
|
||||
|
||||
@@ -71,15 +71,18 @@ class Citizen extends Entity {
|
||||
String s_currentAction;
|
||||
float f_movementSpeed;
|
||||
float f_FOV = PI / 4.0;
|
||||
int i_visionDistance = 120;
|
||||
int i_visionDistance = 80;
|
||||
int i_lookRaySteps = 10;
|
||||
int i_id;
|
||||
|
||||
|
||||
int i_perceivedCitizen = -1;
|
||||
boolean b_perceivesCitizen;
|
||||
|
||||
boolean b_randomRun = b_autoPlay;
|
||||
|
||||
int i_goHomeHour, i_goHomeMinute;
|
||||
int i_goOutHour, i_goOutMinute;
|
||||
PVector dot = new PVector(0, 0);
|
||||
|
||||
|
||||
@@ -105,8 +108,13 @@ class Citizen extends Entity {
|
||||
rNodes = pathFinder.getRoute();
|
||||
s_currentAction = "current action here";
|
||||
c_color = color((int)(random(0, 255)), (int)(random(0, 255)), (int)(random(0, 255)));
|
||||
c_initialColor = c_color;
|
||||
c_selected = color(128, 50, 50);
|
||||
c_stroke = color(255, 255, 255);
|
||||
i_goHomeHour = (int)random(18, 21);
|
||||
i_goHomeMinute = (int)random(0, 59);
|
||||
i_goOutHour = (int)random(6, 9);
|
||||
i_goOutMinute = (int)random(0, 59);
|
||||
|
||||
//if (b_randomRun) goTo(int(random(0, pg_map.width)), int(random(0, pg_map.height)), 10); //bad
|
||||
}
|
||||
@@ -125,12 +133,9 @@ class Citizen extends Entity {
|
||||
}
|
||||
|
||||
void update() {
|
||||
f_angle = v2_direction.heading();
|
||||
|
||||
i_collBoundX = (int)f_xPos - (i_diameter/2);
|
||||
i_collBoundY = (int)f_yPos - (i_diameter/2);
|
||||
i_collBoundW = i_diameter;
|
||||
i_collBoundH = i_diameter;
|
||||
// f_angle = v2_direction.heading(); do i need this here or is it ok in turn()?
|
||||
|
||||
|
||||
if (b_turning) {
|
||||
turn();
|
||||
@@ -143,22 +148,64 @@ class Citizen extends Entity {
|
||||
if (b_talking) {
|
||||
talk();
|
||||
}
|
||||
|
||||
if (i_hours == i_goHomeHour && i_minutes == i_goHomeMinute) {
|
||||
b_randomRun = false;
|
||||
goTo((int)houses.get(i_home).v2_center.x, (int)houses.get(i_home).v2_center.y);
|
||||
}
|
||||
|
||||
if (i_hours == i_goOutHour && i_minutes == i_goOutMinute) { //wake
|
||||
b_randomRun = true;
|
||||
i_location = 1;
|
||||
goTo(int(random(0, pg_map.width)), int(random(0, pg_map.height)));
|
||||
}
|
||||
|
||||
if (i_location == 1 && b_moving == false) { //sleep
|
||||
float r = red(c_color);
|
||||
float g = green(c_color);
|
||||
float b = blue(c_color);
|
||||
|
||||
float r_new = (99*r + red(c_initialColor)) / 99.6666;
|
||||
float g_new = (99*g + green(c_initialColor)) / 99.6666;
|
||||
float b_new = (99*b + blue(c_initialColor)) / 99.6666;
|
||||
|
||||
c_color = color(r_new, g_new, b_new);
|
||||
}
|
||||
}
|
||||
|
||||
void display() {
|
||||
pg_map.stroke(c_stroke);
|
||||
|
||||
//if (b_selected) {
|
||||
pg_map.stroke(150, 150, 150, i_visionTransparency);
|
||||
pg_map.noFill();
|
||||
//pg_map.fill(127, 127, 127, i_visionTransparency);
|
||||
if (i_location == 1)
|
||||
pg_map.arc(f_xPos, f_yPos, i_visionDistance*2, i_visionDistance*2, f_angle+HALF_PI*1.5, f_angle+PI/2*2.5, PIE);
|
||||
//}
|
||||
|
||||
//pg_map.stroke(c_stroke);
|
||||
pg_map.stroke(c_initialColor);
|
||||
pg_map.strokeWeight(1);
|
||||
if (b_selected) {
|
||||
pg_map.stroke(c_selected);
|
||||
pg_map.strokeWeight(3);
|
||||
}
|
||||
pg_map.fill(c_color);
|
||||
//if (b_selected) pg_map.fill(c_selected);
|
||||
pg_map.ellipse(f_xPos, f_yPos, i_diameter, i_diameter);
|
||||
pg_map.fill(c_stroke);
|
||||
//pg_map.fill(c_initialColor);
|
||||
pg_map.textAlign(CENTER);
|
||||
pg_map.textSize(i_nameSize);
|
||||
pg_map.text(s_name, f_xPos, f_yPos-10);
|
||||
if (b_perceivesCitizen) {
|
||||
pg_map.text("!", f_xPos, f_yPos-20);
|
||||
}
|
||||
|
||||
int namePos = -10;
|
||||
if (b_talking) {
|
||||
pg_map.text("\"Hallo " + citizen[i_lastCitizenTalked].s_name + "\"", f_xPos, f_yPos-10);
|
||||
namePos = -20;
|
||||
}
|
||||
pg_map.text(s_name, f_xPos, f_yPos + namePos);
|
||||
pg_map.stroke(c_stroke);
|
||||
pg_map.strokeWeight(1);
|
||||
if (b_talking) {
|
||||
|
||||
pg_map.line(f_xPos, f_yPos, citizen[i_lastCitizenTalked].f_xPos, citizen[i_lastCitizenTalked].f_yPos);
|
||||
}
|
||||
}
|
||||
@@ -166,24 +213,24 @@ class Citizen extends Entity {
|
||||
void perceive() {
|
||||
b_perceivesCitizen = false;
|
||||
i_perceivedCitizen = -1;
|
||||
if (!b_talking) {
|
||||
for (int i = -5; i < 6; i++) { //10 rays
|
||||
float f_rayAngle = (f_angle) + i/TWO_PI;
|
||||
for (int j = 0; j < 10; j++) { //10 steps of collision detection per ray
|
||||
for (int k = 1; k < i_lookRaySteps; k ++) {
|
||||
dot.x = f_xPos-k*((cos(f_rayAngle)*i_visionDistance)/i_lookRaySteps);
|
||||
dot.y = f_yPos-k*((sin(f_rayAngle)*i_visionDistance)/i_lookRaySteps);
|
||||
if (b_debug)pg_map.point(dot.x, dot.y);
|
||||
for (int l = 0; l < citizen.length; l++) {
|
||||
if (dot.x > citizen[l].i_collBoundX && dot.x < citizen[l].i_collBoundX + citizen[l].i_collBoundW
|
||||
&& dot.y > citizen[l].i_collBoundY && dot.y < citizen[l].i_collBoundY + citizen[l].i_collBoundH) {
|
||||
if (l != i_id && !b_perceivesCitizen) {
|
||||
b_perceivesCitizen = true;
|
||||
i_perceivedCitizen = l;
|
||||
|
||||
// if (!b_talking) {
|
||||
for (int i = -5; i < 6; i++) { //10 rays
|
||||
float f_rayAngle = (f_angle) + i/TWO_PI;
|
||||
for (int j = 0; j < 10; j++) { //10 steps of collision detection per ray
|
||||
for (int k = 1; k < i_lookRaySteps; k ++) {
|
||||
dot.x = f_xPos-k*((cos(f_rayAngle)*i_visionDistance)/i_lookRaySteps);
|
||||
dot.y = f_yPos-k*((sin(f_rayAngle)*i_visionDistance)/i_lookRaySteps);
|
||||
//if (b_debug)pg_map.point(dot.x, dot.y);
|
||||
for (int l = 0; l < citizen.length; l++) {
|
||||
if (dot.x > citizen[l].i_collBoundX && dot.x < citizen[l].i_collBoundX + citizen[l].i_collBoundW
|
||||
&& dot.y > citizen[l].i_collBoundY && dot.y < citizen[l].i_collBoundY + citizen[l].i_collBoundH) {
|
||||
if (l != i_id && !b_perceivesCitizen && citizen[l].i_location == 1 && i_location == 1) {
|
||||
b_perceivesCitizen = true;
|
||||
i_perceivedCitizen = l;
|
||||
if (i_lastCitizenTalked != l && citizen[l].i_lastCitizenTalked != i_id) {
|
||||
turnTo(f_xPos-citizen[l].f_xPos, f_yPos-citizen[l].f_yPos, 2);
|
||||
|
||||
if (citizen[l].i_perceivedCitizen == i_id && i_lastCitizenTalked != l && citizen[l].i_lastCitizenTalked != i_id) { //if perceived citizen perceives me and din't talk to me last time
|
||||
if (citizen[l].i_perceivedCitizen == i_id) { //if perceived citizen perceives me and din't talk to me last time
|
||||
talkTo(citizen[l]);
|
||||
citizen[l].talkTo(this);
|
||||
}
|
||||
@@ -210,7 +257,7 @@ class Citizen extends Entity {
|
||||
b_moving = false;
|
||||
i_lastCitizenTalked = citizen.i_id;
|
||||
|
||||
println(s_name + " talking to " + citizen.s_name);
|
||||
//println(s_name + " talking to " + citizen.s_name);
|
||||
//c_color = c_color / 10 * 9 + citizen.c_color/10;
|
||||
}
|
||||
|
||||
@@ -220,9 +267,9 @@ class Citizen extends Entity {
|
||||
float b = blue(c_color);
|
||||
|
||||
|
||||
float r_new = (99*r + red(citizen[i_lastCitizenTalked].c_color)) / 99.6666;
|
||||
float g_new = (99*g + green(citizen[i_lastCitizenTalked].c_color)) / 99.6666;
|
||||
float b_new = (99*b + blue(citizen[i_lastCitizenTalked].c_color)) / 99.6666;
|
||||
float r_new = (19*r + red(citizen[i_lastCitizenTalked].c_color)) / 20;
|
||||
float g_new = (19*g + green(citizen[i_lastCitizenTalked].c_color)) / 20;
|
||||
float b_new = (19*b + blue(citizen[i_lastCitizenTalked].c_color)) / 20;
|
||||
|
||||
c_color = color(r_new, g_new, b_new);
|
||||
|
||||
@@ -231,13 +278,14 @@ class Citizen extends Entity {
|
||||
|
||||
//c_color = (c_color + citizen[i_lastCitizenTalked].c_color) / 2;
|
||||
b_talking = false;
|
||||
b_moving = b_movingBeforeTalk;
|
||||
//b_moving = b_movingBeforeTalk;
|
||||
b_moving = true;
|
||||
//prevent talking to the same person right after
|
||||
}
|
||||
}
|
||||
boolean b_pathFindKaputt;
|
||||
|
||||
void goTo(int x, int y, int prio) {
|
||||
boolean b_pathFindKaputt;
|
||||
void goTo(int x, int y) {
|
||||
//add: go to node? go to house?
|
||||
int i_goToX = x;
|
||||
int i_goToY = y;
|
||||
@@ -282,14 +330,24 @@ class Citizen extends Entity {
|
||||
b_moving = true;
|
||||
} else { //implement more intelligent design which calls goTo not in this frame, but in the next 120 frames or so
|
||||
//also at this point i can move recalculating the nodes into the next frames if no route is found (not only random)..
|
||||
if (b_randomRun) goTo(int(random(0, pg_map.width)), int(random(0, pg_map.height)), 10);
|
||||
if (b_randomRun) goTo(int(random(0, pg_map.width)), int(random(0, pg_map.height)));
|
||||
}
|
||||
} else {
|
||||
println("Pathfinding failed");
|
||||
b_pathFindKaputt = false;
|
||||
f_xPos = (int)random(0, i_windowW);
|
||||
f_yPos = (int)random(0, i_windowH);
|
||||
goTo((int)houses.get(i_home).v2_center.x, (int)houses.get(i_home).v2_center.y);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void move() {
|
||||
i_collBoundX = (int)f_xPos - (i_diameter/2);
|
||||
i_collBoundY = (int)f_yPos - (i_diameter/2);
|
||||
i_collBoundW = i_diameter;
|
||||
i_collBoundH = i_diameter;
|
||||
if (rNodes.length > nextNode) {
|
||||
float f_xPosNext = rNodes[nextNode].xf();
|
||||
float f_yPosNext = rNodes[nextNode].yf();
|
||||
@@ -313,7 +371,7 @@ class Citizen extends Entity {
|
||||
if (!b_randomRun) {
|
||||
//check if standing on an other citizens position
|
||||
} else {
|
||||
goTo(int(random(0, pg_map.width)), int(random(0, pg_map.height)), 10);
|
||||
goTo(int(random(0, pg_map.width)), int(random(0, pg_map.height)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
11
Entities.pde
11
Entities.pde
@@ -31,13 +31,14 @@ class Entity {
|
||||
float f_xPos, f_yPos, f_xSpawn, f_ySpawn;
|
||||
float f_angle;
|
||||
int i_diameter = 10;
|
||||
|
||||
int i_collBoundX, i_collBoundY, i_collBoundW, i_collBoundH;
|
||||
|
||||
|
||||
int i_nameSize = 12;
|
||||
|
||||
int i_location; //0: at home. 1: outside. 2: at work. 3: in church. 4: at a friends place .. etc
|
||||
|
||||
color c_selected = color(128, 50, 50);
|
||||
color c_color = color(50, 200, 80);
|
||||
color c_initialColor;
|
||||
color c_stroke = color(255, 255, 255);
|
||||
PVector v2_direction = new PVector(0, 0);
|
||||
|
||||
@@ -58,6 +59,7 @@ class Entity {
|
||||
i_collBoundY = (int)f_yPos - (i_diameter/2);
|
||||
i_collBoundW = i_diameter;
|
||||
i_collBoundH = i_diameter;
|
||||
i_location = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -73,6 +75,7 @@ class Entity {
|
||||
i_collBoundY = (int)f_yPos - (i_diameter/2);
|
||||
i_collBoundW = i_diameter;
|
||||
i_collBoundH = i_diameter;
|
||||
i_location = 1;
|
||||
}
|
||||
void despawn() {
|
||||
b_linked = false;
|
||||
@@ -96,6 +99,7 @@ class Entity {
|
||||
}
|
||||
}
|
||||
void turn() {
|
||||
f_angle = v2_direction.heading();
|
||||
if (!(abs(int(v2_direction.heading() * 1000) - int(v2_turnBuffer.heading()*1000)) < 100)) {
|
||||
v2_direction = v2_direction.rotate(i_turning*PI/180*f_turnSpeed);
|
||||
} else {
|
||||
@@ -104,7 +108,6 @@ class Entity {
|
||||
}
|
||||
|
||||
void display() {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
1
Map.pde
1
Map.pde
@@ -7,6 +7,7 @@ PImage img_streets;
|
||||
PGraphics pg_map;
|
||||
int i_mapOffsetX, i_mapOffsetY, i_mapOffsetStartX, i_mapOffsetStartY;
|
||||
int i_biggestHouseSize;
|
||||
int i_mapW, i_mapH;
|
||||
|
||||
ArrayList<House> houses = new ArrayList<House>();
|
||||
|
||||
|
||||
175
Time.pde
175
Time.pde
@@ -1,69 +1,126 @@
|
||||
import java.util.Date;
|
||||
import java.util.Calendar;
|
||||
import java.text.SimpleDateFormat;
|
||||
//Date date = new Date();
|
||||
//SimpleDateFormat ft;
|
||||
//Calendar c = Calendar.getInstance();
|
||||
Date date = new Date();
|
||||
SimpleDateFormat dateFormat;
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
//24*60 = 1440;
|
||||
|
||||
int i_days = 1;
|
||||
int i_hours;
|
||||
int i_minutes;
|
||||
int i_startMinutes;
|
||||
int i_flexibleTime;
|
||||
void initTime() {
|
||||
i_hours = 5;
|
||||
i_minutes = 0;
|
||||
i_startMinutes = millis();
|
||||
}
|
||||
boolean b_pauseTime;
|
||||
boolean b_changeTime;
|
||||
void time() {
|
||||
//calculate time
|
||||
if (!b_changeTime) {
|
||||
if (millis() - i_startMinutes > i_timeTickMS) {
|
||||
i_startMinutes = millis();
|
||||
if (!b_pauseTime) {
|
||||
i_minutes++;
|
||||
}
|
||||
}
|
||||
if (i_minutes >= 60) {
|
||||
i_hours++;
|
||||
i_minutes = 0;
|
||||
}
|
||||
if (i_hours >= 24) {
|
||||
i_days++;
|
||||
i_hours = 0;
|
||||
}
|
||||
|
||||
i_flexibleTime = i_hours*60 + i_minutes;
|
||||
} else {
|
||||
i_minutes = i_flexibleTime % 60;
|
||||
i_hours = (int)i_flexibleTime / 60;
|
||||
if (i_flexibleTime < 0) {
|
||||
i_days --;
|
||||
i_flexibleTime = 1440;
|
||||
}
|
||||
if (i_flexibleTime > 1440) {
|
||||
i_days++;
|
||||
i_flexibleTime = 0;
|
||||
}
|
||||
}
|
||||
|
||||
//time events
|
||||
|
||||
if ((i_flexibleTime >= getFlexTime(0, 0) && i_flexibleTime < getFlexTime(6, 0)) || i_flexibleTime > getFlexTime(23,0)) {
|
||||
buttons[6].i_x = i_windowW/2-85;
|
||||
buttons[6].i_y = i_skipNightButtonY;
|
||||
textSize(10);
|
||||
buttons[6].i_tx = buttons[6].i_x + buttons[6].i_w/2 - (int)(textWidth(buttons[6].s_text) /2);
|
||||
} else {
|
||||
buttons[6].i_x = -1000;
|
||||
buttons[6].i_y = -1000;
|
||||
buttons[6].i_tx = -1000;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
Simple DateFormat Format Codes
|
||||
G Era designator AD
|
||||
y Year in four digits 2001
|
||||
M Month in year July or 07
|
||||
d Day in month 10
|
||||
h Hour in A.M./P.M. (1~12) 12
|
||||
H Hour in day (0~23) 22
|
||||
m Minute in hour 30
|
||||
s Second in minute 55
|
||||
S Millisecond 234
|
||||
E Day in week Tuesday
|
||||
D Day in year 360
|
||||
F Day of week in month 2 (second Wed. in July)
|
||||
w Week in year 40
|
||||
W Week in month 1
|
||||
a A.M./P.M. marker PM
|
||||
k Hour in day (1~24) 24
|
||||
K Hour in A.M./P.M. (0~11) 10
|
||||
z Time zone Eastern Standard Time
|
||||
' Escape for text Delimiter
|
||||
" Single quote
|
||||
|
||||
|
||||
Date and Time Conversion Characters
|
||||
Character Description Example
|
||||
c Complete date and time Mon May 04 09:51:52 CDT 2009
|
||||
F ISO 8601 date 2004-02-09
|
||||
D U.S. formatted date (month/day/year) 02/09/2004
|
||||
T 24-hour time 18:05:19
|
||||
r 12-hour time 06:05:19 pm
|
||||
R 24-hour time, no seconds 18:05
|
||||
Y Four-digit year (with leading zeroes) 2004
|
||||
y Last two digits of the year (with leading zeroes) 04
|
||||
C First two digits of the year (with leading zeroes) 20
|
||||
B Full month name February
|
||||
b Abbreviated month name Feb
|
||||
m Two-digit month (with leading zeroes) 02
|
||||
d Two-digit day (with leading zeroes) 03
|
||||
e Two-digit day (without leading zeroes) 9
|
||||
A Full weekday name Monday
|
||||
a Abbreviated weekday name Mon
|
||||
j Three-digit day of year (with leading zeroes) 069
|
||||
H Two-digit hour (with leading zeroes), between 00 and 23 18
|
||||
k Two-digit hour (without leading zeroes), between 0 and 23 18
|
||||
I Two-digit hour (with leading zeroes), between 01 and 12 06
|
||||
l Two-digit hour (without leading zeroes), between 1 and 12 6
|
||||
M Two-digit minutes (with leading zeroes) 05
|
||||
S Two-digit seconds (with leading zeroes) 19
|
||||
L Three-digit milliseconds (with leading zeroes) 047
|
||||
N Nine-digit nanoseconds (with leading zeroes) 047000000
|
||||
P Uppercase morning or afternoon marker PM
|
||||
p Lowercase morning or afternoon marker pm
|
||||
z RFC 822 numeric offset from GMT -0800
|
||||
Z Time zone PST
|
||||
s Seconds since 1970-01-01 00:00:00 GMT 1078884319
|
||||
Q Milliseconds since 1970-01-01 00:00:00 GMT 1078884319047
|
||||
*/
|
||||
G Era designator AD
|
||||
y Year in four digits 2001
|
||||
M Month in year July or 07
|
||||
d Day in month 10
|
||||
h Hour in A.M./P.M. (1~12) 12
|
||||
H Hour in day (0~23) 22
|
||||
m Minute in hour 30
|
||||
s Second in minute 55
|
||||
S Millisecond 234
|
||||
E Day in week Tuesday
|
||||
D Day in year 360
|
||||
F Day of week in month 2 (second Wed. in July)
|
||||
w Week in year 40
|
||||
W Week in month 1
|
||||
a A.M./P.M. marker PM
|
||||
k Hour in day (1~24) 24
|
||||
K Hour in A.M./P.M. (0~11) 10
|
||||
z Time zone Eastern Standard Time
|
||||
' Escape for text Delimiter
|
||||
" Single quote
|
||||
|
||||
|
||||
Date and Time Conversion Characters
|
||||
Character Description Example
|
||||
c Complete date and time Mon May 04 09:51:52 CDT 2009
|
||||
F ISO 8601 date 2004-02-09
|
||||
D U.S. formatted date (month/day/year) 02/09/2004
|
||||
T 24-hour time 18:05:19
|
||||
r 12-hour time 06:05:19 pm
|
||||
R 24-hour time, no seconds 18:05
|
||||
Y Four-digit year (with leading zeroes) 2004
|
||||
y Last two digits of the year (with leading zeroes) 04
|
||||
C First two digits of the year (with leading zeroes) 20
|
||||
B Full month name February
|
||||
b Abbreviated month name Feb
|
||||
m Two-digit month (with leading zeroes) 02
|
||||
d Two-digit day (with leading zeroes) 03
|
||||
e Two-digit day (without leading zeroes) 9
|
||||
A Full weekday name Monday
|
||||
a Abbreviated weekday name Mon
|
||||
j Three-digit day of year (with leading zeroes) 069
|
||||
H Two-digit hour (with leading zeroes), between 00 and 23 18
|
||||
k Two-digit hour (without leading zeroes), between 0 and 23 18
|
||||
I Two-digit hour (with leading zeroes), between 01 and 12 06
|
||||
l Two-digit hour (without leading zeroes), between 1 and 12 6
|
||||
M Two-digit minutes (with leading zeroes) 05
|
||||
S Two-digit seconds (with leading zeroes) 19
|
||||
L Three-digit milliseconds (with leading zeroes) 047
|
||||
N Nine-digit nanoseconds (with leading zeroes) 047000000
|
||||
P Uppercase morning or afternoon marker PM
|
||||
p Lowercase morning or afternoon marker pm
|
||||
z RFC 822 numeric offset from GMT -0800
|
||||
Z Time zone PST
|
||||
s Seconds since 1970-01-01 00:00:00 GMT 1078884319
|
||||
Q Milliseconds since 1970-01-01 00:00:00 GMT 1078884319047
|
||||
*/
|
||||
|
||||
183
UI.pde
183
UI.pde
@@ -1,21 +1,58 @@
|
||||
int i_buttonCount = 7;
|
||||
|
||||
Button buttons[] = new Button[5];
|
||||
Button buttons[] = new Button[i_buttonCount];
|
||||
|
||||
|
||||
int i_debugTextSize = 10;
|
||||
int i_debugButtonWidth = 100;
|
||||
int i_debugButtonHeight = i_debugTextSize;
|
||||
int i_debugButtonCorner = 5;
|
||||
int i_debugButtonPadding = 20;
|
||||
int i_debugMenuPadding = 15;
|
||||
int i_debugMenuX = 15;
|
||||
int i_debugMenuY = 15;
|
||||
int i_debugMenuW = i_debugButtonWidth + 2 * i_debugMenuPadding;
|
||||
int i_debugMenuH;
|
||||
int i_debugMenuButtonC;
|
||||
|
||||
float f_timeBoxCenterX;
|
||||
float f_timeBoxX;
|
||||
float f_timeBoxY;
|
||||
float f_timeBoxW;
|
||||
float f_timeBoxH = 34;
|
||||
float f_timeBoxCorner = 6;
|
||||
|
||||
int i_uiTransparency = 200;
|
||||
String s_timeString;
|
||||
void initUI() {
|
||||
f_timeBoxCenterX = i_windowW/2;
|
||||
f_timeBoxY = 10 ;
|
||||
|
||||
i_uiX = 0;
|
||||
i_uiY = 518;
|
||||
i_uiW = width;
|
||||
i_uiH = height - i_uiY;
|
||||
|
||||
buttons[0] = new Button(15, 50, 100, i_debugTextSize, 5, "Autoplay", 0);
|
||||
buttons[1] = new Button(15, 70, 100, i_debugTextSize, 5, "Lock Camera", 1);
|
||||
buttons[2] = new Button(15, 90, 100, i_debugTextSize, 5, "Debug", 2);
|
||||
buttons[3] = new Button(15, 110, 100, i_debugTextSize, 5, "Control Eyes", 3);
|
||||
buttons[4] = new Button(15, 130, 100, i_debugTextSize, 5, "Houses Texts", 4);
|
||||
for (int i = 0; i < i_buttonCount; i++) {
|
||||
buttons[i] = new Button(i);
|
||||
}
|
||||
buttons[0].label("Autoplay");
|
||||
buttons[1].label("Lock Camera");
|
||||
buttons[2].label("Debug");
|
||||
buttons[3].label("Control Eyes");
|
||||
buttons[4].label("Houses Texts");
|
||||
buttons[5].label("Pause Time");
|
||||
buttons[6] = new Button(i_windowW/2-85, i_skipNightButtonY, 170, 50, i_debugButtonCorner, "Nacht überspringen >>", 6);
|
||||
/*
|
||||
buttons[0] = new Button(15, 50, 100, i_debugTextSize, i_debugButtonCorner, "Autoplay", 0);
|
||||
buttons[1] = new Button(15, 70, 100, i_debugTextSize, i_debugButtonCorner, "Lock Camera", 1);
|
||||
buttons[2] = new Button(15, 90, 100, i_debugTextSize, i_debugButtonCorner, "Debug", 2);
|
||||
buttons[3] = new Button(15, 110, 100, i_debugTextSize, i_debugButtonCorner, "Control Eyes", 3);
|
||||
buttons[4] = new Button(15, 130, 100, i_debugTextSize, i_debugButtonCorner, "Houses Texts", 4);
|
||||
buttons[5] = new Button(15, 150, 100, i_debugTextSize, i_debugButtonCorner, "Pause Time", 5); */
|
||||
i_debugMenuH = (i_debugMenuButtonC -1) * (i_debugButtonHeight+i_debugButtonPadding) + 2 * i_debugMenuPadding;
|
||||
}
|
||||
|
||||
int i_skipNightButtonY = 50;
|
||||
|
||||
int i_uiX, i_uiY, i_uiW, i_uiH;
|
||||
int i_uiOffsetX, i_uiOffsetY, i_uiOffsetStartX, i_uiOffsetStartY, i_initUiY;
|
||||
@@ -23,16 +60,22 @@ void drawUI() {
|
||||
|
||||
//camera tracking
|
||||
if (b_cameraLock) {
|
||||
if (b_mapZoom) {
|
||||
i_mapOffsetX = width/2-int(citizen[i_selectedCitizen].f_xPos)/2;
|
||||
i_mapOffsetY = height/2-int(citizen[i_selectedCitizen].f_yPos)/2;
|
||||
} else {
|
||||
i_mapOffsetX = width/2-int(citizen[i_selectedCitizen].f_xPos);
|
||||
i_mapOffsetY = height/2-int(citizen[i_selectedCitizen].f_yPos);
|
||||
if (i_selectedCitizen != 0) {
|
||||
if (b_mapZoom) {
|
||||
i_mapOffsetX = i_windowW/2-int(citizen[i_selectedCitizen].f_xPos)/2;
|
||||
i_mapOffsetY = i_windowH/2-int(citizen[i_selectedCitizen].f_yPos)/2;
|
||||
} else {
|
||||
i_mapOffsetX = i_windowW/2-int(citizen[i_selectedCitizen].f_xPos);
|
||||
i_mapOffsetY = i_windowH/2-int(citizen[i_selectedCitizen].f_yPos);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//draw
|
||||
//debugmenu
|
||||
stroke(1);
|
||||
fill(127, 127, 127, 127);
|
||||
rect(i_debugMenuX, i_debugMenuY, i_debugMenuW, i_debugMenuH);
|
||||
//buttons
|
||||
strokeWeight(0);
|
||||
textSize(i_debugTextSize);
|
||||
@@ -40,12 +83,19 @@ void drawUI() {
|
||||
buttons[i].display();
|
||||
}
|
||||
//clock
|
||||
fill(255, i_uiTransparency);
|
||||
rect(6, 4, 140, 31, 6);
|
||||
if (b_realTime) {
|
||||
s_timeString = "Tag " + i_days + ", " + String.format("%02d", hour()) + ":" + String.format("%02d", minute()) + ":" + String.format("%02d", second());
|
||||
} else {
|
||||
s_timeString = "Tag " + i_days + ", " + nf(i_hours, 2, 0) + ":" + nf(i_minutes, 2, 0);
|
||||
}
|
||||
textSize(30);
|
||||
textAlign(LEFT);
|
||||
f_timeBoxW = textWidth(s_timeString)+6;
|
||||
f_timeBoxX = f_timeBoxCenterX-textWidth(s_timeString) / 2;
|
||||
fill(255, i_uiTransparency);
|
||||
rect(f_timeBoxX, f_timeBoxY, f_timeBoxW, f_timeBoxH, f_timeBoxCorner);
|
||||
fill(0);
|
||||
text(String.format("%02d", hour()) + ":" + String.format("%02d", minute()) + ":" + String.format("%02d", second()), 10, 30);
|
||||
text(s_timeString, f_timeBoxX+3, f_timeBoxY - 8 + f_timeBoxH);
|
||||
|
||||
//debug
|
||||
if (b_debug) {
|
||||
@@ -66,9 +116,11 @@ void drawUI() {
|
||||
"Name: " + citizen[i_selectedCitizen].s_name,
|
||||
"Gender: " + citizen[i_selectedCitizen].s_gender,
|
||||
"Age: " + citizen[i_selectedCitizen].i_age,
|
||||
"Loation: " + (citizen[i_selectedCitizen].i_location == 0 ? "home / heading home" : "outside"),
|
||||
"x: " + int(citizen[i_selectedCitizen].f_xPos),
|
||||
"y: " + int(citizen[i_selectedCitizen].f_yPos),
|
||||
"Angle: " + citizen[i_selectedCitizen].f_angle,
|
||||
"Moving: " + citizen[i_selectedCitizen].b_moving,
|
||||
"Movement speed: " + round(citizen[i_selectedCitizen].f_movementSpeed*100),
|
||||
"Random Run: " + citizen[i_selectedCitizen].b_randomRun,
|
||||
"Turning: " + citizen[i_selectedCitizen].b_turning,
|
||||
@@ -89,7 +141,7 @@ void drawUI() {
|
||||
if (maxLinesPerColumn > 0) {
|
||||
int requiredColumns = (debug.length/maxLinesPerColumn)+1;
|
||||
for (int i = 0; i < requiredColumns; i++) {
|
||||
while (((line-(maxLinesPerColumn*i)) * i_debugTextSize + i_debugTextSize -1)+i_uiY<height && line < debug.length) {
|
||||
while (((line-(maxLinesPerColumn*i)) * i_debugTextSize + i_debugTextSize -1)+i_uiY<i_windowH && line < debug.length) {
|
||||
text(debug[line], 10+(columnWidth*i), i_uiY+(i_debugTextSize*((line-(maxLinesPerColumn*i))+1)));
|
||||
line++;
|
||||
}
|
||||
@@ -147,49 +199,80 @@ void buttonFunctions(int s) {
|
||||
case(4):
|
||||
b_housesTexts = !b_housesTexts;
|
||||
break;
|
||||
case(5):
|
||||
b_pauseTime = !b_pauseTime;
|
||||
break;
|
||||
case(6):
|
||||
i_flexibleTime = getFlexTime(6, 0);
|
||||
i_minutes = 0;
|
||||
i_hours = 6;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int getFlexTime(int hour, int minute) {
|
||||
return (hour*60+minute);
|
||||
}
|
||||
|
||||
class Button {
|
||||
int i_x, i_y, i_w, i_h, i_c, i_f, i_tx;
|
||||
int i_x, i_y, i_w, i_h, i_c, i_id, i_tx;
|
||||
int i_margin = 5;
|
||||
String s_t;
|
||||
Button(int x, int y, int w, int h, int corner, String text, int function) {
|
||||
String s_text;
|
||||
|
||||
Button(int id) {
|
||||
i_id = id;
|
||||
i_x = i_debugMenuX + i_debugMenuPadding;
|
||||
i_y = i_debugMenuY + i_debugMenuPadding + (i_debugButtonPadding + i_debugButtonHeight) * i_id;
|
||||
i_w = i_debugButtonWidth;
|
||||
i_h = i_debugButtonHeight;
|
||||
i_c = i_debugButtonCorner;
|
||||
i_debugMenuButtonC++;
|
||||
}
|
||||
|
||||
void label(String lab) {
|
||||
s_text = lab;
|
||||
textSize(10);
|
||||
i_tx = i_x + (i_w/2) - (int)(textWidth(s_text) /2);
|
||||
}
|
||||
|
||||
Button(int x, int y, int w, int h, int corner, String text, int id) {
|
||||
i_id = id;
|
||||
i_x = x;
|
||||
i_y = y;
|
||||
i_w = w;
|
||||
i_h = h;
|
||||
i_c = corner;
|
||||
i_f = function;
|
||||
s_t = text;
|
||||
i_tx = i_x + (i_w/2) - (int(textWidth(s_t) /2));
|
||||
s_text = text;
|
||||
textSize(10);
|
||||
i_tx = i_x + i_w/2 - (int)(textWidth(s_text) /2);
|
||||
}
|
||||
boolean hover() {
|
||||
if (mouseX > i_x - i_margin && mouseX < i_x+i_w + i_margin && mouseY > i_y - i_margin && mouseY < i_y+i_h + i_margin) return true;
|
||||
else return false;
|
||||
}
|
||||
void click() {
|
||||
buttonFunctions(i_f);
|
||||
buttonFunctions(i_id);
|
||||
}
|
||||
void display() {
|
||||
fill(150, 170, 250, 150);
|
||||
rect(i_x, i_y, i_w, i_h, i_c);
|
||||
fill(0);
|
||||
text(s_t, i_tx, i_y + i_debugTextSize);
|
||||
text(s_text, i_tx, i_y + i_h/2 + i_debugTextSize/2.5);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
boolean b_mouseChangeMapOffset, b_mouseChangeUiHeight;
|
||||
boolean b_hoverUI;
|
||||
|
||||
int i_changeTimeMouseX;
|
||||
boolean b_selectCitizen;
|
||||
boolean b_drag;
|
||||
void mousePressed() {
|
||||
if (mouseButton == LEFT) {
|
||||
boolean clickUI = false;
|
||||
|
||||
|
||||
if (mouseX >= i_uiX && mouseX <= i_uiX+i_uiW && mouseY >= i_uiY-10 && mouseY <= i_uiY+10) { //drag and drop debug window size
|
||||
b_mouseChangeUiHeight = true;
|
||||
i_uiOffsetStartY = mouseY;
|
||||
@@ -197,7 +280,7 @@ void mousePressed() {
|
||||
clickUI = true;
|
||||
}
|
||||
|
||||
for (int i = 0; i < buttons.length; i++) {
|
||||
for (int i = 0; i < buttons.length; i++) { // click buttones
|
||||
if (buttons[i].hover()) {
|
||||
buttons[i].click();
|
||||
clickUI = true;
|
||||
@@ -205,17 +288,29 @@ void mousePressed() {
|
||||
}
|
||||
|
||||
|
||||
if (mouseX > f_timeBoxX && mouseX < f_timeBoxX + f_timeBoxW && mouseY > f_timeBoxY && mouseY < f_timeBoxY + f_timeBoxH) { //drag time
|
||||
clickUI = true;
|
||||
i_changeTimeMouseX = mouseX;
|
||||
b_changeTime = true;
|
||||
}
|
||||
|
||||
if (!clickUI) {
|
||||
int selectedCitizen = i_selectedCitizen; //leftclick select citizen
|
||||
b_selectCitizen = false;
|
||||
for (int i = 0; i < citizen.length; i++) {
|
||||
if (selectedCitizen != i) {
|
||||
if (selectedCitizen != i) {
|
||||
if (i_mapViewToMap(mouseX, i_mapOffsetX)+10 >= citizen[i].f_xPos - citizen[i].i_diameter/2 && i_mapViewToMap(mouseX, i_mapOffsetX)-10 <= citizen[i].f_xPos + citizen[i].i_diameter/2
|
||||
&& i_mapViewToMap(mouseY, i_mapOffsetY)+10 >= citizen[i].f_yPos - citizen[i].i_diameter/2 && i_mapViewToMap(mouseY, i_mapOffsetY)-10 <= citizen[i].f_yPos + citizen[i].i_diameter/2) {
|
||||
b_selectCitizen = true;
|
||||
selectCitizen(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!b_cameraLock) {
|
||||
if(!b_selectCitizen){
|
||||
selectCitizen(0);
|
||||
}
|
||||
|
||||
if (!b_cameraLock || i_selectedCitizen == 0) {
|
||||
b_mouseChangeMapOffset = true;
|
||||
i_mapOffsetStartX = mouseX - i_mapOffsetX;
|
||||
i_mapOffsetStartY = mouseY - i_mapOffsetY;
|
||||
@@ -223,7 +318,7 @@ void mousePressed() {
|
||||
}
|
||||
}
|
||||
if (mouseButton == CENTER) {
|
||||
if (!b_cameraLock) {
|
||||
if (!b_cameraLock || i_selectedCitizen == 0) {
|
||||
b_mouseChangeMapOffset = true;
|
||||
i_mapOffsetStartX = mouseX - i_mapOffsetX;
|
||||
i_mapOffsetStartY = mouseY - i_mapOffsetY;
|
||||
@@ -238,33 +333,45 @@ void mousePressed() {
|
||||
// citizen[i_selectedCitizen].b_randomRun = false;
|
||||
// citizen[i_selectedCitizen].b_moving = false;
|
||||
//}
|
||||
|
||||
citizen[i_selectedCitizen].goTo(constrain(i_mapViewToMap(mouseX, i_mapOffsetX), 0, pg_map.width), constrain(i_mapViewToMap(mouseY, i_mapOffsetY), 0, pg_map.height), 10);
|
||||
citizen[i_selectedCitizen].turnTo(citizen[i_selectedCitizen].f_xPos-constrain(i_mapViewToMap(mouseX, i_mapOffsetX), 0, pg_map.width), citizen[i_selectedCitizen].f_yPos-constrain(i_mapViewToMap(mouseY, i_mapOffsetY), 0, pg_map.height), 4);
|
||||
if (!citizen[i_selectedCitizen].b_talking) {
|
||||
citizen[i_selectedCitizen].goTo(constrain(i_mapViewToMap(mouseX, i_mapOffsetX), 0, pg_map.width), constrain(i_mapViewToMap(mouseY, i_mapOffsetY), 0, pg_map.height));
|
||||
citizen[i_selectedCitizen].turnTo(citizen[i_selectedCitizen].f_xPos-constrain(i_mapViewToMap(mouseX, i_mapOffsetX), 0, pg_map.width), citizen[i_selectedCitizen].f_yPos-constrain(i_mapViewToMap(mouseY, i_mapOffsetY), 0, pg_map.height), 4);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int i_mapViewToMap(int mouse, int offset) {
|
||||
if (b_mapZoom) return (mouse-offset)*2;
|
||||
else return mouse-offset;
|
||||
}
|
||||
|
||||
void mouseDragged() {
|
||||
b_drag = true;
|
||||
if (b_mouseChangeMapOffset) {
|
||||
i_mapOffsetX = (mouseX - i_mapOffsetStartX);
|
||||
i_mapOffsetY = (mouseY - i_mapOffsetStartY);
|
||||
}
|
||||
if (b_mouseChangeUiHeight) {
|
||||
i_uiY = mouseY - i_uiOffsetStartY + i_initUiY;
|
||||
if (i_uiY > height) i_uiY = height;
|
||||
i_uiH = height - i_uiY;
|
||||
|
||||
|
||||
if (i_uiY > height) i_uiY = i_windowH;
|
||||
i_uiH = i_windowH - i_uiY;
|
||||
//hook buttons to ui panel
|
||||
}
|
||||
if (b_changeTime) {
|
||||
i_flexibleTime += mouseX-i_changeTimeMouseX;
|
||||
i_changeTimeMouseX = mouseX;
|
||||
}
|
||||
}
|
||||
void mouseReleased() {
|
||||
b_mouseChangeMapOffset = false;
|
||||
b_mouseChangeUiHeight = false;
|
||||
b_changeTime = false;
|
||||
//if (i_mapOffsetStartX == mouseX-i_mapOffsetX && i_mapOffsetStartY == mouseY-i_mapOffsetY && !b_drag && !b_selectCitizen) {//only click, no drag
|
||||
// selectCitizen(0);
|
||||
//}
|
||||
b_drag = false;
|
||||
//b_selectCitizen = false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
113
citizen.pde
113
citizen.pde
@@ -1,38 +1,70 @@
|
||||
import processing.net.*;
|
||||
|
||||
int i_citizenAmount = 100;
|
||||
/*
|
||||
todo
|
||||
|
||||
dominanz
|
||||
wächst mit anzahl der am tag durchgeführten kommunikationen
|
||||
sinkt mit zeit ohne kommunikation
|
||||
(durchgeführte kommunikationen nach tag resetten)
|
||||
beeinflusst wie stark eigene farbe übertragen oder übernommen wird
|
||||
proportional zur farbintensität? alle grau = weltfrieden though
|
||||
|
||||
goTo fast immer haus-spezifisch machen. liste der häuser von citizen mit ähnlicher farbe, werden öfter besucht
|
||||
ab und zu nach hause gehen
|
||||
goTo random point on map = spaziergang. passiert vorwiegend sonntags? wochentage?
|
||||
|
||||
|
||||
andere lösung finden ausser teleportieren bei unmöglicher pfadfindung
|
||||
|
||||
idee:
|
||||
processing client - spieler verfolgt einen einzigen citizen
|
||||
ignore-liste
|
||||
ziel: möglichst viele zur eigenen farbe bekehren
|
||||
|
||||
*/
|
||||
|
||||
//settings
|
||||
boolean b_smallerImage = false; //use a cropped, smaller version of the 1920x1080 image for faster development
|
||||
boolean b_rundgang = false;
|
||||
|
||||
boolean b_smallerImage = false ; //broken
|
||||
boolean b_loadSun = false; //load sun from web-api instead of local json file (local file is adressed to january 4th 2019. might implement a check that downloads today's information only once...
|
||||
|
||||
int i_sMapReso = 8; //the higher the smaller the reso, 2 is best quality but takes some time to download
|
||||
|
||||
float f_walkSpeedMin = 1;
|
||||
float f_walkSpeedMax = 2;
|
||||
int i_timeTickMS = 200; //milliseconds how long until next minute ticks on clock
|
||||
|
||||
boolean b_cameraLock = false;
|
||||
boolean b_autoPlay = false;
|
||||
|
||||
|
||||
boolean b_controlEyeWithMouse;
|
||||
|
||||
|
||||
boolean b_debug = true;
|
||||
boolean b_drawNodes = false;
|
||||
boolean b_housesTexts = false;
|
||||
float f_walkSpeedMin = 2;
|
||||
float f_walkSpeedMax = 3;
|
||||
|
||||
float f_nodeResolution = 0.2; //defines density of path-finding nodes, multiplied with resolution
|
||||
int i_pathAlgorithm = 4;
|
||||
int i_debugTextSize = 10;
|
||||
int i_mapW, i_mapH;
|
||||
int i_windowW, i_windowH;
|
||||
int i_viewportW, i_viewportH;
|
||||
|
||||
|
||||
boolean b_cameraLock = true;
|
||||
boolean b_autoPlay = false;
|
||||
boolean b_realTime = false;
|
||||
boolean b_controlEyeWithMouse;
|
||||
boolean b_housesTexts;
|
||||
boolean b_debug = false;
|
||||
boolean b_drawNodes = false;
|
||||
|
||||
|
||||
|
||||
|
||||
int i_windowW, i_windowH, i_viewportW, i_viewportH;
|
||||
|
||||
Server server;
|
||||
Client client;
|
||||
|
||||
void rundgang() {
|
||||
i_debugMenuX = -200;
|
||||
}
|
||||
|
||||
|
||||
void setup() {
|
||||
//fullScreen();
|
||||
size(700, 600);
|
||||
server = new Server(this, 5210);
|
||||
//blendMode(MULTIPLY);
|
||||
@@ -51,6 +83,8 @@ void setup() {
|
||||
i_mapW = pg_map.width;
|
||||
i_mapH = pg_map.height;
|
||||
|
||||
if (b_rundgang) rundgang();
|
||||
initTime();
|
||||
initHouses();
|
||||
initPathFinding();
|
||||
initWeather();
|
||||
@@ -67,6 +101,8 @@ void pre() {
|
||||
i_uiY = height - i_uiH;
|
||||
i_uiW = width;
|
||||
i_uiH = height - i_uiY;
|
||||
f_timeBoxCenterX = width/2;
|
||||
f_timeBoxY = 10 ;
|
||||
}
|
||||
}
|
||||
String s_fromClient;
|
||||
@@ -74,22 +110,46 @@ int i_mapLevelTransferC;
|
||||
int i_makeThemGoC;
|
||||
void draw() {
|
||||
background(127);
|
||||
for (int i = 0; i < i_citizenAmount*3; i++){ //so bad
|
||||
clientCommunication();
|
||||
}
|
||||
|
||||
clientCommunication();
|
||||
time();
|
||||
|
||||
if (b_makeThemGo) {
|
||||
citizen[i_makeThemGoC].goTo(int(random(0, pg_map.width)), int(random(0, pg_map.height)), 10);
|
||||
citizen[i_makeThemGoC].goTo(int(random(0, pg_map.width)), int(random(0, pg_map.height)));
|
||||
i_makeThemGoC ++;
|
||||
if (i_makeThemGoC >= citizen.length) {
|
||||
b_makeThemGo = false;
|
||||
i_makeThemGoC = 0;
|
||||
}
|
||||
println(i_makeThemGoC);
|
||||
}
|
||||
|
||||
pg_map.beginDraw();
|
||||
pg_map.background(127);
|
||||
|
||||
//pg_map.tint(50,50,200,255);
|
||||
|
||||
int nightC = 0;
|
||||
if (i_flexibleTime > 300 && i_flexibleTime < 550) {
|
||||
nightC = (int)map(i_flexibleTime, 300, 550, 50, 255);
|
||||
}
|
||||
if (i_flexibleTime <= 300 || i_flexibleTime >= 1300) {
|
||||
nightC = 50;
|
||||
}
|
||||
if (i_flexibleTime >= 550 && i_flexibleTime <= 1000) {
|
||||
nightC = 255;
|
||||
}
|
||||
if (i_flexibleTime > 1000 && i_flexibleTime < 1300) {
|
||||
nightC = (int)map(i_flexibleTime, 1000, 1300, 255, 50);
|
||||
}
|
||||
|
||||
pg_map.tint(nightC, nightC, (int)map(nightC, 50, 255, 150, 255), 255);
|
||||
i_visionTransparency = (int)map(nightC, 50, 255, 0, 150);
|
||||
//150-450 //morgen
|
||||
//1000-1300 //abend
|
||||
|
||||
|
||||
if (b_debug) pg_map.image(img_houses, 0, 0, img_houses.width, img_houses.height);
|
||||
else pg_map.image(img_map, 0, 0, img_houses.width, img_houses.height);
|
||||
|
||||
@@ -111,17 +171,18 @@ void draw() {
|
||||
|
||||
for (int i = 0; i < citizen.length; i++) {
|
||||
if (citizen[i].b_linked) {
|
||||
citizen[i].update();
|
||||
if (i != i_selectedCitizen)
|
||||
citizen[i].display();
|
||||
if (b_debug)
|
||||
citizen[i].debug();
|
||||
citizen[i].update();
|
||||
if (i != i_selectedCitizen)
|
||||
citizen[i].display();
|
||||
if (b_debug)
|
||||
citizen[i].debug();
|
||||
}
|
||||
}
|
||||
if (b_controlEyeWithMouse) {
|
||||
citizen[i_selectedCitizen].turnTo(citizen[i_selectedCitizen].f_xPos-(float)constrain(i_mapViewToMap(mouseX, i_mapOffsetX), 0, pg_map.width), citizen[i_selectedCitizen].f_yPos-(float)constrain(i_mapViewToMap(mouseY, i_mapOffsetY), 0, pg_map.height), 0) ;
|
||||
}
|
||||
citizen[i_selectedCitizen].display();
|
||||
|
||||
if (i_selectedCitizen != 0) citizen[i_selectedCitizen].display();
|
||||
|
||||
pg_map.endDraw();
|
||||
image(pg_map, i_mapOffsetX, i_mapOffsetY, i_mapW, i_mapH);
|
||||
|
||||
Reference in New Issue
Block a user