Olympe Engine 2.0
2D Game Engine with ECS Architecture
Loading...
Searching...
No Matches
AI_Player.cpp
Go to the documentation of this file.
1#include "AI_Player.h"
2#include "GameObject.h"
3#include "ObjectFactory.h"
6#include <iostream>
7#include <cmath>
8#include "InputsManager.h"
9#include "VideoGame.h"
10#include "Player.h"
11#include "drawing.h"
12
13using namespace std;
16
19{
20 return new AI_Player();
21}
22
39{
40 ((Player*)gao)->m_PlayerID = ++VideoGame::m_playerIdCounter;
41 IM::Get().AddPlayerObjectIndex(((Player*)gao)->m_PlayerID, (Player*)gao);
42
43 IM::Get().AutoBindControllerToPlayer(((Player*)gao)->m_PlayerID); // ensure inputs are bound
44
45 if (IM::Get().IsPlayerBound(((Player*)gao)->m_PlayerID))
46 {
47 ((Player*)gao)->m_ControllerID = InputsManager::Get().GetPlayerBinding(((Player*)gao)->m_PlayerID);
48 SYSTEM_LOG << "AI_Player created with PlayerID=" << ((Player*)gao)->m_PlayerID << " bound to ControllerID=" << ((Player*)gao)->m_ControllerID << endl;
49 }
50 else
51 {
52 SYSTEM_LOG << "Error: AI_Player creation failed to bind any inputs for PlayerID=" << ((Player*)gao)->m_PlayerID << endl;
53 }
54}
55
57{
59 // Unregister all callbacks associated with this instance
61}
62
67
79
80
82{
83 std::lock_guard<std::mutex> lock(m_mutex);
84
85 float vx = 0.0f;
86 float vy = 0.0f;
87
88 // joystick axes take priority when outside deadzone
89 if (std::fabs(m_axisX) > m_deadzone) vx = m_axisX * m_speed;
90 else
91 {
92 if (m_keyLeft) vx = -m_speed;
94 }
95
96 if (std::fabs(m_axisY) > m_deadzone) vy = m_axisY * m_speed;
97 else
98 {
99 if (m_keyUp) vy = -m_speed;
100 if (m_keyDown) vy = m_keyDown ? m_speed : vy;
101 }
102 // position
103 Vector vtmp = gao->GetPosition() + Vector(vx * fDt, vy * fDt, 0.0f);
105// gao->position.x += vx * fDt;
106// gao->position.y += vy * fDt;
107
108}
109
111{
112 std::lock_guard<std::mutex> lock(m_mutex);
113
114 // is the deviceId matching our controller?
115 if (msg.deviceId != ((Player*)gao)->m_ControllerID)
116 return;
117
118 switch (msg.msg_type)
119 {
121 {
122 // controlId = axis index, value = normalized [-1..1]
123 if (msg.controlId == 0)
124 m_axisX = msg.param1;
125 else if (msg.controlId == 1)
126 m_axisY = msg.param1;
127 break;
128 }
129
132 {
133 // optionally map buttons to movement (e.g. dpad) if desired
134 // msg.controlId is button index, msg.state 1=down 0=up
135 // Not implemented here.
136 break;
137 }
138
140 {
141 // msg.controlId contains SDL_Scancode
142 switch (static_cast<SDL_Scancode>(msg.controlId))
143 {
144 case SDL_SCANCODE_Z:
145 case SDL_SCANCODE_UP:
146 m_keyUp = true; break;
147 case SDL_SCANCODE_S:
149 m_keyDown = true; break;
150 case SDL_SCANCODE_Q:
152 m_keyLeft = true; break;
153 case SDL_SCANCODE_D:
155 m_keyRight = true; break;
156 default:
157 break;
158 }
159 break;
160 }
161
163 {
164 switch (static_cast<SDL_Scancode>(msg.controlId))
165 {
166 case SDL_SCANCODE_W:
167 case SDL_SCANCODE_UP:
168 m_keyUp = false; break;
169 case SDL_SCANCODE_S:
171 m_keyDown = false; break;
172 case SDL_SCANCODE_A:
174 m_keyLeft = false; break;
175 case SDL_SCANCODE_D:
177 m_keyRight = false; break;
178 default:
179 break;
180 }
181 break;
182 }
184 {
185 SYSTEM_LOG << "AI_Player: Controller disconnected for GameObject: " << name << endl;
186 m_debugcolor = { 255, 0, 0, 255 };
187 // if our controller got disconnected, reset inputs
188 break;
189 }
191 {
192 SYSTEM_LOG << "AI_Player: Keyboard disconnected for GameObject: " << name << endl;
193 m_debugcolor = { 255, 0, 0, 255 };
194 // if our keyboard got disconnected, reset inputs
195 break;
196 }
198 {
199 SYSTEM_LOG << "AI_Player: Controller connected for GameObject: " << name << endl;
200 m_debugcolor = { 0, 250, 0, 255 };
201 break;
202 }
204 {
205 SYSTEM_LOG << "AI_Player: Keyboard connected for GameObject: " << name << endl;
206 m_debugcolor = { 0, 250, 0, 255 };
207 break;
208 }
209
210 default:
211 break;
212 }
213}
ComponentTypeID GetComponentTypeID_Static()
Definition ECS_Entity.h:56
virtual void SetOwner(Object *_owner) override
static ObjectComponent * Create(void)
Definition AI_Player.cpp:18
bool m_keyLeft
Definition AI_Player.h:38
virtual ~AI_Player() override
Definition AI_Player.cpp:56
float m_axisX
Definition AI_Player.h:34
virtual void Process() override
Definition AI_Player.cpp:81
std::mutex m_mutex
Definition AI_Player.h:42
virtual void OnEvent(const Message &msg) override
bool m_keyRight
Definition AI_Player.h:39
bool m_keyDown
Definition AI_Player.h:37
virtual void RenderDebug()
Definition AI_Player.cpp:68
float m_deadzone
Definition AI_Player.h:41
static bool FactoryRegistered
Definition AI_Player.h:13
bool m_keyUp
Definition AI_Player.h:36
float m_speed
Definition AI_Player.h:31
float m_axisY
Definition AI_Player.h:35
virtual void SetOwner(Object *_owner) override
Definition AI_Player.cpp:63
virtual void Initialize() override
Definition AI_Player.cpp:38
SDL_Color m_debugcolor
Definition AI_Player.h:29
Vector GetCameraPositionForActivePlayer(short playerID=0) const
static CameraManager & Get()
void Register(void *owner, EventType type, Listener callback)
static EventManager & Get()
void UnregisterAll(void *owner)
static SDL_Renderer * renderer
Main SDL renderer.
Definition GameEngine.h:129
SDL_FRect GetBoundingBox() const
Definition GameObject.h:64
Vector GetPosition() const
Definition GameObject.h:54
void SetPosition(Vector &_p)
Definition GameObject.h:48
static InputsManager & Get()
SDL_JoystickID GetPlayerBinding(short playerID) const
short AutoBindControllerToPlayer(short playerID)
static float & fDt
GameObject * gao
bool Register(const std::string &className, CreatorFunction creator)
Enregistre une fonction de cr�ation pour un nom de classe donn�.
static ObjectFactory & Get()
std::string name
Definition Object.h:45
static short m_playerIdCounter
Definition VideoGame.h:92
void Draw_FilledCircle(int cx, int cy, int radius)
Definition drawing.cpp:135
@ Olympe_EventType_Joystick_ButtonUp
@ Olympe_EventType_Joystick_ButtonDown
@ Olympe_EventType_Joystick_AxisMotion
@ Olympe_EventType_Keyboard_Connected
@ Olympe_EventType_Keyboard_Disconnected
@ Olympe_EventType_Keyboard_KeyDown
@ Olympe_EventType_Joystick_Connected
@ Olympe_EventType_Joystick_Disconnected
@ Olympe_EventType_Keyboard_KeyUp
#define SYSTEM_LOG