Commit Graph

234 Commits

Author SHA1 Message Date
Imbris
d341073a44 Upgrade to specs 0.15.1 2019-12-20 22:48:14 -05:00
Imbris
e49cafafbf Actually send deletion messages 2019-12-20 22:48:14 -05:00
Imbris
71cce03f29 Move sync code into common submodule 2019-12-20 22:37:12 -05:00
Imbris
609e0f23bf Stop global syncing of entity creation 2019-12-20 22:37:12 -05:00
Songtronix
2f93dd2c38 adjust logging level 2019-11-22 19:12:58 +01:00
Shane Handley
4df7e95331
Add a TODO regarding the future plan for the connection timeout setting. 2019-11-06 21:34:19 +01:00
Shane Handley
15c725bfde
Address code review points:
- Clarify caffeine fueled comment
- Be better at comparing Instant's, and catch the 0 seconds case to say
Goodbye to the user
- Switch println for 'info!'
2019-11-06 21:34:18 +01:00
Shane Handley
fe9ad3fa19
Network timeout updates
- Bugfix: Check whether the server response (pong) is greater than the timeout period, rather than the ping (which will always fire regardless of connection status) This was causing the timeout error event to never fire.

- Feature: Send the player notifications to the chat window that they will be kicked due to disconnection for 6 seconds before kicking them back to the main menu.
2019-11-06 21:34:14 +01:00
soruh
6dfa146484 Mitgated RUSTSEC-2019-0014 by updating noise and
disabling its default features, specifically `image`,
which had the vulnerability.
2019-11-05 11:14:39 +00:00
timokoesters
20248a4818
feat: store items as RON files
When a new item is created, a ron file will be used as a template
2019-10-24 23:47:26 +02:00
Imbris
2703c8afe1 Move serverside client to a component and communications into server ecs systems 2019-10-23 23:50:06 -04:00
Imbris
53ddbec527 Actually fix region removal panic, update fuzzy chunk location, sync entity removal when unloading chunks, region size constant tweak 2019-10-23 22:43:02 -04:00
Imbris
b09bddda79 Make clients subscribed to nearby regions and only send physics updates from those regions. 2019-10-23 22:43:02 -04:00
Acrimon
6f532a7a37 Drastically improved error messages in client and server. 2019-10-23 18:38:09 +02:00
Songtronix
fffffff536 fix(crash): overflowing the stack 2019-10-18 14:19:02 +02:00
Songtronix
5b716515bb change(githash): provide date and hash 2019-10-18 15:32:55 +02:00
Joshua Yanovski
8ae2692b6e Allow canceling chunk generation.
Currently we only do this when no players are in range of the chunk.  We
also send the first client who posted the chunk a message indicating
that it's canceled, the hope being that this will be a performance win
in single player mode since you don't have to wait three seconds to
realize that the server won't generate the chunk for you.

