Technical Implementation: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
''' | '''Warning: Things on this page may be wrong! (not up to date)''' | ||
= Calculations done (on colonies) = | |||
== Every other minute == | |||
For now calculations take place every other minute. r_nnn below is the ratio on that order setting. Using a linear model. This makes one colony "slow to turn" but by using many colonies it gets done faster. Use ar_worker=worker/(worker+warrior) in some formulas instead of r_worker to reflect the actual population. | |||
* capacity += r_expand * ar_worker * const | |||
* secret capacity += r_expand * ar_worker * r_secret * const (NOTE: secret is a part of the capacity) | |||
* workers += if (worker+warrior < capacity) r_breed * r_worker * const | |||
* warriors += if (worker+warrior < capacity) r_breed * r_warrior * const | |||
* food += min(capacity, (r_food * ar_worker - level) * (workers+warriors) * const), Gathering and eating, if r_food*ar_worker kept at level or above the food increase, else it decreases. Testing with level = 0.4. NOTE: Food can be negative, to affect how many dies in steps below. | |||
Transform workers to warriors and vice versa | |||
* if (to many warriors compared to workers) warriors -= const, worker +=const , i.e. if ar_worker > r_worker + 0.01 | |||
* if (to many workers compared to warriors) warriors += const, worker -=const , i.e. if ar_worker < r_worker - 0.01 | |||
* | Starving: | ||
* if (food < 0) workers += food*ar_workers, warriors += food*(1-ar_workers) | |||
* if (workers + warriors < 2) colony is dead | |||
Decaying. | |||
* food turn bad, slowly decreases? -= const similar to setting 1%? | |||
* | Decaying both inhabited and not inhabited | ||
* if (capacity > 10 or not inhabited) capacity slowly decreases -= const similar to setting 1%? | |||
* | * if (capacity < 2 and not inhabited) nest is broken and destroyed | ||
* | |||
== Every 12 minutes == | |||
* Animals at colonies eat and destroy | |||
== | = Network = | ||
* Server controls what is on the map (the client shall not assume anything) | |||
== Client == | == Client == | ||
Line 34: | Line 46: | ||
* Notification from server if nearby actions take place, the notifications shall contain enough data to update the info in the client (typically attacks) | * Notification from server if nearby actions take place, the notifications shall contain enough data to update the info in the client (typically attacks) | ||
= Occurance of things = | |||
== Animals == | == Animals == | ||
* | * Amount of animals: Is currently linear to the number of colonies | ||
* Have a an (average) lifetime and disappears after that time (no matter if in inventory or on ground) | * Have a an (average) lifetime and disappears after that time (no matter if in inventory or on ground) | ||
* Show up | * Show up on colonies with notification to owners | ||
== Food == | == Food == | ||
Line 53: | Line 66: | ||
** After som time food disappear at the current location and get new distribution, with overlap. TODO HOW?) | ** After som time food disappear at the current location and get new distribution, with overlap. TODO HOW?) | ||
** There are fixed areas where the food appear. Over time the internal pos and location is changed. Two overlapping formulas or just one and a fix time when it is changed to the new. Once a week the removed resources are reset and the new ones appear? | ** There are fixed areas where the food appear. Over time the internal pos and location is changed. Two overlapping formulas or just one and a fix time when it is changed to the new. Once a week the removed resources are reset and the new ones appear? | ||
Revision as of 09:48, 29 April 2016
Warning: Things on this page may be wrong! (not up to date)
Calculations done (on colonies)
Every other minute
For now calculations take place every other minute. r_nnn below is the ratio on that order setting. Using a linear model. This makes one colony "slow to turn" but by using many colonies it gets done faster. Use ar_worker=worker/(worker+warrior) in some formulas instead of r_worker to reflect the actual population.
- capacity += r_expand * ar_worker * const
- secret capacity += r_expand * ar_worker * r_secret * const (NOTE: secret is a part of the capacity)
- workers += if (worker+warrior < capacity) r_breed * r_worker * const
- warriors += if (worker+warrior < capacity) r_breed * r_warrior * const
- food += min(capacity, (r_food * ar_worker - level) * (workers+warriors) * const), Gathering and eating, if r_food*ar_worker kept at level or above the food increase, else it decreases. Testing with level = 0.4. NOTE: Food can be negative, to affect how many dies in steps below.
Transform workers to warriors and vice versa
- if (to many warriors compared to workers) warriors -= const, worker +=const , i.e. if ar_worker > r_worker + 0.01
- if (to many workers compared to warriors) warriors += const, worker -=const , i.e. if ar_worker < r_worker - 0.01
Starving:
- if (food < 0) workers += food*ar_workers, warriors += food*(1-ar_workers)
- if (workers + warriors < 2) colony is dead
Decaying.
- food turn bad, slowly decreases? -= const similar to setting 1%?
Decaying both inhabited and not inhabited
- if (capacity > 10 or not inhabited) capacity slowly decreases -= const similar to setting 1%?
- if (capacity < 2 and not inhabited) nest is broken and destroyed
Every 12 minutes
- Animals at colonies eat and destroy
Network
- Server controls what is on the map (the client shall not assume anything)
Client
- Will have a service (or similar) run once per hour, or so, sending position (web or gcm). The pos is passivly get. I.e. if there is one, read it.
Client <-> Server
- All actions are asynchronous
- Send all waiting actions (in client) to one server script using a background thread.
- The client application holds a list of actions waiting to be performed (with a generated serial id)
- A json-list with actions
- All actions have a serial number (unique to user and say 5 min?) and info on what to perform
- If the action already took place (serial number) just send the updated info (for that action)
- The server responds with apropriate data on all actions or error messages and also a part with new data (that might have been changed)
- The client updates data and remove confirmed actions from the list of waiting actions
- The client sends a new request with waiting actions (including those who where not confirmed)
- Notification from server if nearby actions take place, the notifications shall contain enough data to update the info in the client (typically attacks)
Occurance of things
Animals
- Amount of animals: Is currently linear to the number of colonies
- Have a an (average) lifetime and disappears after that time (no matter if in inventory or on ground)
- Show up on colonies with notification to owners
Food
- Pretty evenly distibuted on earth
- Only visible on zoomed in.
- TODO Decrease and disappear after some time? New show up. How?
- When looking at area x1,x1 -> x2,y2, maybe it "scans the lines" and the distance to the next food occurrence is relative to the latitude to get it evenly distibuted. (instead of checking a square pattern)
- TODO But how to figure out where to spawn more food and where has it already been done?
- Math pattern having a fixed amount of food and a table with the removed ones (and dropped) and let the patters slowly slide/change in some way...
- Where is it calculated?
- One table with lat L,LL and long L,LL values showing where it has been added
- One table with actual food items on the map. When picked up, they respawn efter some time, or grow up again.
- After som time food disappear at the current location and get new distribution, with overlap. TODO HOW?)
- There are fixed areas where the food appear. Over time the internal pos and location is changed. Two overlapping formulas or just one and a fix time when it is changed to the new. Once a week the removed resources are reset and the new ones appear?