Commit Graph

110 Commits

Author SHA1 Message Date
Joshua Barretto
41916d4594 Better castles, initial light prop for lit objects 2020-08-12 21:15:52 +01:00
WelshPixie
568a3e375e fixed sprite rotations 2020-08-12 21:15:52 +01:00
Joshua Barretto
d6cdb0c433 Began adding castles 2020-08-12 21:15:52 +01:00
Joshua Barretto
1f4cec773b Added make_block command 2020-08-12 21:15:52 +01:00
Joshua Barretto
8d6b442193 Crafting 2020-07-14 20:11:39 +00:00
Marcel Märtens
c212de00c2 updated dependencies and fixed stuff
- replace serde_derive by feature of serde
   incl. source code modifications to compile
 - reduce futures-timer to "2.0" to be same as async_std
 - update notify
 - removed mio, bincode and lz4 compress in common as networking is now in own crate
   btw there is a better lz4 compress crate, which is newer than 2017
 - update prometheus to 0.9
 - can't update uvth yet due to usues
 - hashbrown to 7.2 to only need a single version
 - libsqlite3 update
 - image didn't change as there is a problem with `image 0.23`
 - switch old directories with newer directories-next
 - no num upgrade as we still depend on num 0.2 anyways
 - rodio and cpal upgrade
 - const-tewaker update
 - dispatch (untested) update
 - git2 update
 - iterations update
2020-07-07 09:43:49 +02:00
Joshua Barretto
2f6a618d5a Added bombs, throwable items, more block kinds, weaker explosions 2020-07-05 16:15:48 +01:00
Delyth Williams
6644375764 Fix sprites w/o models 2020-06-27 21:08:21 +00:00
Delyth Williams
9a79101f57 Welsh pixie/grassets 2020-06-25 21:12:31 +00:00
Delyth Williams
b73da5507e added new flora 2020-06-15 16:39:21 +00:00
Ben Wallis
950c62efc6 Suppressed all existing clippy warnings in preparation for fixes as part of #587 2020-06-10 22:01:42 +01:00
Ben Wallis
de37de7f45 Initial clippy fixes as discussed in #587 2020-06-08 21:27:51 +01:00
Joshua Barretto
d0b1c9eb6f Added dungeon entrances 2020-04-29 17:01:34 +02:00
Joshua Barretto
2a6a19f7ef fmt 2020-04-23 18:19:42 +01:00
Joshua Barretto
60bf396e4f Added doors to houses 2020-04-23 18:19:41 +01:00
Monty Marz
44c5002db3 Pfau/crops 2020-04-23 18:19:41 +01:00
Joshua Barretto
431b2ae07b Fixed window mask layering, fmt 2020-04-23 18:19:41 +01:00
Joshua Barretto
77d0292e91 Added windows to buildings and scarecrows 2020-04-23 18:19:41 +01:00
Pfauenauge90
db5311189d scarecrow 2020-04-23 18:19:41 +01:00
Pfauenauge90
43b4ae6e47 Update block.rs 2020-04-23 18:19:41 +01:00
jshipsey
a89b28e117 adjusted run animation to allow villager walking 2020-04-23 18:19:41 +01:00
Pfauenauge90
98704a4753 turnip and window blocks 2020-04-23 18:19:41 +01:00
Joshua Barretto
8af3187df4 Made tomatoes taller 2020-04-23 18:19:41 +01:00
Joshua Barretto
6448c17110 Fixed sprite AO, overhauled entity spawning, better enemy spawning in dungeons, made agents more skilled at combat 2020-04-23 18:19:41 +01:00
Monty Marz
0fb3a115da Add more crops 2020-04-23 18:19:41 +01:00
Joshua Barretto
f999edffaa Fixed crop crash issues 2020-04-23 18:19:41 +01:00
Pfauenauge90
4b72a07e22 sprites 2020-04-23 18:19:41 +01:00
Pfauenauge90
fd3ffdf28b pizza sprite 2020-04-23 18:19:40 +01:00
Pfauenauge
67f27ef970 ember sprite 2020-04-23 18:19:40 +01:00
Marcel Märtens
dae31ae5b6 apply new rustfmt - touching alot of files 2020-02-01 21:39:39 +01:00
Justin Shipsey
64690279af new mobs
alligators
2020-01-26 00:22:48 +00:00
Monty Marz
b583f60326 35 new ground sprites, UI fixes 2020-01-25 11:14:02 +00:00
Joshua Yanovski
3383e991e7 Erosion cleanup, part 1.
Covers all files touched by MR that are not in world/src/sim.
2020-01-23 18:18:17 +01:00
Joshua Yanovski
2b38927345 Fixes for nonstandard chunk and map sizes.
Also fixes a longstanding map rendering issue.
2020-01-23 18:18:11 +01:00
Imbris
4b01c1b082 add: capability to disable blending for particular BlockKinds 2020-01-19 16:03:27 -05:00
Monty Marz
fdfab6a807 refactor: create_projectile doesn't take a light
It returns a builder so the caller can just do it
2019-10-17 20:59:36 +00:00
Monty Marz
d82ec6715a Item icons, chests and more 2019-10-09 19:28:05 +00:00
Monty Marz
4c1eba1f3e Assets update, aesthetics, minor fixes 2019-10-04 18:27:12 +00:00
Joshua Barretto
bdf74cf151 Fixed typo 2019-09-26 14:03:41 +01:00
Joshua Barretto
a2758b091c Added flower and grass items 2019-09-26 00:15:07 +01:00
Joshua Barretto
dff67e1c41 Added block collection, improved controls for it 2019-09-26 00:15:07 +01:00
Joshua Barretto
e22fe81a2f Added velorite 2019-09-26 00:15:07 +01:00
Joshua Barretto
a961a267f1 Added apple and mushroom collection 2019-09-26 00:15:07 +01:00
Marcel Märtens
58b0b49dfe adjust metrics to rebased Chunks 2019-09-09 10:47:40 +02:00
Marcel Märtens
b05e51152f update version, revert from static prometheus back to normal because static doesnt supprot registries, and implement most of the metrics except for entity count 2019-09-09 09:54:30 +02: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
d322384bec common: Add benchmark for Chonk 2019-09-06 15:44:36 +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
haslersn
886d554f52 common: prepend/append multiple SubChunks in a batch 2019-09-06 15:33:36 +02:00
haslersn
963c5a7785 common: Calculate magic number in Chonk 2019-09-06 15:33:36 +02:00