We now check an atomic flag for every column sample in a chunk.  We
could probably do this less frequently, but since it's a relaxed load it
has essentially no performance impact on Intel architectures.
2019-10-16 11:39:41 +00:00
Marcel Märtens
20c520a044 Change the version number to 0.4 2019-10-10 15:48:01 +02:00
Nicolas
6e4d556073 Add max chat message length
Fixes #115
Credit to @scorpion9979 for the previous implementation (https://gitlab.com/veloren/veloren/merge_requests/215)
2019-10-04 16:14:54 +02:00
Acrimon
03bf74f414 Updated toolchain version and a bunch of deps. 2019-10-03 17:19:22 -04:00
Joshua Barretto
dff67e1c41 Added block collection, improved controls for it 2019-09-26 00:15:07 +01:00
Joshua Yanovski
b4ad76372b Allow canceling chunk generation.
Currently we only do this when no players are in range of the chunk.  We
also send the first client who posted the chunk a message indicating
that it's canceled, the hope being that this will be a performance win
in single player mode since you don't have to wait three seconds to
realize that the server won't generate the chunk for you.

We now check an atomic flag for every column sample in a chunk.  We
could probably do this less frequently, but since it's a relaxed load it
has essentially no performance impact on Intel architectures.
2019-09-16 03:41:33 +02:00
Joshua Barretto
3f2e22f039 Exponential interpolation for linear damping
With an additional approximation to allow for the same size jumps given different framerates.
2019-09-09 19:11:40 +00:00
haslersn
b26043b0e6 common: Rework Chunk and Chonk implementation
Previously, voxels in sparsely populated chunks were stored in a `HashMap`.
However, during usage oftentimes block accesses are followed by subsequent
nearby voxel accesses. Therefore it's possible to provide cache friendliness,
but not with `HashMap`.

The previous merge request [!469](https://gitlab.com/veloren/veloren/merge_requests/469)
proposed to order voxels by their morton order (see https://en.wikipedia.org/wiki/Z-order_curve ).
This provided excellent cache friendliness. However, benchmarks showed that
the required indexing calculations are quite expensive. Particular results
on my _Intel(R) Core(TM) i7-7500U CPU @ 2.70 GHz_ were:

| Benchmark                                | Before this commit @ d322384bec | Morton Order @ ec8a7caf42 | This commit          |
| ---------------------------------------- | --------------------------------- | --------------------------- | -------------------- |
| `full read` (81920 voxels)               | 17.7ns per voxel                  | 8.9ns per voxel             | **3.6ns** per voxel  |
| `constrained read` (4913 voxels)         | 67.0ns per voxel                  | 40.1ns per voxel            | **14.1ns** per voxel |
| `local read` (125 voxels)                | 17.5ns per voxel                  | 14.7ns per voxel            | **3.8ns** per voxel  |
| `X-direction read` (17 voxels)           | 17.8ns per voxel                  | 25.9ns per voxel            | **4.2ns** per voxel  |
| `Y-direction read` (17 voxels)           | 18.4ns per voxel                  | 33.3ns per voxel            | **4.5ns** per voxel  |
| `Z-direction read` (17 voxels)           | 18.6ns per voxel                  | 38.2ns per voxel            | **5.4ns** per voxel  |
| `long Z-direction read` (65 voxels)      | 18.0ns per voxel                  | 37.7ns per voxel            | **5.1ns** per voxel  |
| `full write (dense)` (81920 voxels)      | 17.9ns per voxel                  | **10.3ns** per voxel        | 12.4ns per voxel     |

This commit (instead of utilizing morton order) replaces `HashMap` in the
`Chunk` implementation by the following data structure:

The volume is spatially subdivided into groups of `4*4*4` blocks. Since a
`Chunk` is of total size `32*32*16`, this implies that there are `8*8*4`
groups. (These numbers are generic in the actual code such that there are
always `256` groups. I.e. the group size is chosen depending on the desired
total size of the `Chunk`.)

There's a single vector `self.vox` which consecutively stores these groups.
Each group might or might not be contained in `self.vox`. A group that is
not contained represents that the full group consists only of `self.default`
voxels. This saves a lot of memory because oftentimes a `Chunk` consists of
either a lot of air or a lot of stone.

To track whether a group is contained in `self.vox`, there's an index buffer
`self.indices : [u8; 256]`. It contains for each group

* (a) the order in which it has been inserted into `self.vox`, if the group
    is contained in `self.vox` or
* (b) 255, otherwise. That case represents that the whole group consists
    only of `self.default` voxels.

(Note that 255 is a valid insertion order for case (a) only if `self.vox` is
full and then no other group has the index 255. Therefore there's no
ambiguity.)

Rationale:

The index buffer should be small because:

* Small size increases the probability that it will always be in cache.
* The index buffer is allocated for every `Chunk` and an almost empty `Chunk`
    shall not consume too much memory.

The number of 256 groups is particularly nice because it means that the index
buffer can consist of `u8`s. This keeps the space requirement for the index
buffer as low as 4 cache lines.
2019-09-06 18:20:15 +02:00
haslersn
1796c09ca1 common: Rework volume API
See the doc comments in `common/src/vol.rs` for more information on
the API itself.

The changes include:

* Consistent `Err`/`Error` naming.
  * Types are named `...Error`.
  * `enum` variants are named `...Err`.
* Rename `VolMap{2d, 3d}` -> `VolGrid{2d, 3d}`. This is in preparation
  to an upcoming change where a “map” in the game related sense will
  be added.
* Add volume iterators. There are two types of them:
  * _Position_ iterators obtained from the trait `IntoPosIterator`
    using the method
    `fn pos_iter(self, lower_bound: Vec3<i32>, upper_bound: Vec3<i32>) -> ...`
    which returns an iterator over `Vec3<i32>`.
  * _Volume_ iterators obtained from the trait `IntoVolIterator`
    using the method
    `fn vol_iter(self, lower_bound: Vec3<i32>, upper_bound: Vec3<i32>) -> ...`
    which returns an iterator over `(Vec3<i32>, &Self::Vox)`.
  Those traits will usually be implemented by references to volume
  types (i.e. `impl IntoVolIterator<'a> for &'a T` where `T` is some
  type which usually implements several volume traits, such as `Chunk`).
  * _Position_ iterators iterate over the positions valid for that
    volume.
  * _Volume_ iterators do the same but return not only the position
    but also the voxel at that position, in each iteration.
* Introduce trait `RectSizedVol` for the use case which we have with
  `Chonk`: A `Chonk` is sized only in x and y direction.
* Introduce traits `RasterableVol`, `RectRasterableVol`
  * `RasterableVol` represents a volume that is compile-time sized and has
    its lower bound at `(0, 0, 0)`. The name `RasterableVol` was chosen
    because such a volume can be used with `VolGrid3d`.
  * `RectRasterableVol` represents a volume that is compile-time sized at
    least in x and y direction and has its lower bound at `(0, 0, z)`.
    There's no requirement on he lower bound or size in z direction.
    The name `RectRasterableVol` was chosen because such a volume can be
    used with `VolGrid2d`.
2019-09-06 15:43:31 +02:00
Imbris
52d84248ec Remove all warnings 2019-09-04 19:03:49 -04:00
timokoesters
ecbf7cad5b Remove old code 2019-08-31 09:00:20 +02:00
timokoesters
9a832dd56b Move std::mem::discriminant into new method 2019-08-30 22:51:46 -04:00
timokoesters
b99bac87db Make npcs roll correctly 2019-08-30 22:50:53 -04:00
timokoesters
77a48c61a1 Fix rolling for the player 2019-08-30 22:50:53 -04:00
timokoesters
637b4642d8 Split animations 2019-08-30 22:50:53 -04:00
timokoesters
bd8e71c5aa
Rename activate_inventory_slot to use_inventory_slot 2019-08-30 22:46:45 +02:00
timokoesters
6e1c78e5d5
Add debug mode item giving speed boost in look_dir on click 2019-08-29 19:44:28 +02:00
timokoesters
155605841b
Use comp::Stats to store Equipment, make char weapon selection work 2019-08-29 19:44:28 +02:00
timokoesters
c4879307af
Update to github vek repo 2019-08-26 13:12:45 +02:00
timokoesters
a715a84ea7
Implement unstoppable rolling 2019-08-26 13:12:42 +02:00
timokoesters
5d5ccd7b99
Move from state components to single CharaterState struct
This makes split animations easy and improves overall code quality
2019-08-26 13:12:34 +02:00
Joshua Yanovski
c02f2a7f9e Fixes to worldgen and adding a debug command.
Humidity and temperature are now indexed to uniform altitude *over land
chunks* (and water chunks adjacent to land) rather than over the whole
range of altitude.  This is necessary in order to satisfy the uniformity
conditions of the formula for weighted sum CDF.

Additionally, fixes the computation of whether a tree should be
generated or not.  Previously, it was using a source of randomness
scaled to use much less than the full 0-1 range; this has been resolved.
This makes for much nicer and more gradual transitions between densities
and reduces the amount of completely barren landscapes, while also
making forests larger.

Finally, this commit adds a server command, debug_column, which returns
some useful debug information about a column given an x and y
coordinate.  This is useful for debugging worldgen.
2019-08-26 11:52:25 +02:00
Acrimon
a41cf1a83d Disabled unsafe using lint level. 2019-08-19 14:39:23 +02:00
Acrimon
b4a46f3e6e Finished switch to hashbrown. 2019-08-11 22:38:28 +02:00
Acrimon
22f318833c Migrate client to hashbrown. 2019-08-11 21:54:20 +02:00
telastrus
07d3384b01 fixed the silent kick, made it actually proper 2019-08-08 17:58:36 -04:00
telastrus
66e254db7f actually removed printlns 2019-08-08 12:09:14 -04:00
telastrus
35a3f67e19 ran cargo fmt 2019-08-08 12:05:38 -04:00
telastrus
de2082469d auth done, no popup yet 2019-08-08 12:01:15 -04:00
telastrus
f2ed2870c6 90% there 2019-08-08 11:23:58 -04:00
telastrus
6d94d43021 still compiles 2019-08-07 23:56:02 -04:00
telastrus
157c4816b3 laying the groundwork 2019-08-07 15:42:44 -04:00
Piotr Korgól
d3f2ca69a4 Change the version number to 0.3 2019-08-04 13:53:59 +02:00
Dominik Broński
f644b6ab89 Revert "Merge branch 'imbris/upgrade_specs' into 'master'"
This reverts merge request !375
2019-08-01 23:32:33 +00:00
Imbris
5f56657f6c Upgrade specs to 0.15 2019-08-01 18:09:13 -04:00
Joshua Barretto
39fc1d6b71 Added entity pickup, changed item model 2019-08-01 09:12:00 +01:00
Joshua Barretto
b3cae2f3dd Added better item manipulation 2019-08-01 09:09:26 +01:00
Joshua Barretto
31f8794c39 Started work on inventory manipulation 2019-08-01 09:09:26 +01:00
Joshua Barretto
123a78552a Fixed block-hopping on edges, added correct inventory slots 2019-08-01 09:09:26 +01:00
Joshua Barretto
5bb7998d5a Added inventory sync messages and InventoryUpdate component 2019-08-01 09:09:26 +01:00
timokoesters
b695a63e98 Send different physics components individually 2019-07-30 13:35:16 +02:00
Acrimon
ee49ebe807 Update rand, log and scan_fmt 2019-07-29 13:42:26 +00:00
timokoesters
5aa864ee58
Update most dependencies 2019-07-28 22:47:23 +02:00
tommy
95b5f4acfb Added private, broadcast, and game_state messages 2019-07-26 07:29:37 -04:00
tommy
cc6aa6f33d Adds colour to tells in chat box #194 2019-07-26 07:29:37 -04:00
Nero
53086cb3b2 Nero/light offsets 2019-07-25 20:51:20 +00:00
Joshua Barretto
1dc654dde7 Added object entities 2019-07-21 19:22:49 +01:00
Songtronix
de2dbcef45 add global git hash constant 2019-07-21 17:45:31 +00:00
Joshua Barretto
ce327445a7 Send block diffs instead of entire chunks on block change 2019-07-20 16:41:03 +01:00
Songtronix
ed0d842e57 Mark InvalidAlias Message as to be done 2019-07-17 18:32:01 +02:00
Songtronix
b41508f025 generalise errors based on zests suggestion 2019-07-17 18:32:01 +02:00
Songtronix
b6c8bdc223 add configurable max player count 2019-07-17 18:32:01 +02:00
Acrimon
a36c049b06 Resolve Forests discussion. 2019-07-12 20:13:35 +02:00
Acrimon
b4f2cd1547 Resolve discussion from Timo. 2019-07-12 19:56:40 +02:00
Acrimon
a72722e5d1 Resolved discussion from imbris. 2019-07-12 19:35:11 +02:00
Acrimon
20ac81a986 Fixed some misses. 2019-07-12 20:51:22 +02:00
Piotr Korgól
bf748ae742 Add CanBuild component, Block placing client messages and build mode command 2019-07-03 21:28:07 +02:00
timokoesters
46670e2689
Fix clippy suggestions 2019-07-02 21:00:57 +02:00
timokoesters
fe0c7028e2
Remove warnings from client 2019-07-02 20:56:29 +02:00
timokoesters
d235374d8e
Fix npc and death bug 2019-06-29 22:43:44 +02:00
timokoesters
c80351f6ca
Fix double roll bug 2019-06-29 19:49:51 +02:00
timokoesters
b0ea959f67
Remove animation syncing (does not fix any known bug) 2019-06-29 17:09:38 +02:00
Imbris
16e5b6bafd circular view distance 2019-06-23 15:49:15 -04:00
timokoesters
9701a666d9
Don't try to compensate bad states 2019-06-17 20:10:47 +02:00
timokoesters
57894a0368
Fix join problems 2019-06-17 19:52:06 +02:00
timokoesters
f0e6e76423
Don't sync animations, just sync components used to construct them 2019-06-16 19:59:15 +02:00
timokoesters
7deb3da1af
Add pub use phys:: and remove most pub mods 2019-06-16 19:59:12 +02:00
timokoesters
69cb2ed84f
Revamp control system 2019-06-16 19:57:03 +02:00
Joshua Barretto
a9d30bbfb6 Adjusted tree colour variation 2019-06-15 11:36:26 +01:00
Joshua Barretto
9fed2c1534 Merged stumps, adjusted scale code 2019-06-13 11:59:05 +01:00
Cody
14ac5babd4 Removes most unused imports; changes some unused variables to underscores or provides a leading underscore; removes some unnecessary variables and mutable declarations; and performs other miscellaneous warning fixes. 2019-06-06 14:48:41 +00:00
Joshua Barretto
4ada144164 Changed debug flag in client 2019-06-05 20:52:51 +01:00
Joshua Barretto
732ba9ac02 Reduced tree density, shortened chunk load timeout 2019-06-05 20:52:51 +01:00
Joshua Barretto
76dca0b0cf Added dynamic fog growth 2019-06-05 20:52:51 +01:00
Joshua Barretto
cd630b0816 Reduced threadpool threads to keep render thread smooth 2019-06-05 20:52:51 +01:00
Joshua Barretto
06201c7353 fmt 2019-06-05 20:52:51 +01:00
Joshua Barretto
92f2d36b0c Optimised sub-terrain chonk storage, fixed hash chunk bug, altered terrain base 2019-06-05 20:52:51 +01:00
Cody
692b216651 Fixes a bug where animals continually jumped after their target was any height above them, even once the target was no longer above them. 2019-06-03 20:09:18 +00:00
Timo Koesters
930bc91174 Merge branch 'fix-server-info' into 'master'
Add server info and player list to client

See merge request veloren/veloren!197
2019-06-02 14:45:41 +00:00
timokoesters
a69b5022c2
Add TODO 2019-06-02 16:35:21 +02:00
Monty Marz
112f0515bd Button added
Former-commit-id: d8e88da53c3f8daa3216a7d0657f0934ec1a051f
2019-06-02 02:17:36 +00:00
Cody
75ca605f5d
Changes the physics misnomer Direction to Orientation and adjusts some ECS read_storage names. 2019-05-31 16:36:24 -04:00
Imbris
e3e8afd99b Stop drawing entities outside the vd
Former-commit-id: 34878fb66ec22ac77a7400724b80ad7f8321f4cf
2019-05-28 20:47:01 -04:00
Imbris
045f41dae7 Use vd setting when creating client
Former-commit-id: b9a32c6b2f1a61a407991507c63ba7d708723410
2019-05-28 19:16:06 -04:00