Fixes
This commit is contained in:
13
data/models/weapons/v_ump_handfinal256.bmp.mtl
Normal file
13
data/models/weapons/v_ump_handfinal256.bmp.mtl
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# Blender MTL File: 'None'
|
||||||
|
# Material Count: 1
|
||||||
|
|
||||||
|
newmtl graveyard_terrain
|
||||||
|
Ns 225.000000
|
||||||
|
Ka 1.000000 1.000000 1.000000
|
||||||
|
Kd 0.800000 0.800000 0.800000
|
||||||
|
Ks 0.500000 0.500000 0.500000
|
||||||
|
Ke 0.000000 0.000000 0.000000
|
||||||
|
Ni 1.450000
|
||||||
|
d 1.000000
|
||||||
|
illum 2
|
||||||
|
map_Kd data/textures/weapons/handfinal256.bmp
|
||||||
13
data/models/weapons/v_ump_ump.bmp.mtl
Normal file
13
data/models/weapons/v_ump_ump.bmp.mtl
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# Blender MTL File: 'None'
|
||||||
|
# Material Count: 1
|
||||||
|
|
||||||
|
newmtl graveyard_terrain
|
||||||
|
Ns 225.000000
|
||||||
|
Ka 1.000000 1.000000 1.000000
|
||||||
|
Kd 0.800000 0.800000 0.800000
|
||||||
|
Ks 0.500000 0.500000 0.500000
|
||||||
|
Ke 0.000000 0.000000 0.000000
|
||||||
|
Ni 1.450000
|
||||||
|
d 1.000000
|
||||||
|
illum 2
|
||||||
|
map_Kd data/textures/weapons/ump.bmp
|
||||||
13
data/models/weapons/v_ump_ump2.bmp.mtl
Normal file
13
data/models/weapons/v_ump_ump2.bmp.mtl
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# Blender MTL File: 'None'
|
||||||
|
# Material Count: 1
|
||||||
|
|
||||||
|
newmtl graveyard_terrain
|
||||||
|
Ns 225.000000
|
||||||
|
Ka 1.000000 1.000000 1.000000
|
||||||
|
Kd 0.800000 0.800000 0.800000
|
||||||
|
Ks 0.500000 0.500000 0.500000
|
||||||
|
Ke 0.000000 0.000000 0.000000
|
||||||
|
Ni 1.450000
|
||||||
|
d 1.000000
|
||||||
|
illum 2
|
||||||
|
map_Kd data/textures/weapons/ump2.bmp
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
-- игрок
|
-- игрок
|
||||||
actor_player = inherit_table(actor_base)
|
actor_player = inherit_table(actor_base)
|
||||||
|
|
||||||
|
actor_player.m_camera_offset_y = 0.5
|
||||||
|
|
||||||
function actor_player:on_init()
|
function actor_player:on_init()
|
||||||
actor_base.on_init(self)
|
actor_base.on_init(self)
|
||||||
|
|
||||||
@@ -35,14 +37,15 @@ function actor_player:on_update(dt)
|
|||||||
|
|
||||||
if self:get_action() == ACTION_FIRE and self.m_in_reload == false then
|
if self:get_action() == ACTION_FIRE and self.m_in_reload == false then
|
||||||
ent:play_animation(ent:find_animation("shoot1"), ANIM_PLAYBACK_NONE)
|
ent:play_animation(ent:find_animation("shoot1"), ANIM_PLAYBACK_NONE)
|
||||||
|
engine.play_sound("data/sounds/weapons/ump45_shoot.wav")
|
||||||
end
|
end
|
||||||
|
|
||||||
if self:get_action() == ACTION_RELOAD and self.m_in_reload == false then
|
if self:get_action() == ACTION_RELOAD and self.m_in_reload == false then
|
||||||
ent:play_animation(ent:find_animation("reload"), ANIM_PLAYBACK_NONE)
|
ent:play_animation(ent:find_animation("reload"), ANIM_PLAYBACK_NONE)
|
||||||
|
engine.play_sound("data/sounds/weapons/ump45_reload.wav")
|
||||||
self.m_in_reload = true
|
self.m_in_reload = true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
if ent:get_current_animation() == ent:find_animation("shoot1") and
|
if ent:get_current_animation() == ent:find_animation("shoot1") and
|
||||||
ent:get_current_animation_time() >= ent:get_animation_time(ent:find_animation("shoot1")) then
|
ent:get_current_animation_time() >= ent:get_animation_time(ent:find_animation("shoot1")) then
|
||||||
ent:play_animation(ent:find_animation("idle1"), ANIM_PLAYBACK_REPEAT)
|
ent:play_animation(ent:find_animation("idle1"), ANIM_PLAYBACK_REPEAT)
|
||||||
@@ -61,7 +64,3 @@ end
|
|||||||
function actor_player:on_collide(other)
|
function actor_player:on_collide(other)
|
||||||
console.print(string.format("actor_player:on_collide: %s", other:get_classname()))
|
console.print(string.format("actor_player:on_collide: %s", other:get_classname()))
|
||||||
end
|
end
|
||||||
|
|
||||||
function play_sound( filename, is_3d, posx, posy, posz )
|
|
||||||
-- body
|
|
||||||
end
|
|
||||||
|
|||||||
65
data/scripts/help.lua
Normal file
65
data/scripts/help.lua
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
Globals:
|
||||||
|
ACTION_FIRE = 0
|
||||||
|
ACTION_ALT_FIRE = 1
|
||||||
|
ACTION_RELOAD = 2
|
||||||
|
|
||||||
|
ANIM_PLAYBACK_NONE = 0
|
||||||
|
ANIM_PLAYBACK_REPEAT = 1
|
||||||
|
|
||||||
|
engine.error(string message)
|
||||||
|
engine.warning(string message)
|
||||||
|
engine.create_entity(string classname) -- return an table to the new entity
|
||||||
|
engine.add_entity_to_world(entity) -- add entity to the world
|
||||||
|
engine.get_entity_from_id(integer id) -- return an entity table from
|
||||||
|
engine.play_sound(string filename) -- play 2d sound
|
||||||
|
|
||||||
|
camera.get_position() -- return x, y, z
|
||||||
|
camera.get_front() -- return x, y, z
|
||||||
|
camera.get_right() -- return x, y, z
|
||||||
|
camera.get_up() -- return float
|
||||||
|
camera.get_pitch() -- return float
|
||||||
|
|
||||||
|
console.print(string message)
|
||||||
|
|
||||||
|
|
||||||
|
Entity properties:
|
||||||
|
string m_name
|
||||||
|
integer m_id
|
||||||
|
|
||||||
|
|
||||||
|
Entity methods:
|
||||||
|
load_model(string filename)
|
||||||
|
|
||||||
|
update_transform()
|
||||||
|
|
||||||
|
translate(float x, float y, float z) -- addition to the current position
|
||||||
|
|
||||||
|
set_position(float x, float y, float z) -- setting the position
|
||||||
|
|
||||||
|
get_position() -- return x, y, z
|
||||||
|
|
||||||
|
set_rotation(float x, float y, float z) -- setting the euler rotation
|
||||||
|
|
||||||
|
set_rotation_from_vectors(float frontx, float fronty, float frontz,
|
||||||
|
float rightx, float righty, float rightz,
|
||||||
|
float upx, float upy, float upz) -- rotate around axis
|
||||||
|
|
||||||
|
get_classname() -- return the classname of the entity
|
||||||
|
get_id() -- return the id of the entity
|
||||||
|
|
||||||
|
find_animation(string name) -- find a animation in the model
|
||||||
|
play_animation(integer id, integer mode) -- play a animation with specified mode (ANIM_PLAYBACK_NONE, ANIM_PLAYBACK_REPEAT)
|
||||||
|
get_current_animation() -- return the id to the current playing animation
|
||||||
|
get_current_animation_time() -- return the current time of the current playing animation
|
||||||
|
get_animation_time(integer id) -- return the time of a animation
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ActorBase methods:
|
||||||
|
activate_camera()
|
||||||
|
|
||||||
|
update_camera_look()
|
||||||
|
update_camera_movement(float nubmer)
|
||||||
|
create_body()
|
||||||
|
update_body_movement(float nubmer)
|
||||||
|
get_action() -- return an current mode (ACTION_FIRE, ACTION_ALT_FIRE, ACTION_RELOAD)
|
||||||
@@ -27,10 +27,9 @@ function test_object:set_relative_position_to_camera( ent )
|
|||||||
local rightX, rightY, rightZ = camera.get_right()
|
local rightX, rightY, rightZ = camera.get_right()
|
||||||
local upX, upY, upZ = camera.get_up()
|
local upX, upY, upZ = camera.get_up()
|
||||||
|
|
||||||
local yaw = camera.get_yaw()
|
self:set_rotation_from_vectors(frontX, frontY, frontZ,
|
||||||
local pitch = camera.get_pitch()
|
rightX, rightY, rightZ,
|
||||||
|
upX, upY, upZ)
|
||||||
self:set_rotation(pitch, -yaw, 0.0)
|
|
||||||
|
|
||||||
local offsetx = 0.0
|
local offsetx = 0.0
|
||||||
local offsety = 0.0
|
local offsety = 0.0
|
||||||
|
|||||||
BIN
data/sounds/weapons/ump45-1.wav
Normal file
BIN
data/sounds/weapons/ump45-1.wav
Normal file
Binary file not shown.
BIN
data/sounds/weapons/ump45_boltslap.wav
Normal file
BIN
data/sounds/weapons/ump45_boltslap.wav
Normal file
Binary file not shown.
BIN
data/sounds/weapons/ump45_clipin.wav
Normal file
BIN
data/sounds/weapons/ump45_clipin.wav
Normal file
Binary file not shown.
BIN
data/sounds/weapons/ump45_clipout.wav
Normal file
BIN
data/sounds/weapons/ump45_clipout.wav
Normal file
Binary file not shown.
BIN
data/sounds/weapons/ump45_reload.wav
Normal file
BIN
data/sounds/weapons/ump45_reload.wav
Normal file
Binary file not shown.
BIN
data/sounds/weapons/ump45_shoot.wav
Normal file
BIN
data/sounds/weapons/ump45_shoot.wav
Normal file
Binary file not shown.
BIN
data/textures/weapons/handfinal256.bmp
Normal file
BIN
data/textures/weapons/handfinal256.bmp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 256 KiB |
BIN
data/textures/weapons/ump.bmp
Normal file
BIN
data/textures/weapons/ump.bmp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 63 KiB |
BIN
data/textures/weapons/ump2.bmp
Normal file
BIN
data/textures/weapons/ump2.bmp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 63 KiB |
BIN
data/textures/weapons/v_m3.bmp
Normal file
BIN
data/textures/weapons/v_m3.bmp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 252 KiB |
BIN
data/textures/weapons/v_m32.BMP
Normal file
BIN
data/textures/weapons/v_m32.BMP
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.1 KiB |
@@ -28,7 +28,8 @@ void Camera::SetYawPitch(float yaw, float pitch)
|
|||||||
|
|
||||||
m_front = glm::normalize(m_direction);
|
m_front = glm::normalize(m_direction);
|
||||||
|
|
||||||
m_right = glm::normalize(glm::cross(m_front, m_up));
|
m_right = glm::normalize(glm::cross(m_front, glm::vec3(0.0f, 1.0f, 0.0f)));
|
||||||
|
m_up = glm::normalize(glm::cross(m_right, m_front));
|
||||||
}
|
}
|
||||||
|
|
||||||
glm::quat Camera::GetOrientation()
|
glm::quat Camera::GetOrientation()
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
#include "camera.h"
|
#include "camera.h"
|
||||||
#include "inputmanager.h"
|
#include "inputmanager.h"
|
||||||
#include "physics/physicsworld.h"
|
#include "physics/physicsworld.h"
|
||||||
|
#include "soundsystem.h"
|
||||||
|
|
||||||
// renderer
|
// renderer
|
||||||
#include "render.h"
|
#include "render.h"
|
||||||
@@ -117,6 +118,10 @@ void Engine::Init()
|
|||||||
|
|
||||||
g_entityManager->Init();
|
g_entityManager->Init();
|
||||||
|
|
||||||
|
// initialize sound system
|
||||||
|
|
||||||
|
g_soundSystem.Init();
|
||||||
|
|
||||||
// Initialize game
|
// Initialize game
|
||||||
g_game->Init();
|
g_game->Init();
|
||||||
|
|
||||||
@@ -135,6 +140,8 @@ void Engine::Shutdown()
|
|||||||
|
|
||||||
g_game->Shutdown();
|
g_game->Shutdown();
|
||||||
|
|
||||||
|
g_soundSystem.Shutdown();
|
||||||
|
|
||||||
g_entityManager->Shutdown();
|
g_entityManager->Shutdown();
|
||||||
|
|
||||||
if (g_render) {
|
if (g_render) {
|
||||||
|
|||||||
@@ -43,11 +43,13 @@ const glm::mat4& IEntityBase::GetWorldTransform()
|
|||||||
|
|
||||||
void IEntityBase::UpdateTransform()
|
void IEntityBase::UpdateTransform()
|
||||||
{
|
{
|
||||||
glm::vec3 radiansRotation = glm::vec3(glm::radians(m_rotation.x), glm::radians(m_rotation.y), glm::radians(m_rotation.z));
|
glm::vec3 radiansRotation = glm::radians(m_rotation);
|
||||||
glm::mat4 rotation = glm::toMat4(glm::quat(radiansRotation));
|
|
||||||
|
|
||||||
m_worldTM = glm::mat4(1.0f);
|
glm::mat4 T = glm::translate(glm::mat4(1.0f), m_position);
|
||||||
m_worldTM = glm::translate(m_worldTM, m_position) * rotation * glm::scale(m_worldTM, m_scale);
|
glm::mat4 R = glm::toMat4(glm::quat(radiansRotation));
|
||||||
|
glm::mat4 S = glm::scale(glm::mat4(1.0f), m_scale);
|
||||||
|
|
||||||
|
m_worldTM = T * R * S;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t IEntityBase::GetID()
|
uint32_t IEntityBase::GetID()
|
||||||
|
|||||||
@@ -7,12 +7,58 @@
|
|||||||
#include "entitymanager.h"
|
#include "entitymanager.h"
|
||||||
#include "world.h"
|
#include "world.h"
|
||||||
#include "game_object.h"
|
#include "game_object.h"
|
||||||
|
#include "soundsystem.h"
|
||||||
|
|
||||||
#include <pugixml.hpp>
|
#include <pugixml.hpp>
|
||||||
|
|
||||||
|
#include <map>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
static Game s_game;
|
static Game s_game;
|
||||||
Game* g_game = &s_game;
|
Game* g_game = &s_game;
|
||||||
|
|
||||||
|
class GameSoundSystem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static GameSoundSystem& GetInstance();
|
||||||
|
|
||||||
|
public:
|
||||||
|
void PlaySound2D(const std::string& filename);
|
||||||
|
void CacheSound(const std::string& filename);
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::map<std::string, SoundHandle> m_sounds;
|
||||||
|
};
|
||||||
|
|
||||||
|
GameSoundSystem& GameSoundSystem::GetInstance()
|
||||||
|
{
|
||||||
|
static GameSoundSystem inst;
|
||||||
|
return inst;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GameSoundSystem::PlaySound2D(const std::string& filename)
|
||||||
|
{
|
||||||
|
auto it = m_sounds.find(filename);
|
||||||
|
if (it == m_sounds.end())
|
||||||
|
{
|
||||||
|
CacheSound(filename);
|
||||||
|
it = m_sounds.find(filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_assert(it != m_sounds.end());
|
||||||
|
|
||||||
|
// .hack due unimplemented sound sources^
|
||||||
|
if (g_soundSystem.IsPlaying(it->second))
|
||||||
|
g_soundSystem.Stop(it->second);
|
||||||
|
|
||||||
|
g_soundSystem.Play(it->second, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GameSoundSystem::CacheSound(const std::string& filename)
|
||||||
|
{
|
||||||
|
m_sounds.emplace(filename, g_soundSystem.LoadSound(filename.c_str()));
|
||||||
|
}
|
||||||
|
|
||||||
void consoleMsg(const char* msg)
|
void consoleMsg(const char* msg)
|
||||||
{
|
{
|
||||||
Logger::Msg("%s", msg);
|
Logger::Msg("%s", msg);
|
||||||
@@ -28,6 +74,11 @@ void engineWarning(const char* msg)
|
|||||||
Core::Warning("%s", msg);
|
Core::Warning("%s", msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void enginePlaySound(const char* filename)
|
||||||
|
{
|
||||||
|
GameSoundSystem::GetInstance().PlaySound2D(filename);
|
||||||
|
}
|
||||||
|
|
||||||
LuaPlus::LuaObject engineCreateEntity(const char* classname)
|
LuaPlus::LuaObject engineCreateEntity(const char* classname)
|
||||||
{
|
{
|
||||||
Entity* entity = static_cast<Entity*>(g_game->Lua_CreateEntity(classname));
|
Entity* entity = static_cast<Entity*>(g_game->Lua_CreateEntity(classname));
|
||||||
@@ -151,6 +202,7 @@ void registerEngine()
|
|||||||
engineTable.RegisterDirect("create_entity", &engineCreateEntity);
|
engineTable.RegisterDirect("create_entity", &engineCreateEntity);
|
||||||
engineTable.RegisterDirect("add_entity_to_world", &engineAddEntityToWorld);
|
engineTable.RegisterDirect("add_entity_to_world", &engineAddEntityToWorld);
|
||||||
engineTable.RegisterDirect("get_entity_from_id", &engineGetEntityFromID);
|
engineTable.RegisterDirect("get_entity_from_id", &engineGetEntityFromID);
|
||||||
|
engineTable.RegisterDirect("play_sound", &enginePlaySound);
|
||||||
|
|
||||||
LuaObject consoleTable = GetLuaState().GetGlobals().CreateTable("console");
|
LuaObject consoleTable = GetLuaState().GetGlobals().CreateTable("console");
|
||||||
consoleTable.RegisterDirect("print", &consoleMsg);
|
consoleTable.RegisterDirect("print", &consoleMsg);
|
||||||
|
|||||||
@@ -236,6 +236,7 @@ void Entity::RegisterBaseFunctions()
|
|||||||
m_luaObject.Register("set_position", *this, &Entity::Lua_SetPosition);
|
m_luaObject.Register("set_position", *this, &Entity::Lua_SetPosition);
|
||||||
m_luaObject.Register("get_position", *this, &Entity::Lua_GetPosition);
|
m_luaObject.Register("get_position", *this, &Entity::Lua_GetPosition);
|
||||||
m_luaObject.Register("set_rotation", *this, &Entity::Lua_SetRotation);
|
m_luaObject.Register("set_rotation", *this, &Entity::Lua_SetRotation);
|
||||||
|
m_luaObject.Register("set_rotation_from_vectors", *this, &Entity::Lua_SetRotationFromVectors);
|
||||||
m_luaObject.Register("get_classname", *this, &Entity::Lua_GetClassname);
|
m_luaObject.Register("get_classname", *this, &Entity::Lua_GetClassname);
|
||||||
m_luaObject.Register("get_id", *this, &Entity::Lua_GetID);
|
m_luaObject.Register("get_id", *this, &Entity::Lua_GetID);
|
||||||
|
|
||||||
@@ -282,6 +283,22 @@ void Entity::Help_SetRotation(float x, float y, float z)
|
|||||||
m_rotation.z = z;
|
m_rotation.z = z;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Entity::Help_SetRotationFromVectors(const glm::vec3& front, const glm::vec3& right, const glm::vec3& up)
|
||||||
|
{
|
||||||
|
glm::mat3 rot;
|
||||||
|
|
||||||
|
rot[0] = right;
|
||||||
|
rot[1] = up;
|
||||||
|
rot[2] = -front;
|
||||||
|
|
||||||
|
glm::quat q = glm::quat_cast(rot);
|
||||||
|
|
||||||
|
glm::quat fix = glm::angleAxis(glm::radians(90.0f), glm::vec3(0, 1, 0));
|
||||||
|
q = q * fix;
|
||||||
|
|
||||||
|
m_rotation = glm::degrees(glm::eulerAngles(q));
|
||||||
|
}
|
||||||
|
|
||||||
int Entity::Lua_LoadModel(LuaPlus::LuaState* state)
|
int Entity::Lua_LoadModel(LuaPlus::LuaState* state)
|
||||||
{
|
{
|
||||||
LuaPlus::LuaStack stack(state);
|
LuaPlus::LuaStack stack(state);
|
||||||
@@ -345,6 +362,30 @@ int Entity::Lua_SetRotation(LuaPlus::LuaState* state)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Entity::Lua_SetRotationFromVectors(LuaPlus::LuaState* state)
|
||||||
|
{
|
||||||
|
LuaPlus::LuaStack stack(state);
|
||||||
|
|
||||||
|
glm::vec3 front(
|
||||||
|
stack[2].GetNumber(),
|
||||||
|
stack[3].GetNumber(),
|
||||||
|
stack[4].GetNumber());
|
||||||
|
|
||||||
|
glm::vec3 right(
|
||||||
|
stack[5].GetNumber(),
|
||||||
|
stack[6].GetNumber(),
|
||||||
|
stack[7].GetNumber());
|
||||||
|
|
||||||
|
glm::vec3 up(
|
||||||
|
stack[8].GetNumber(),
|
||||||
|
stack[9].GetNumber(),
|
||||||
|
stack[10].GetNumber());
|
||||||
|
|
||||||
|
Help_SetRotationFromVectors(front, right, up);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int Entity::Lua_GetClassname(LuaPlus::LuaState* state)
|
int Entity::Lua_GetClassname(LuaPlus::LuaState* state)
|
||||||
{
|
{
|
||||||
state->PushString(GetClassname());
|
state->PushString(GetClassname());
|
||||||
@@ -525,7 +566,17 @@ void ActorBase::AfterEngineStep()
|
|||||||
//m_position = btVectorToGlm(xform.getOrigin());
|
//m_position = btVectorToGlm(xform.getOrigin());
|
||||||
|
|
||||||
m_position = btVectorToGlm(m_ph_motion_state.m_transform.getOrigin());
|
m_position = btVectorToGlm(m_ph_motion_state.m_transform.getOrigin());
|
||||||
m_camera.SetPosition(m_position);
|
|
||||||
|
glm::vec3 cameraPos = m_position;
|
||||||
|
|
||||||
|
if (m_luaObject.IsTable())
|
||||||
|
{
|
||||||
|
LuaPlus::LuaObject m_camera_offset_y = m_luaObject.GetByName("m_camera_offset_y");
|
||||||
|
if (m_camera_offset_y.IsNumber())
|
||||||
|
cameraPos.y += m_camera_offset_y.ToNumber();
|
||||||
|
}
|
||||||
|
|
||||||
|
m_camera.SetPosition(cameraPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ActorBase::UpdateCameraMovement(float dt)
|
void ActorBase::UpdateCameraMovement(float dt)
|
||||||
|
|||||||
@@ -96,12 +96,14 @@ public:
|
|||||||
void Help_Translate(float x, float y, float z);
|
void Help_Translate(float x, float y, float z);
|
||||||
void Help_SetPosition(float x, float y, float z);
|
void Help_SetPosition(float x, float y, float z);
|
||||||
void Help_SetRotation(float x, float y, float z);
|
void Help_SetRotation(float x, float y, float z);
|
||||||
|
void Help_SetRotationFromVectors(const glm::vec3& front, const glm::vec3& right, const glm::vec3& up);
|
||||||
|
|
||||||
int Lua_LoadModel(LuaPlus::LuaState* state);
|
int Lua_LoadModel(LuaPlus::LuaState* state);
|
||||||
int Lua_Translate(LuaPlus::LuaState* state);
|
int Lua_Translate(LuaPlus::LuaState* state);
|
||||||
int Lua_SetPosition(LuaPlus::LuaState* state);
|
int Lua_SetPosition(LuaPlus::LuaState* state);
|
||||||
int Lua_GetPosition(LuaPlus::LuaState* state);
|
int Lua_GetPosition(LuaPlus::LuaState* state);
|
||||||
int Lua_SetRotation(LuaPlus::LuaState* state);
|
int Lua_SetRotation(LuaPlus::LuaState* state);
|
||||||
|
int Lua_SetRotationFromVectors(LuaPlus::LuaState* state);
|
||||||
int Lua_GetClassname(LuaPlus::LuaState* state);
|
int Lua_GetClassname(LuaPlus::LuaState* state);
|
||||||
int Lua_GetID(LuaPlus::LuaState* state);
|
int Lua_GetID(LuaPlus::LuaState* state);
|
||||||
int Lua_UpdateTransform(LuaPlus::LuaState* state);
|
int Lua_UpdateTransform(LuaPlus::LuaState* state);
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ static std::string getFileNameWithoutExtension(const std::string& filename)
|
|||||||
|
|
||||||
Model::Model()
|
Model::Model()
|
||||||
{
|
{
|
||||||
m_AlbedoTexture = nullptr;
|
|
||||||
m_numPoses = 0;
|
m_numPoses = 0;
|
||||||
|
|
||||||
//m_boundingBox.min = glm::vec3(0.0f);
|
//m_boundingBox.min = glm::vec3(0.0f);
|
||||||
@@ -39,7 +38,6 @@ Model::Model()
|
|||||||
|
|
||||||
Model::~Model()
|
Model::~Model()
|
||||||
{
|
{
|
||||||
m_AlbedoTexture = nullptr;
|
|
||||||
|
|
||||||
for (int i = 0; i < m_meshes.size(); i++)
|
for (int i = 0; i < m_meshes.size(); i++)
|
||||||
ReleaseModelData(m_meshes[i]);
|
ReleaseModelData(m_meshes[i]);
|
||||||
@@ -268,6 +266,8 @@ void Model::LoadIqm(const char* filename)
|
|||||||
indices[j * 3 + 2] = a - pMesh->first_vertex;
|
indices[j * 3 + 2] = a - pMesh->first_vertex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char* pMaterialname = nullptr;
|
||||||
|
|
||||||
if (pHdr->ofs_text)
|
if (pHdr->ofs_text)
|
||||||
{
|
{
|
||||||
// #TODO: weird weird getting material name string is so wrong
|
// #TODO: weird weird getting material name string is so wrong
|
||||||
@@ -275,8 +275,9 @@ void Model::LoadIqm(const char* filename)
|
|||||||
const char* str = (char*)pHdr + pHdr->ofs_text;
|
const char* str = (char*)pHdr + pHdr->ofs_text;
|
||||||
const char* materialname = &str[pMesh->material];
|
const char* materialname = &str[pMesh->material];
|
||||||
|
|
||||||
//if (materialname)
|
if (materialname)
|
||||||
// pMaterial = g_materialSystem.LoadMaterial(materialname);
|
pMaterialname = materialname;
|
||||||
|
//pMaterial = g_materialSystem.LoadMaterial(materialname);
|
||||||
}
|
}
|
||||||
|
|
||||||
ModelData_t mesh = {};
|
ModelData_t mesh = {};
|
||||||
@@ -286,6 +287,14 @@ void Model::LoadIqm(const char* filename)
|
|||||||
mesh.vbcount = pMesh->num_vertexes;
|
mesh.vbcount = pMesh->num_vertexes;
|
||||||
mesh.ib = g_renderDevice->CreateIndexBuffer(indices.data(), pMesh->num_triangles * sizeof(iqmtriangle), false);
|
mesh.ib = g_renderDevice->CreateIndexBuffer(indices.data(), pMesh->num_triangles * sizeof(iqmtriangle), false);
|
||||||
mesh.ibcount = pMesh->num_triangles * 3;
|
mesh.ibcount = pMesh->num_triangles * 3;
|
||||||
|
|
||||||
|
|
||||||
|
std::string mtlfilename = getFileNameWithoutExtension(filename);
|
||||||
|
mtlfilename += "_";
|
||||||
|
mtlfilename += pMaterialname;
|
||||||
|
mtlfilename += ".mtl";
|
||||||
|
mesh.m_AlbedoTexture = LoadMtl(mtlfilename.c_str());
|
||||||
|
|
||||||
//mesh.m_material = pMaterial;
|
//mesh.m_material = pMaterial;
|
||||||
//
|
//
|
||||||
//if (!mesh.m_material)
|
//if (!mesh.m_material)
|
||||||
@@ -549,17 +558,19 @@ void Model::LoadObj(const char* filename)
|
|||||||
|
|
||||||
std::string mtlfilename = getFileNameWithoutExtension(filename);
|
std::string mtlfilename = getFileNameWithoutExtension(filename);
|
||||||
mtlfilename += ".mtl";
|
mtlfilename += ".mtl";
|
||||||
LoadMtl(mtlfilename.c_str());
|
m_data.m_AlbedoTexture = LoadMtl(mtlfilename.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Model::LoadMtl(const char* filename)
|
Texture2D* Model::LoadMtl(const char* filename)
|
||||||
{
|
{
|
||||||
Msg("Loading MTL file %s...", filename);
|
Msg("Loading MTL file %s...", filename);
|
||||||
|
|
||||||
|
Texture2D* pAlbedo = nullptr;
|
||||||
|
|
||||||
FILE* file = fopen(filename, "r");
|
FILE* file = fopen(filename, "r");
|
||||||
if (file == NULL) {
|
if (file == NULL) {
|
||||||
Msg("Model::LoadObj: Impossible to open the file !");
|
Msg("Model::LoadMtl: Impossible to open the file !");
|
||||||
return;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
@@ -575,7 +586,7 @@ void Model::LoadMtl(const char* filename)
|
|||||||
fgets(stupidBuffer, 1000, file);
|
fgets(stupidBuffer, 1000, file);
|
||||||
|
|
||||||
const char* textureFilename = stupidBuffer + 1;
|
const char* textureFilename = stupidBuffer + 1;
|
||||||
m_AlbedoTexture = g_texturesManager->LoadTexture2D(textureFilename, true);
|
pAlbedo = g_texturesManager->LoadTexture2D(textureFilename, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
//if (strcmp(lineHeader, "v") == 0) {
|
//if (strcmp(lineHeader, "v") == 0) {
|
||||||
@@ -592,6 +603,8 @@ void Model::LoadMtl(const char* filename)
|
|||||||
}
|
}
|
||||||
|
|
||||||
fclose(file);
|
fclose(file);
|
||||||
|
|
||||||
|
return pAlbedo;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Model::Draw(const glm::mat4& model, SkeletonInstance* instance /*= nullptr*/)
|
void Model::Draw(const glm::mat4& model, SkeletonInstance* instance /*= nullptr*/)
|
||||||
@@ -644,10 +657,10 @@ void Model::Draw(const glm::mat4& model, SkeletonInstance* instance /*= nullptr*
|
|||||||
g_shaderSystem->SetUniformMatrix(shader, UNIFORM_MVP_MATRIX, &mvp[0]);
|
g_shaderSystem->SetUniformMatrix(shader, UNIFORM_MVP_MATRIX, &mvp[0]);
|
||||||
|
|
||||||
|
|
||||||
if (!m_AlbedoTexture)
|
if (!m_data.m_AlbedoTexture)
|
||||||
m_AlbedoTexture = g_texturesManager->LoadTexture2D("asdfasdf");
|
m_data.m_AlbedoTexture = g_texturesManager->LoadTexture2D("MustBeEvilHackButDontCare");
|
||||||
|
|
||||||
g_texturesManager->SetTexture(0, m_AlbedoTexture);
|
g_texturesManager->SetTexture(0, m_data.m_AlbedoTexture);
|
||||||
g_shaderSystem->SetUniformSampler(shader, SAMPLER_ALBEDO, 0);
|
g_shaderSystem->SetUniformSampler(shader, SAMPLER_ALBEDO, 0);
|
||||||
|
|
||||||
if (instance)
|
if (instance)
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ class Texture2D;
|
|||||||
|
|
||||||
struct ModelData_t
|
struct ModelData_t
|
||||||
{
|
{
|
||||||
|
Texture2D* m_AlbedoTexture;
|
||||||
GPUBuffer* vb;
|
GPUBuffer* vb;
|
||||||
GPUBuffer* ib;
|
GPUBuffer* ib;
|
||||||
uint32_t vbcount;
|
uint32_t vbcount;
|
||||||
@@ -34,7 +35,7 @@ public:
|
|||||||
|
|
||||||
void LoadIqm(const char* filename);
|
void LoadIqm(const char* filename);
|
||||||
void LoadObj(const char* filename);
|
void LoadObj(const char* filename);
|
||||||
void LoadMtl(const char* filename);
|
Texture2D* LoadMtl(const char* filename);
|
||||||
|
|
||||||
void Draw(const glm::mat4& model, SkeletonInstance* instance = nullptr);
|
void Draw(const glm::mat4& model, SkeletonInstance* instance = nullptr);
|
||||||
|
|
||||||
@@ -69,7 +70,6 @@ private:
|
|||||||
std::vector<ModelData_t> m_meshes;
|
std::vector<ModelData_t> m_meshes;
|
||||||
|
|
||||||
BoundingBox m_boundingBox;
|
BoundingBox m_boundingBox;
|
||||||
Texture2D* m_AlbedoTexture;
|
|
||||||
|
|
||||||
int m_numPoses;
|
int m_numPoses;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user