Sorry your browser is not supported!

You are using an outdated browser that does not support modern web technologies, in order to use this site please update to a new browser.

Browsers supported include Chrome, FireFox, Safari, Opera, Internet Explorer 10+ or Microsoft Edge.

Dark GDK / Physics plug-in powered by PhysX

Author
Message
JTK
14
Years of Service
User Offline
Joined: 10th Feb 2010
Location:
Posted: 1st Jun 2010 00:38 Edited at: 1st Jun 2010 00:43
The triangle-mesh, not so much... I don't use them yet (but may - alien litterers will be throwing things at the player - although I could make basic objects for that; cylanders (soda cans), plains (paper), etc.)

Dynamic hitting the controller, versus controller hitting the dynamic actor - probably will impact me some. Capt. Ooze has to beat up the litterers to make them stop littering... Hmmm... I *may* be able to work around this but don't know for sure...

Quote: "
At the moment, the contact will still be recognised but it will return the ID's that the contact pair was initially set up with, this is not a design choice its just the way it is at the moment.
"


So if I create the player with ID 1 (initially) to represent NORMAL state, and later change him to BOOT (say 2 for example), the contact would still be reported as ID 1? Or would the contact not even be recognized since I'm using a new object to represent the player? If I need to clear the current contact-pairs when changing to object 2, that's fine - and I could reset up the contact pairs using 2 instead - or could you (I don't know how it's setup internally) change all references to object 1 to object 2 behind the scenes (even if another parameter were to be passed)

swapObject( obj1, obj2, update_contacts=true );


OR

