Presentation is loading. Please wait.

Presentation is loading. Please wait.

Lecture 3 Announcements.

Similar presentations


Presentation on theme: "Lecture 3 Announcements."— Presentation transcript:

1 Lecture 3 Announcements

2 Tac 2 Feedback Email your grader when you want your retries graded!
We won’t look at any retry handins until you us Even if you’re not done, hand in something! Knowing exactly what you’re missing makes getting the standard retry correct a lot easier

3 Tac 2 Feedback Files Don’t use absolute paths
“/gpfs/main/home/<login>/course/cs1971/tac/resources/spritesheet.png” is bad “resources/spritesheet.png” is good Absolute filepaths won’t work when we/your classmates try to test your game

4 Announcements Questions?

5 This week: Tac3! Less engine work Real gameplay requirements!
Actually fun!

6 Lecture 6 Physics I

7 Physics I Collision Response

8 Collision response You know how to detect whether 2 objects collide
How do we make objects respond in a physically believable way? General strategy: Move objects out of collision (also other stuff later)

9 Minimum Translation Vector
Physics I Minimum Translation Vector

10 Moving out of collision
Many ways to move the ball out of the wall We want the minimum “Minimum translation vector” (MTV)

11 MTV in one dimension In 1D, convex shapes are line segments (intervals) These have a 1D MTV Similar to overlap But it has a sign Different for each shape To correct their positions, move by half the MTV

12 Computing circles’ MTV
Circle vs Circle Sum of radii – dist(center1, center2) MTV is parallel to line connecting centers

13 Computing circles’ MTV (ctd)
Circle vs Box If Box contains circle center Find p = closest point on AAB edge from circle center Length of MTV is Radius + dist(center, p); MTV is parallel to the X or Y axis Otherwise Clamp circle center to Box Lengh of MTV is Radius - dist(center, clampedPoint) MTV is parallel to line connecting

14 Computing boxes’ MTV Only four possibilities Return the shortest
Move up (this.maxY – that.minY) Move down (this.minY – that.maxY) Move left (this.maxX – that.minX) Move right (this.minX – that.maxX) Return the shortest

15 Static Objects Some objects shouldn’t move, even when collided
When a static object collides, it doesn’t move When an object collides with a static object, it moves by the full MTV

16 Collision callbacks Pass in other GameObject
class PhysicsBehavior { void onCollide(GameObject); }

17 Collision callbacks Separate Collision info object (really a struct)
Pass in the MTV Pass in which Shape collided Enemies with weak points class PhysicsBehavior { void onCollide(Collision); } class Collision { final GameObject other; final Vec2f mtv; final Shape thisShape; final Shape otherShape;

18 MTV pitfalls Collision methods should return MTVs, not booleans
Be careful with signs and argument order Especially when reversing args for double dispatch Can use asserts: MTV of shape A to move it out of shape B should point from B to A assert dot(MTV, A.center – B.center) > 0

19 Physics I Questions? Questions about how to use this stuff in their current collision system

20 Lecture 3 Map Generation

21 Levels – map generation
Content Management 1 Levels – map generation

22 Procedural Generation
Algorithmically generate your own maps Game side - experiment! Typically uses seeded random numbers Ex. Random r = new Random(seed); Calling r.nextXXX(); some number of times will return the same sequence of numbers The seed can be used to share or save the generated map Used to generate seemingly-hand designed content Somewhat different than randomly generated

23 Constraint-based Generation
Not just any random map will work Generated maps need to follow game-specific constraints Dungeon crawlesr require a path from entrance to exit An RTS might require every area of the map accessible Puzzles must be solvable Design your generation algorithm around your constraints Then consider soft constraints What looks good, what’s fun, etc

24 Simple Generation Algorithms
Value noise/Perlin noise Spatial partitioning Exploring paths (random/drunken walk) Lots of resources online Make map generation as generic as possible

25 Space Partitioning Basic idea – keep splitting the map up into smaller subsections to create rooms Used to simulate the insides of structures

26 Space Partitioning Start with an empty rectangular grid.

27 Space Partitioning Pick a random index on which to divide the space along the x axis.

28 Space Partitioning Dungeon A B

29 Space Partitioning Pick another index on which to divide, this time dividing along the other axis (in this case y). Use a different index for each split

30 Space Partitioning Dungeon A A1 A2 B B1 B2

31 Space Partitioning Keep dividing, switching between x and y until you hit some depth (3 here).

32 Space Partitioning Fill spaces with random sized boxes.
Make sure boxes fill up more than half of the width or height of the space they occupy.

33 Space Partitioning Connect sister leaf nodes of the tree.
Rooms must either take up more than half their space’s width and height or will have z-shaped hallways.

34 Space Partitioning Connect parent nodes.

35 Space Partitioning Keep on connecting up the tree.

36 Space Partitioning If the halls are too narrow, Increase width of hallways to create more open space.

37 Space Partitioning Now you have your series of connected rooms!
But there’s more…

38 Space Partitioning Instead of always checking depth, have some branches of the tree stop early so you end up with more variation in room size.

39 Space Partitioning To prevent rooms from being too small and weirdly shaped, keep your dividing index with a certain range.

40 Space Partitioning Teams!
When you do your first split, assign one side of the tree to Team A and the other to Team B.

41 Space Partitioning At the bottom of the tree, assigning one room to each team as a base will ensure that the bases are on different halves of the map and no one is locked in.

42 Space Partitioning Questions?

43 Lecture 3 Tips for Tac 3

44 Viewport – Center on player
Tips for Tac 3 Viewport – Center on player

45 Bad Way Give the viewport a reference to the player
On tick, update the viewport center to be the player’s transform Too much game logic handled by the viewport

46 Better Way Give the player a CenterBehavior
Give the CenterBehavior a reference to the viewport Each tick, the CenterBehavior sets the center of the viewport to its object’s transform

47 Tips for Tac 3 Minimap

48 Viewports as Minimaps Minimap can be just another viewport
Viewports should be able to draw the world normally They can also be generic enough to draw the world as a minimap draw(Graphics2D g); drawMinimap(Graphics2D g); Could instead have a MinimapSystem that draws the bounding boxes of GameObjects

49 Tips for Tac 3 Fog of war

50 Circle Fog of War Draw the map
Only draw enemies/drops in range of player Afterwards, in one of the drawable behaviors: Generate a rectangle across the GameWorld Generate a circle around the player Subtract the circle from the rectangle Draw the resulting shape black without full opacity Can instead use image/texture map for smoother transition

51 Room by Room Similar to last slide
Illuminate the entire room that the player is in Need to dynamically generate the rectangle

52 Tips for Tac 3 Java tip of the week

53 Speeding Up Your Code Component-based engines are more expensive
Eclipse has a java profiler! jvmmonitor.org marketplace.eclipse.org/content/jvm-monitor

54 Tac II Playtesting Let’s do it!


Download ppt "Lecture 3 Announcements."

Similar presentations


Ads by Google