Commit Graph

75 Commits

Author SHA1 Message Date
42ba86f05a Add ability to shoot and delete entities 2016-11-24 18:57:44 +11:00
614fa53487 Fix broken t-strip rendering logic
Triangle strips were originally by chance were rendering correct for most cases
until collision detection was implemented. Incorrect assumptions about
specifying triangle strip winding order meant that on occasion the last triangle
in a polygon would not be rendered.

This has been amended by strictly ensuring that on rendering of polygon the
order is correct from the vertices that are passed in.
2016-11-23 23:47:23 +11:00
0c7824bf18 Move rotation step outside of inner rendering loop
We need to generate interim vertex points during the collision detection loop
that includes rotation to check for collision. During collision detection,
vertex points are rotated and positioned in placed for checking.

We also re-create this vertex list in the renderer suggesting that we could
cache the list in the entity or look at coupling rendering and collision
detection.
2016-11-23 13:42:46 +11:00
20749dd668 Fix entity origin and rotation about origin
Fundamental mismatch between rotation and offset of polygons. Polygons can be arbitrarily ordered in terms of vertices as long as they are in a CCW order.
However there should be no restriction on the starting vertex position.

Since this is the case, the entity offset for a polygon should offset from the
starting vertex to the perceived "entity origin". This entity origin is where
collision detection, rotation and movement is based off.
2016-11-19 16:42:13 +11:00
a4e5025dd4 Merge triangle rendering code to polygon code 2016-11-18 14:33:11 +11:00
17dc6cc6fc Fix degenerate tris showing up in certain configs
Occasionally with the right orientation, degenerate triangles will appear as
they are no longer zero-area triangles which OGL can cull during rendering. The
issue comes from having to manually ensure each primitive in the rendering
pipeline sent to the render groups were correctly marked with degenerate
vertexes.