I could setup a controller for each player state (and actor for each litterer's state [for each litterer on the level]). If hiding the current player object (say 2 for boot) will garauntee no possible collisions then I can do that and only "teleport" the current physics-object to the appropriate location when needed...

In other words, I would need 9-controllers plus (5*48=240 actors) of which only 1-controller and 48-actors would be visible (given the scenario above) - can I be garaunteed no collisions between the hidden controllers/actors? If so, I'll take what you have now... At the worst, I'll come calling again with yet another problem... Meanwhile, you can continue testing / changing before release...

In either case, it doesn't much matter to me how it's handled, just so long as there's a way to handle it... I'll leave it to you to decide how you want fulcrum to handle such changes as I'm sure once it becomes accepted/popular; others will be wanting similar functionality...

How is dark_coder handling these situations? Certainly by now they've encountered similar situations... don't you think?



JTK

Edit:

Quote: "
can I be garaunteed no collisions between the hidden controllers/actors?
"


Taken from this post above:

what kind of impact on performance would this have?
Matty H
15
Years of Service
User Offline
Joined: 7th Oct 2008
Location: England
Posted: 1st Jun 2010 00:50
All these edits are getting hard to follow lol.

New situation is that you can use swapObject() for controllers which means that you only ever create one controller with the ID of the current object it represents, when you swap state(objects) then call swapObject() and you now use the new object ID for everything, does this sound right?

JTK
14
Years of Service
User Offline
Joined: 10th Feb 2010
Location:
Posted: 1st Jun 2010 00:51
Yes it does...

JTK
JTK
14
Years of Service
User Offline
Joined: 10th Feb 2010
Location:
Posted: 1st Jun 2010 00:53
Are you sure you want people like me to test your product? LOL



JTK
Matty H
15
Years of Service
User Offline
Joined: 7th Oct 2008
Location: England
Posted: 1st Jun 2010 01:02
Quote: "The triangle-mesh, not so much... I don't use them yet (but may - alien litterers will be throwing things at the player - although I could make basic objects for that; cylanders (soda cans), plains (paper), etc.)"


Triangle mesh actors can only be static, you would use convex mesh actors or box/sphere actors for this kind of thing and they are fine with contacts, in fact, I have wrote up a small guide as to what should represent what in the new version documentation.

Quote: "Dynamic hitting the controller, versus controller hitting the dynamic actor - probably will impact me some. Capt. Ooze has to beat up the litterers to make them stop littering... Hmmm... I *may* be able to work around this but don't know for sure..."

If there is no solution to contacts with controllers then it would be a job for raycasting. Your character attacks, you cast array in that direction, if it hits then your enemy reacts.

Quote: "How is dark_coder handling these situations? Certainly by now they've encountered similar situations... don't you think?"

I would guess that he's not using this at the moment.

Quote: "Are you sure you want people like me to test your product? LOL"

Without you this project would probably be moving very slowly, you're keeping me on my toes and thats a good thing. I simply don't have time to do the amount of testing I should, so having you here is a god-send, thanks

JTK
14
Years of Service
User Offline
Joined: 10th Feb 2010
Location:
Posted: 1st Jun 2010 01:12
So when can I get the latest and greatest?

JTK
Matty H
15
Years of Service
User Offline
Joined: 7th Oct 2008
Location: England
Posted: 1st Jun 2010 01:24
I think I have found the problem for the triangle-mesh/contact issue, I forgot that they are actually multiple actors in one, so they are a special case I need to cater for.
I'll fix that and then release it, probably tomorrow night. I'll make a minor update maybe next week with more examples, as thats all thats holding me back right now.

I'm finished for the night now though, laters.

Matty H
15
Years of Service
User Offline
Joined: 7th Oct 2008
Location: England
Posted: 2nd Jun 2010 03:09
Version 1.3 is here, more features including vehicles, more examples, more documentation.

Let me know if it works, thanks.

I fixed the triangle-mesh/contact issue but the character controllers not recording contacts seems to just be a built in limitaton with controllers. The way they interact with objects in the simulation is just completely different(under the hood) to dynamic actors. Although its good to know that a dynamic actor will record the contact if it hits the controller.
Because of this slight limitation, the raycasting example I've included is a player(controller) kicking a ball(dynamic) around and it works pretty well.

Hope you like

JTK
14
Years of Service
User Offline
Joined: 10th Feb 2010
Location:
Posted: 2nd Jun 2010 03:48
Quote: "
Linking...
LINK : fatal error LNK1104: cannot open file 'MikeNet.lib'
Build Time 1:00
"


Not working for me...

JTK
Matty H
15
Years of Service
User Offline
Joined: 7th Oct 2008
Location: England
Posted: 2nd Jun 2010 10:41
Oh dear, looks like I have been using the S3GE version of DarkGDK when I built the lib.
I will fix this when I get home from work, sorry about that, good job I have you testing it out for me

Matty H
15
Years of Service
User Offline
Joined: 7th Oct 2008
Location: England
Posted: 2nd Jun 2010 16:25
I have updated the first post download with a working lib, hopefully.
Also, you can download just the fixed lib from this post if you have v1.3 already.

Thanks for that JTK, let me know if this works so I can sleep easy tonight. I have made a note of what I think I did wrong, I need to improve at this lib creation stuff.

Attachments

Login to view attachments
JTK
14
Years of Service
User Offline
Joined: 10th Feb 2010
Location:
Posted: 3rd Jun 2010 03:31
I'm getting a ton of linker warnings (all regarding a missing .pdb) - but other than that; so far, so good.

I'll let you know how it works later... Got some testing to do now...


Thanks,

JTK
TechLord
21
Years of Service
User Offline
Joined: 19th Dec 2002
Location: TheGameDevStore.com
Posted: 3rd Jun 2010 23:35 Edited at: 3rd Jun 2010 23:35
Fulcrum 1.3v Vehicle Example Link Errors


Matty H
15
Years of Service
User Offline
Joined: 7th Oct 2008
Location: England
Posted: 3rd Jun 2010 23:53
Tech - Strange, seems the lib you are using might not be up to date. From those errors it seems that it can find start(), setGravity(), simulate() etc..
When did you download? Are you sure its not looking at the older lib that is in dosp?

I am going to check it out now and also try to get rid of the warnings, you may want to hold back on adding it to dosp, I will let you guys know how I get on.

Matty H
15
Years of Service
User Offline
Joined: 7th Oct 2008
Location: England
Posted: 4th Jun 2010 00:28
I just downloaded from the top post, told VC++ where the libs and headers are and it was fine.
0 errors, 0 warnings

@Tech - Those are straight forward errors meaning it cand find any of the new functions, but it can find some of the older ones. I'm 99% sure its looking at an out of date Lib. Also, I need to get messenger on my laptop as that is what I use for all my game-dev stuff and its about this time of night I am free to chat


@JTK - I have no idea what these warnings are, could you post them for me. I presume you never got them with the last version. The only thing I can think of right now is that I may have compiled my last version with GDK 7.3 or 7.4 and then the other way around for this one, but then I'm pretty sure I have used 7.4 on both occasions. If anyone knows what causes these types of warnings I would appreciate any info.


If anyone else reads this and has time, could you try this out for me please(top post), its hard when I can't reproduce issues and would be good to know if more people get the same warnings, thanks.

JTK
14
Years of Service
User Offline
Joined: 10th Feb 2010
Location:
Posted: 4th Jun 2010 00:46
I upgraded to the libs two posts up. I'm not getting those errors.

My earnings are from release vs debug builds. Nothing to worry about...

I'm not getting the errors tech is having...

JTK
Matty H
15
Years of Service
User Offline
Joined: 7th Oct 2008
Location: England
Posted: 4th Jun 2010 01:13
Quote: "My earnings are from release vs debug builds. Nothing to worry about..."


Are they the same warnings you were getting last time?
You almost said earings, instead of warnings

JTK
14
Years of Service
User Offline
Joined: 10th Feb 2010
Location:
Posted: 4th Jun 2010 02:02
Lol. sometimes my fingers have a mind of their own...

Yeah. They're the same warnings.


JTK
Matty H
15
Years of Service
User Offline
Joined: 7th Oct 2008
Location: England
Posted: 4th Jun 2010 02:12
Ok, I can relax, let me know of any issues, or feature requests

TechLord
21
Years of Service
User Offline
Joined: 19th Dec 2002
Location: TheGameDevStore.com
Posted: 4th Jun 2010 17:03
Matty, I figured out what was cause the link errors. I had to go to my VC++ IDE options to setup VC++ Directories in order to properly locate DOSP (new structure) Include & Lib Directories.



JTK
14
Years of Service
User Offline
Joined: 10th Feb 2010
Location:
Posted: 7th Jun 2010 06:09 Edited at: 7th Jun 2010 06:14
@TechLord: I figured it was something to that effect; however, according to Matty above, you (being a developer in part of S3GE) would have a different version than I would. As such, I would suggest that you keep that in mind when downloading/using the SVN version that he uploads...

@Matty: I must say that so far I've had no problems with the Fulcrum side of Capt. Ooze; but, on the other hand, I've not "re-changed" my implementation (so far) to re-use the SwapObject() command... I've kept my code exactly as it was before the 1.3 above; and so far, nothing to report...

However, this past weekend, I've come to realize that my AI-Logic will be so very tightly coupled with whatever physics package I'm using (via self-defined, yours or dark-physics, etc.) that I've decided to further my project in the AI direction rather than physics (for the time being). Your own ray-cast/contacts demos have showed me this light... Not that it's a bad thing, only that I have not given enough thought about it until now... I have to figure out how I'm gonna handle AI - (for your suggestions, please reply to my inquiry - I could really use some outside input)...


JTK
TechLord
21
Years of Service
User Offline
Joined: 19th Dec 2002
Location: TheGameDevStore.com
Posted: 7th Jun 2010 06:40 Edited at: 7th Jun 2010 06:41
Quote: "you (being a developer in part of S3GE) would have a different version than I would. "


I'm using the same stand-alone version from this thread for S3GE. I've confirmed that the VC++ IDE was attempting to use a older versions of the Fulcrum Libs based on the order of VC++ Directories


All is good at this time.

Malboro Jones
14
Years of Service
User Offline
Joined: 10th Dec 2009
Location: Wales - UK
Posted: 20th Jun 2010 15:49
Is there a limit to how many polygons can be in a complex mesh? because I have a terrain which is all one model made of the terrain itself and other objects such as houses and rocks etc. Some of the limbs collisions are fine like the houses and rocks but I fall through the terrain and some of the rocks

Don't make war, make tea.
Matty H
15
Years of Service
User Offline
Joined: 7th Oct 2008
Location: England
Posted: 20th Jun 2010 15:58
There is no limit as far as I know.

Do you fall through at the same places every time? Check the debugger to make sure it has all the terrain and rocks.
Where is your model from and what format?

You could try:

Then use the new object to make your physics mesh, this has worked for me in the past.

Malboro Jones
14
Years of Service
User Offline
Joined: 10th Dec 2009
Location: Wales - UK
Posted: 20th Jun 2010 17:54
I made the model my self using 3DS Max and exported it into .x, it used to work fine until I started adding the rocks and thought that I must have gone over a polygon limit with them

I'll give that a try now, thanks

Don't make war, make tea.
Malboro Jones
14
Years of Service
User Offline
Joined: 10th Dec 2009
Location: Wales - UK
Posted: 20th Jun 2010 18:04
Nope! That's made it worse with that nothing is solid and everything's turned white! RAWWWWR must be an exporter problem

Don't make war, make tea.
Matty H
15
Years of Service
User Offline
Joined: 7th Oct 2008
Location: England
Posted: 20th Jun 2010 18:55
Sorry yeh, you should hide the new object, thats just for the physics, have you checked the debugger?
Are you using makeTrialgleMeshFromDBO() or makeTriangleMesh().

If you upload the model I could have a look at it for you, if you don't want to do that you could email it to me.

Malboro Jones
14
Years of Service
User Offline
Joined: 10th Dec 2009
Location: Wales - UK
Posted: 26th Jun 2010 17:10
So should I have two of the same object but hide the second one and use it for collision?

It could be a problem with scaling because I've scaled it by 1200, perhaps not all of the "limbs" are scaling properly.

But ye I'll zip it up to you when I get round to it.

Thanks

Don't make war, make tea.
ZooMxLLL
15
Years of Service
User Offline
Joined: 7th Mar 2009
Location:
Posted: 6th Jul 2010 13:03 Edited at: 6th Jul 2010 13:20
This tool suport the movement of bodies and Floating objects ??
Matty H
15
Years of Service
User Offline
Joined: 7th Oct 2008
Location: England
Posted: 7th Jul 2010 01:44
You can apply forces to rigid bodies in a couple of different ways(local, global), intresting you ask about floating objects as I suspect it can by just applying forces but I have not tried it.

I suppose if you had a box in water you would just apply an upward force as long it is below the water line, this along with gravity should give you a floating object, I think.

FERSIS
17
Years of Service
User Offline
Joined: 17th May 2006
Location:
Posted: 10th Jul 2010 20:02
Amazing job.
I have one question : Is it posible to connect objects with bones or something like that? ie: A Train or a Truck with a Semi.

Again : Awesome job.
Matty H
15
Years of Service
User Offline
Joined: 7th Oct 2008
Location: England
Posted: 10th Jul 2010 21:50 Edited at: 10th Jul 2010 21:52
Quote: "Amazing job.
I have one question : Is it posible to connect objects with bones or something like that? ie: A Train or a Truck with a Semi."


Thanks, what you want is joints, I have had a quick look at them and its not too hard to implement. I do intend to have them in the next release, I have had a bit of a break from this recently so I can't say when that will be. Do you need them? As if you do, it may motivate me to get started on the next release

EDIT: There is an ODE physics plug-in (Quick ODE by Pauli) that has joints, if you need them now you may want to give that a try.

FERSIS
17
Years of Service
User Offline
Joined: 17th May 2006
Location:
Posted: 11th Jul 2010 02:36 Edited at: 11th Jul 2010 02:36
matty halewood : Thanks for the super fast response. Nope i dont need it right now im jsut being curious.
Also what do you recommend to apply a force so an obejct moves on a given angle (Y)?


I tried something like this but didnt worked as expected:

Hassan
14
Years of Service
User Offline
Joined: 4th May 2009
Location: <script> alert(1); </script>
Posted: 11th Jul 2010 09:52 Edited at: 11th Jul 2010 09:54
EDIT: Sorry, misunderstood the question

Matty H
15
Years of Service
User Offline
Joined: 7th Oct 2008
Location: England
Posted: 11th Jul 2010 12:59
I think you have your sin and cos the wrong way around, I just tested this in the contact example and it worked:



FERSIS
17
Years of Service
User Offline
Joined: 17th May 2006
Location:
Posted: 11th Jul 2010 17:48 Edited at: 11th Jul 2010 18:04
Yup, i realised my mistake as soon as i posted.
Sorry for bothering you.

EDIT: Just tested it, still doesnt look quite right. odd.
EDIT 2: Its cool if i post a little app here to check what im doing wrong ?
Matty H
15
Years of Service
User Offline
Joined: 7th Oct 2008
Location: England
Posted: 11th Jul 2010 18:10
FERSIS
17
Years of Service
User Offline
Joined: 17th May 2006
Location:
Posted: 11th Jul 2010 18:59 Edited at: 11th Jul 2010 19:00
I found the issue!
So.. i was using C sin and cos functions -___-
It works perfect with DarkGDK dbSin() and dbCos()
dbCos and dbSin return the value in degrees meanwhile sin and cos in radians.
Again: Sorry for bothering you!!

Heres is the little app i did to test the issue (It doesnt matter anymore):
Matty H
15
Years of Service
User Offline
Joined: 7th Oct 2008
Location: England
Posted: 11th Jul 2010 19:24
Good you got that sorted.
Just to let you know, your post about joints prompted me to take a look and I have now implemented a revolute joint(hinge), I will do the rest and release when done

FERSIS
17
Years of Service
User Offline
Joined: 17th May 2006
Location:
Posted: 11th Jul 2010 20:43
Awesome.
Good luck with that!
Vladislav_V
13
Years of Service
User Offline
Joined: 7th Aug 2010
Location: Bulgaria
Posted: 7th Aug 2010 11:24 Edited at: 7th Aug 2010 14:20
Ive got a noob question here.
How do I use raycasting.For example when I use physOBJ->raycast(sourceX,Y,Z,dirX,Y,Z),I get 0 returned all the time.And how would you go about finding the dimensions(height,width) of the normal you are projecting the ray to.Another thing, how can I get the distance for example if I don't tell which ray to use.I am talking about the getRayDistance(no params)function.I must be missing something.
Great work by the way.Wish you luck with the project.
This is my raycasting test.It consists of one stationary entity and a number of satelites rotating around it.I am casting a ray from the central object and I am trying to get the collision flag, distance and normal height from satelite faces.Just compile it.
Perhabs you can turn this into a raycast example


while(!dead)
ignore_rules();
Matty H
15
Years of Service
User Offline
Joined: 7th Oct 2008
Location: England
Posted: 8th Aug 2010 12:40 Edited at: 8th Aug 2010 12:42
Hi Vladislav, there are a few issues here.
First of all you have to add your shapes to the simulation using FulcrumPhy::makeBox(). As you are moving them yourself you also need to make them kinematic, FulcrumPhy::setKinematicOn().

You need to call getPhysicsResults() and simulate() in your main loop.

I presume you think that the raycast command takes two points in space and casts a ray between them, this is not the case. A ray needs a starting position and a direction, the direction is a vector, eg(0, 1, 0) is straight up.

Also, it would be useful to know what your aim is, why do you need the shape of the face the ray hits?
Anyway, retrieving the face normals will not give you the height or width of the face, the normals will give you direction the face is pointing only, remember that this is also in vector form.

There is only one ray, you cast it and then store(or deal with) any results you obtain and then cast it again.

The following should get you started:


FulcrumPhy::makeBox() failed for me a few times running this code, this has never happened before and I've used this command alot. I have never used it making random box sizes though, I will look into this issue although I just ran it about ten times without it happening.
Let me know if you get this issue, a workaround might be to create your random numbers differently.

Lastly, I changed the way you call dbStr(), this command uses memory and if you don't get a pointer to this memory there is no way to ever delete it.

Hope this helps, it would be useful to know exactly what you are trying to do. This would make a good raycast demo, I may add a feature to draw the ray, similar to what you have done.

Good luck.

Vladislav_V
13
Years of Service
User Offline
Joined: 7th Aug 2010
Location: Bulgaria
Posted: 8th Aug 2010 13:21 Edited at: 8th Aug 2010 16:11
Thanks a lot,matty
I am happy to say that it ran fine
I knew that I would have to add the objects to the physics(obviously), but I did not know what to do with the rays and th kinetix, so i didn't.
When i say normal i mean the face of a mesh(now i see that normals are vectors, right ),
I am making a role playing game and i need the character object to detect the height of a face from a triangle mesh(a static level object maybe), the face that is directly in front of the character, i need this to make a couple of flags that determine the way the character is going to climb the obstacle and i need distance to know when to kill the character(if he falls)or if he is near a wall he stops walking.Anyway, this wont work with one ray.
I thought that the Dark GDK Engine flushes its resources at a lower level.
Thanks again, I got it this time and now i know that I would have approach my problem differently.I wonder why only one ray,is it hard to process or something?

while(!dead)
ignore_rules();
Matty H
15
Years of Service
User Offline
Joined: 7th Oct 2008
Location: England
Posted: 8th Aug 2010 22:10
Quote: " i need the character object to detect the height of a face from a triangle mesh(a static level object maybe), the face that is directly in front of the character, i need this to make a couple of flags that determine the way the character is going to climb the obstacle and i need distance to know when to kill the character(if he falls)or if he is near a wall he stops walking."


Have you looked at the character controllers?
Unless you want some very specific behaviour from your character then character controllers will have your character walking around your level in no time, with sliding collision, user defined step and slope heights etc.

I don't know why I only have one ray lol, I suppose I could let you cast as many as you like and give them id numbers. I don't really see any disadvantages with the current system though. You could wrap it into your own raycast function if you wanted and store the results away automatically for you when you need them.

I have actually just added more raycast functionality, to cast against certain collision groups etc. It will be available in the next update


Vladislav_V
13
Years of Service
User Offline
Joined: 7th Aug 2010
Location: Bulgaria
Posted: 9th Aug 2010 12:56
Quote: "Have you looked at the character controllers?
Unless you want some very specific behaviour from your character then character controllers will have your character walking around your level in no time, with sliding collision, user defined step and slope heights etc."

The character controller is good, that's one of the reasons I am using your lib, but I need something like the Tomb Raider controller.If you have a wall in front of you and if it is the right height, you can jump up and grab the ledge and then climb up, that was my idea.
Glad to hear that you added more functions to the library.Can't wait for the next update.
Sorry about my bad english and those brackets everywhere.
If I finish this I'll let you know.Now I have another idea.
Thanks again for getting me started.
I am now working on a animation blending script,then I will start
developing the character.

while(!dead)
ignore_rules();
cler
13
Years of Service
User Offline
Joined: 27th Aug 2010
Location:
Posted: 27th Sep 2010 20:13
hi @ all,

well done matty! but i have a question...one can make spheres, controllerboxes and so on and my question is: is it possible to delete these objects?
Matty H
15
Years of Service
User Offline
Joined: 7th Oct 2008
Location: England
Posted: 27th Sep 2010 21:11
Hi cler, these are all the commands you will need for deleting actors:


JTK
14
Years of Service
User Offline
Joined: 10th Feb 2010
Location:
Posted: 28th Sep 2010 16:42 Edited at: 28th Sep 2010 19:25
@matty: I have another suggestion for you. Its just a suggestion so squeeze it in when you can...

I'd like to be able to attach physics objects to a controller in much the same way as we would in gdk. That is by using a proverbial appendobject() function. That way we don't have to encase the weapon or what-not inside the controller's bounds but can still relate that object to the controller.

Take for instance, an airplane. It consists of a fuselage and two wings. I'd like to attach the wings to the fuselage - applying forces to the wings affects the fuselage. Likewise, applying forces to the fuselage affects the wings but collision detection would be specific to the generalized area (think bullets or trees).

Do you see where I'm going with this?

JTK

[edit] In retrospect, maybe I should look at vehicles... But would it work for a rider on a horse or a turret on a tank? I do not know...
Matty H
15
Years of Service
User Offline
Joined: 7th Oct 2008
Location: England
Posted: 29th Sep 2010 16:55 Edited at: 29th Sep 2010 16:57
Quote: "I'd like to be able to attach physics objects to a controller in much the same way as we would in gdk. That is by using a proverbial appendobject() function. That way we don't have to encase the weapon or what-not inside the controller's bounds but can still relate that object to the controller."


I'm not sure this is possible with a controller, although standard dynamic actors can be welded together either by using FulcrumPhy::makeCompoundActor() upon creation, or with joints on the fly, although I have not released a version with joints yet.

So the plane and tank examples should not be a problem, but you would probably need some sort of workaround for a controller.

The vehicle demo is a good example of how applying torque to the wheels will drive any shape you can come up with, I also tried it with a plane and that worked too

cler
13
Years of Service
User Offline
Joined: 27th Aug 2010
Location:
Posted: 29th Sep 2010 19:19
hi @ all,

good work matty.i have two questions...is it possible to delete controlerboxes? and how to make raycast visible (like a laser)?

Login to post a reply

Server time is: 2024-04-19 06:16:50
Your offset time is: 2024-04-19 06:16:50