Giter VIP home page Giter VIP logo

csc165-gravity-guys's Introduction

About Me

  • Name: Quinn Roemer
  • Location: Redding, CA
  • Job: Computer Engineer

I recently graduated from Sacramento State University with my bachelor's in Computer Science (May 2021). I'm eager to learn and develop my existing skills in programming and technology by solving new and challenging problems.

Please feel free to check out my personal website here.

Notable Projects

  • Mockingbird:

    • Mockingbird is an IoT simulator developed for Dialog Semiconductor. This piece of software is designed to simulate thousands of devices that directly communicate with an IoT server over u60 (twisted pair). Mockingbird's development took the majority of a year and was worked on by a team of 7 students (including myself) as a senior project. The development process followed standard Agile/Scrum procedures. More information about Mockingbird can be found here.
  • Panda Runner:

    • Panda Runner is a custom game developed for my course in Intelligent Systems. The goal of this project was to demonstrate how computer vision can be used to emulate human behavior in video games. The game can be played either by a Tensorflow model or a human player and features a data recorder, model loader, and easy map creation. The game was co-developed with Logan Hollmer.
  • Gravity Guys:

    • Gravity Guys is a 3D platformer with multiplayer networking with support for 8 players. It was developed for my course in Game Architecture with Josh Hutton.
  • Space Force Commander:

    • Space Force Commander is an Android tower defense game. It features 3 levels, 3 tower types, and 3 enemy types. It was created for my course in Object-Oriented Computer Graphics and was co-developed with Logan Hollmer.

Random

  • I love building computers and finding ways to automate daily tasks.
  • My favorite video games are MMORPG's. If I'm not coding you'll probably find me exploring a new world or grinding towards a virtual goal.

csc165-gravity-guys's People

Contributors

joshhuttoncode avatar warthog710 avatar

Watchers

 avatar

csc165-gravity-guys's Issues

Server & other clients stuck with a client that fails to say "BYE"

If the client exits unexpectedly, it never says "BYE". This is unavoidable. However, the server should be able to deal with this issue. The problem is... The server is completely reactive to requests while clients are proactive. This may involve overriding processPackets()...

  • Add a timeout on the server... If no client update takes place... remove it.
  • What if the client doesn't move? No packets are being sent? Send a packet type maybe... "ACTIVE" + client.UUID to tell the server that the client is still active.
  • Make sure this doesn't conflict with the packet timestamp. Keep two separate values? Last active msg... Last update msg?

Use a timestamp to order packets

UDP guarantees no order! Inside our network protocol, we need to send timestamps so we don't overwrite a newer location with an old one.

Game Server Lag Calculation

I think it would be cool to be able to determine how much lag there is between a client and the server... This should be easy to implement with a timestamp in the packet. My intent was to already add this for packet order but... This could also be used to determine the lag between the client and the server. Let's do it!

Client failing to say "Bye" to the Server

The client only says "BYE" to the server if the ESC key is used to exit the game. This is not ideal as there are other ways to exit... May overriding game.exit() with the correct method call will solve this?

Add pitch/yaw updates to the network protocol.

Currently, the network protocol only implements a solution for syncing client movement. We should also be doing this for yaw/pitch. This can probably be done by sending over the 3 axes associated with the client when a yaw/pitch action occurs.

Avatar can sometimes move through the walls

Sometimes collisions between the avatar and walls are not working... I think it has something to do with the avatar moving within the bounds of the physics object in a single frame. We may have to implement some form of collision detection manually on these to fix...

Client prediction of GhostAvatar movement

Currently, no prediction takes place between the client and the server. As a result, the value the server sends is the exact value used for the GhostAvatar. However, this has problems due to network latency. Implement a way in which the client can predict the movement of the avatar.

  • Maybe use some form of memory of past moves with a curve fitting function?

  • What if the client's prediction is way off? We need to gradually correct the prediction with the actual location sent from the server.

Only have a single call in *update()* for processing packets.

This will require overriding processPackets()... As we want to only do stuff in the method if we are connected to a server. In addition, server polling will have to be implemented. This will clean up update() and encapsulate networking things in the NetworkClient class.

Client's that haven't moved are still sent in an UPDATE request

If a client doesn't move between requests, the server still sends an update packet for them. Using a timestamp in the packet, only send updates for those clients that have moved when a request is made. Perhaps a boolean in the clientInfo class maintained in the GameServer?

NOTE: Marking as a bug as this fix should dramatically improve server performance as most of the time (in computer terms) a client does not move.

Game Server not sending updates...

The code used for determining if an update has occurred since the last time a client asked for an update is buggy... If the client is on the same machine the game is running on... It works. Otherwise, it does not. This most likely has to be due to how the server is checking if an update needs to be sent back. Currently, this code has been commented out and is working, but a packet is currently sent even if no updates have taken place.

Reduce the amount of packets being sent between client & server

Currently, when a client requests updates for another client on the network the server responds with a single packet for each active client. This is probably not very scalable. Idea: Send back an object with only updated information for all clients. Therefore if a client hasn't moved no update is received. This would only require one packet. However, the protocol would have to be modified quite drastically to allow for this.

Only call one networking method from update() to perform all tasks

This will require overriding processPackets()... As we want to only do stuff in the method if we are connected to a server. In addition, server polling will have to be implemented. This will clean up update() and encapsulate networking things in the NetworkClient class.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.