Thanks. I was thinking of just building some FreeBASIC bindings of a few common C socket functions for setup and then writing a simple MVC framework of some kind using them FreeBASIC exposes no TCP library
Working on skeletal animations, have a screenie I took while working on it, poor scuttle.
https://i.imgur.com/TmAUiN2.png
sidenote: if anyone knows why I'm getting those white outlines (alpha blending is off, the fragment shader is extremely straightforward), feel free to drop a hint
When you spend a couple of hours perfecting a new part of your game in a separate scene, then you test it in the main scene:
https://files.facepunch.com/forum/upload/132317/b8d05de4-c6a5-41af-81bf-70b85c68188f/2018-04-29_19-39-31.gif
... right. Collisions. They exist.
Looks like an over-exaggerated fresnel effect?
The vertex shader doesn't touch the color the frag shader outputs at all though. hmm
https://narry.land/t6QqvX.gif
https://narry.land/AoB46V.gif
Adding this sidebar has been way more of a pain than it has any right to
How is it any harder than just hiding the sidebar's stuff and expanding the rest to the right?
Hardcoded/unset light direction used by specular?
I was trying to avoid docking the datagridview and was also trying to avoid hardcoding the offset.
I have to keep it simple because my potato can barely handle webgl as it is
fbWorld = texture(tex, UV);//vec4(boneses, 1);texture(tex, UV);//vec4(1,0,0,1);
If I back farther away, it slowly gets engulfed in whiteness from the edges inward, kinda like a fog or a bad fresnel effect
https://www.youtube.com/watch?v=m_LaS-TtE8s
I was making a homebrew 2D Lighting system, but sorting verticies by their angles was really slow for realtime performance, so I made a new sorting algorithm for my use case that automatically sorts the verticies based on their position alone.
Here's a ghetto pic showing the difference in seconds (Light sorts 68 positions (real use), SpatialSort2D sorts 1024 random positions)
https://files.facepunch.com/forum/upload/143792/e8c1574a-945c-4694-8c96-39314aa06d91/68_vs_1024.png
It requires a minimum epsilion value for array sizing, and if you have two values that are the same they will be overwritten. For my use case this wont ever happen, but it does limit what it can do.
Here is the meat of the code if you want it, the rest is extension stuff for getting a list in different formats:
public class SpatialSort2D {
public Vector2[] FirstHalf { get { return yMinus; } }
public Vector2[] SecondHalf { get { return yPlus; } }
protected Vector2[] yMinus, yPlus;
protected float epsilion;
protected int estimatedSize;
public SpatialSort2D(float epsilion) {
this.epsilion = epsilion;
int size = Mathf.CeilToInt(1f / this.epsilion) + 1;
yMinus = new Vector2[size];
yPlus = new Vector2[size];
estimatedSize = (size*2)*4;
}
public void Clear() {
System.Array.Clear(yMinus, 0, yMinus.Length);
System.Array.Clear(yPlus, 0, yPlus.Length);
}
public void AddPoint(Vector2 point) {
Vector2 nPoint = point.normalized;
if (nPoint.y < 0) {
int index = Mathf.FloorToInt(Mathf.InverseLerp(1, -1, nPoint.x) * (1f / epsilion));
yMinus[index] = point;
} else {
int index = Mathf.FloorToInt(Mathf.InverseLerp(-1, 1, nPoint.x) * (1f / epsilion));
yPlus[index] = point;
}
}
public List<Vector2> GetLinearList() {
List<Vector2> points = new List<Vector2>();
for (int i = 0; i < FirstHalf.Length; i++) {
if (FirstHalf[i] != Vector2.zero) points.Add(FirstHalf[i]);
}
for (int i = 0; i < SecondHalf.Length; i++) {
if (SecondHalf[i] != Vector2.zero) points.Add(SecondHalf[i]);
}
return points;
}
...
Oh it didn't even occur to me that it'd be the mipmaps given thats exactly how mipmaps work. Thanks! Time to fix my DDS parser, ew.
Well it's mipmaps but it doesn't look like its my fault maybe but I can't tell because DDS sucks
I picked a bad day to give my 2 weeks notice. I thought I'd come in and get my boss into a meeting before our standup. Turns out today my boss is in meetings ALL DAY and basically only has time between 1:30 and 2. I can't imagine my quitting won't disrupt his schedule in some way. I can't put it off anymore because after today, it will be less than 2 weeks. Basically there's almost no time to tell my boss I'm quitting without it fucking up his schedule. We have so many meetings (that I have to be a part of because they need my input on any one of the many projects that I'm in charge of) today that we might not even HAVE a standup.
I'm trying to implement a python wrapper for libvdpau but that's one massive pain in the ass. I think I'll just write the code needed to get it running in C and call it from python.
I got permission to eventually move our nightmarishly old codebase over to an ECS system, instead of the inheritance-based heirarchy it is right now!
While ECS isn't perfect and it isn't the end-all be-all (and it definitely gets a bit buzzwordy), I think it's perfect for our application. I'm really excited to get to work on it because 1. it'll be a splendid challenge 2. it'll make using this codebase, and maintaining/expanding it down the road way easier and 3. being able to write that I converted an old simulation/visualization application into an ECS system, effectively turning it into a flexible simulation engine for resale to clients will be huge portfolio piece I think. I'm definitely realizing that engine programming and systems design is where I want to be permanently, it's a topic I love and I spend most of my free time working on projects in that vein and studying how I can become better at it.
Downside - I have to spend the next few weeks ram-rodding through some basic data packages for our client before I can get to work on this. If we nail these data packages though, there's a chance of $1-2mil USD to develop this simulation engine - and I'll be able to add that to my portfolio too, and hopefully get to lead a team of 2-3 more developers (probably new hires!) to complete this task. That would potentially result in the creation of a new branch of our company, and the entrance of a potential competitor to the industry's standard of STK
im still not sure how to implement ECS properly. it sounds fine on paper but in practice im having a hard time keeping just data in the components.. what constitutes as "data" anyway? are mesh objects data? are textures data? they are shared pointers anyway, so are pointers data? what about when i need notifications about values changing in components?
also apple makes me sad for being apple and causing everyone more work instead of adopting open standards like opengl and vulkan
What else are you keeping in components? They are just "things" owned by entities, that's all. They are not shared pointers, unless you're doing something wrong.
Been having a lot of fun making little designs over on shadertoy. still very new to it and want to dive into making some 3D stuff but seems like it will take a while for me to wrap my head around. here's some of the stuff i've made so far:
https://files.facepunch.com/forum/upload/251860/cee31986-a262-48fd-bf58-baae909c0a9c/pretzel.gif
https://files.facepunch.com/forum/upload/251860/b3417536-bfae-4cf6-92f6-448bd467425e/lightspeed.gif
https://files.facepunch.com/forum/upload/251860/c715c872-7352-4cb1-aa51-290a66deea64/waves.gif
https://files.facepunch.com/forum/upload/251860/6d52c54c-56d5-4519-a394-02ebef08f98e/loop.gif
Entity Systems are the future of MMOG development – Part 2 – T
http://t-machine.org/index.php/2007/12/22/entity-systems-are-the-future-of-mmog-development-part-3/
Despite the over-the-top titles, these are solid articles on understanding some of how ECS can/should work. Really I don't think completely adhering to these principles is strictly necessary: one of the most powerful changes you can make is simply designing around the idea of composition to create complex objects and entities, vs inheritance. Further work in ECS is often motivated by the principles of data-driven design, which is more of an optimization methodology than it is a design paradigm/approach.
"But, as you may have noticed by now, I’m vigourously against using OOP anywhere inside an ES implementation. "
that guy is kinda delusional
also a lot of people use ECS way too verbosely -- e.g., if every entity is going to have a "position" component, why aren't you just making the position a field on the entity to avoid cache misses
ah no, i meant that the meshes and textures are shared pointers that are held by the components
the components are held by entities
but where my confusion comes from is that components shouldn't have "logic" in them, but the mesh class and texture classes have a ton of logic in them, and if they are held by the components, doesn't that mean that the component is invoking some logic by extension?
Got video to opengl texture going. Obviously still need to optimize it quite a bit, but hot diggity this is awesome!
https://www.youtube.com/watch?v=uL6OLxVAjBI
The way I see is that a component is a self contained "something". I wouldn't say they shouldn't have logic in them, that's sort of dumb. Like any class, there are invariants to data that must be upheld, which means having some sort of logical interaction with the components needs to be programmed. It makes total sense for a mesh class (although I usually call it a model) to have something like translate() rotate() scale(), etc.
The way I see it is that a component can have logic associated with its data. It just makes sense. The only no no is when there is logic about something unrelated to the component (a position component that does its own gravity for example is bad because a position should just be a position, not actually apply acceleration to itself, there should be a gravity/force system instead). Just think of components as classes and follow good class methodology. Single responsibility, encapsulation, whatever (good classes mean different things for different people).
Textures and meshes (actual meshes that are loaded from a file) I believe should be actually not owned by entities but by some sort of texture/mesh manager (so you don't load the same texture/mesh multiple times, etc.) but that's sort of outside the scope and not really directly related to ECS.
I don't think having a system or manager that stores all the data is outside the scope of ECS at all. That's more ECS than what you were otherwise describing: that was smart design and creating complex entities through composition. Small classes and small methods is just a boon to maintainability imo, and it's definitely one of the improvements I'm most enjoying applying to my codebases.
To go more into detail, it would make sense here to have your copies of the same mesh object all point back to the same mesh data potentially: but variations in their shaders, transforms, and maybe material sub-properties would create variation. Then drawing these all together, organizing the order of the drawcalls to reduce pipeline state changes would make sense.
I still need to get out into doing more high level stuff though, I've been stuck working so low for so long. But then i get distracted by thigns like reducing sparse descriptor bindings and enabling virtual texture / sparse resource support and here I am again :V
Giving your two weeks notice means getting put on documentation assignments for the next two weeks -____-
Do a good job, many many people will thank you.
Learning to make homebrew Gameboy games.
Spend like half an hour trying to figure out why the nintendo title screen checksum wasn't running until I realized that the emulator doesn't do it for legal reasons
Sorry, you need to Log In to post a reply to this thread.