-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathphysObj.h
57 lines (43 loc) · 1.47 KB
/
physObj.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/*
* ôèçè÷åñêàÿ ñóùíîñòü
* îáúåêò èãðîâîãî ìèðà, íà êîòîðûé
* âîçäåéñòâóþò ôèçè÷åñêèå ñèëû
*/
#pragma once
#include "list.h"
#include "level.h"
#define PHYSOBJ_NO_COLLISION 0
#define PHYSOBJ_COLLISION_WITH_LEVEL 1
#define PHYSOBJ_COLLISION_WITH_ALL 2
typedef struct
{
/* ïîçèöèÿ è ïîçèöèÿ öåíòðà */
SVector2f pos;
SVector2f center;
/* ðàçìåðû */
ubyte w, h;
ubyte halfW, halfH;
/* äâèæåíèå */
SVector2f impulse;
/* ñ ÷åì ìîæåò ñòàëêèâàòüñÿ */
ubyte collisionFlag;
float friction;
bool isGrounded;
} SPhysObject;
/* íàáîð âñåõ ôèçè÷åñêèõ òåë â èãðå */
SList* physObjects;
SPhysObject* PhysObjectCreate (float x, float y, ubyte w, ubyte h, ubyte collisionFlag);
void PhysObjectDestroy (SPhysObject** physObject);
void PhysObjectClearAll ();
void PhysObjectUpdateState (SPhysObject* physObject);
/* îáðàáîòêà ôèçèêè è äâèæåíèÿ */
void PhysObjectAddImpulse (SPhysObject* physObject, float x, float y);
void PhysObjectUpdatePhysics (SPhysObject* physObject);
bool PhysObjectContainsPoint (SPhysObject* physObject, float x, float y);
bool PhysObjectIsCollisionPhysObject (SPhysObject* o1, SPhysObject* o2);
bool PhysObjectIsCollisionLevelObject (SPhysObject* o1, SLevelObject* l2);
void PhysObjectsUpdate();
bool IsPlaceFree (float x, float y,
bool checkAll,
SLevelObject** obstacleLevelObject,
SPhysObject** obstaclePhysObject);