Instead, we can now just pass the vertex points straight through, using
a begin() and end() structure which will append the start and ending degenerate
vertexes for us.
2016-11-17 21:03:55 +11:00
064d17d34c Asteroid data merged to entity and display
Asteroids move and are a part of the entity sytem. Added some debug markers for
memory usage and fixed a bug in logic causing degenerate triangles to show up
depending on the angle of approach towards the origin.
2016-11-17 18:15:36 +11:00
e49984b3d0 Add arbitrary asteroid polygon rendering 2016-11-17 00:50:49 +11:00
b75d700dd6 Rename rect members from pos, size to min, max 2016-11-16 16:57:24 +11:00
21bf650298 Fix triangle rendering and wireframe 2016-11-16 13:00:59 +11:00
339ae38b38 Simplify shaders, enable coloring of primitives 2016-11-12 01:17:30 +11:00
981d87a2d7 Add proper wireframe mode, rotation to triangle 2016-11-12 00:22:09 +11:00
6d67485d49 Add primitive triangle rendering code 2016-11-11 21:43:03 +11:00
4795fe1cb1 Switch developing game to asteroids, start project
Switch to something of smaller scope in aim to be able to finish a project from
start to finish. Also allow refreshed eyes to review the existing API and see
what can be improved on after taking a short break from the project.
2016-11-09 22:36:41 +11:00
332888f3b5 Switch mem allocation to custom memory block
No longer repeatedly invoke malloc for retrieving memory. Some operations still
leak memory (notably audio streaming). We introduce notion of Transient and
Permanent storage. Transient memory is used for data in memory that is
temporarily allocated (i.e. graphics for that frame's output), and permanent as
more like game state storage.

We now give out pointers from a pre-allocated block of memory, so we have no
allocation cost and benefits of reduced memory leaks. The transient block gets
reset every frame. Any memory allocated within is cleared at no cost simply by
rearranging the base pointer of the memory block.
2016-09-24 14:43:59 +10:00
85b757aaa7 Update debug display for render groups 2016-09-23 21:15:22 +10:00
82421ca64c Improve performance by swapping render groups
Last used render groups are brought to front of render list when searching for
valid group- as per- recently used items are likely to be used again.
2016-09-23 19:36:18 +10:00
72d30b6320 Restore color modulation in render groups 2016-09-23 19:19:47 +10:00
3894d33485 Fix rotation on render, change rendering code
Premultiply transformation matrix onto vertices before sending onto GPU to
preserve transformation properties of entities before being batched into
a general group. This removes the model matrix from the shader pipeline- instead
in rendering code we deal in world space (which works out to be more intuitive).
Only in the last step in GLSL we convert back to normalised coordinates.
2016-09-23 18:02:53 +10:00
88ce511f2b Entity rendering now uses rectangle rendering code 2016-09-22 19:00:44 +10:00
23720fae19 Fix batch-render of strings, fix group logic
Incorrect assumption that strings only needed degenerate vertexes at the start
and end of each string instead of characters causing render "wings" between
separate strings.

Fix render-group not switching to next group if current group is full.
2016-09-22 18:46:53 +10:00
ebe09bd345 Improved render groups, use degenerate triangles
Degenerate triangles allows a single triangle strip call to be called on
multiple independent triangles without "connecting" strips inbetween the
triangles.
2016-09-22 02:16:14 +10:00
ec7a9e41ff Begin draft imeplementation of batched rendering
Render all entities with the same texture in one call. Currently only
implemented for humanoid entities. Since we are rendering using triangle strips,
between entities there is invalid rastered data between entities. Using
degenerate triangles this may be mitigated, by indicating to OGL which triangles
it can skip in the rendering process.
2016-09-21 19:21:27 +10:00
7cb13b3cf8 Add additional entity struct data
Attempting to add child weapon data to an entity has revealed the need for an
entity origin to which children start transformations from. Worth exploring
scene graphs in the future.
2016-09-15 03:20:13 +10:00
fc6f6e086f Add child entity to projectiles 2016-09-13 13:35:16 +10:00
8ddac9c110 Add projectile attack skill 2016-09-13 00:53:25 +10:00
f6943e5efb Const asset and entity functions, minor clean up 2016-08-31 16:40:41 +10:00
e9db7b0570 Convert subtextures to use hash tables
Also clean up and add some block comments to aid code separation mainly in
AssetManager.
2016-08-30 18:42:37 +10:00
c93e6ca37c Pull out xml loading to assetmanager code 2016-08-30 00:11:00 +10:00
1d09bdfa20 Draft implementation of hash tabled textures 2016-08-27 04:15:13 +10:00
17cc6063a3 Restore battle system using hash data structs 2016-08-25 18:29:36 +10:00
7ca42f781a Start merging hash table access into assets
Basic implementation with many pre-existing features disabled untill all
parts of the system that interact with the assets transitions over.
2016-08-25 02:06:32 +10:00
6ec92358b2 Add audiostate field and audio toggle ui button 2016-08-19 00:56:02 +10:00
90068d2c64 Add string length in pixel func, add button label 2016-08-19 00:25:43 +10:00
e90b31de55 Separate UI code into own file 2016-08-17 18:04:51 +10:00
5cd7239c8a Switch rendering to xy bottom left, zw top right 2016-08-17 17:35:31 +10:00
22973ef51d Add text field draft implementation 2016-08-10 21:52:05 +10:00
db1eb7b9f3 Switch over to rect vs v4 where appropriate
Main change is switching the camera to use a rectangle. There is no rect
change in renderer for grouping size and position together. Due to
noticing the use case of rendering- where it's convenient to be able to
offset the rectangle from the position value when passed into the
function explicitly without having to re-create offset Rectangle structs
to pass in.
2016-08-04 22:17:14 +10:00
adb1aa83f3 Add mouse tracking, add null-texture gen function
Refactor the creation of the null-texture into a function. Used for
blitting rectangles that don't have any texture associated with it.
2016-08-04 18:46:46 +10:00
85becdfd6c Merge the game to dengine, reduce header coupling
Until engine architecture can clearly be separated from the game, i.e.
notion of entity storage belonging to game and concept of entity belonging
to engine, worlds/scenes belonging to game or engine- the project will
only refer to Dengine.
2016-07-28 15:19:23 +10:00
71faaa78c4 Add openal-soft dependency, update opengl macro 2016-07-24 22:19:25 +10:00
a43102ee26 Rotate targetting reticule to mob. Add pivot point
Notion of pivot point now for rotating, i.e. the anchor point at which
rotations are applied. Rotating the reticule is done by using inverse
trigonometry, namely atan2f.
2016-07-23 21:26:15 +10:00
fd94eb5afd Mobs battle with hero, engine architect. changes
Mobs battle in real-time with the hero when in range. Start encapsulating
logic into entityStateSwitch() to organise entity properties changing
between different states.

Introduce basic concept of memory management in MemoryArena. Begin passing
around a memory object to track memory usage and eventually delegate
memory allocations through. Remove the old memory tracker in the debug
object and incorporate into engine primarily.

Add a debug console for logging information and events to the screen in
a console-like fashion. Debug is now initialised after the game, this is
so that you can pass the game's memory arena and font file to the debug
services. Debug services now properly initialise debug element positions
from this information and not through the update routine.
2016-07-19 21:19:26 +10:00
403999b566 Change Animation names, stop input parse on attack 2016-07-19 13:32:31 +10:00
b8b76cecd3 Switch entity anims to use references to assets 2016-07-19 03:47:32 +10:00
e00ef52f8a Add hitbox size/render size notion 2016-07-18 20:37:14 +10:00
129234fbeb Merge update with render section in update loop 2016-07-18 00:54:21 +10:00
7971b10b74 Remove int v2 type, change V2i to cast i32 to f32
Mixing and matching V2 int and float types in the code creates too much
necessary work when an integer implementation has to interact with float
implementation. Let V2i create the cast for us and use floats for all
vector operations since they are mostly mathematic.
2016-07-17 23:45:59 +10:00
2745a8e25a Add simple animation scheduling infrastructure 2016-07-17 20:24:51 +10:00
88108bce19 Delete old assets, remove anim update in renderer
Begin to add notion of a hitbox entity size and the rendering size.
Dynamic entities such as players will have animations that should exceed
the size of the actual player, we should be able to render it at the
desired size even if larger than the actual size.

Collision still occurs on the entity size (i.e. hitbox). Remove the notion
of updating animation in the renderer, we update in WorldTraveller,
removing any concept of passing a "deltatime" to the renderer. The
renderer's purpose is to draw not parse animation logic.
2016-07-17 19:24:19 +10:00