mirror of
https://github.com/TombEngine/TombEngine.git
synced 2025-05-12 05:26:57 +03:00
lua-functions-moved-to-lara-class (#853)
* lua-functions-moved-to-lara-class "AttachObjCamera" "ResetObjCamera" "UndrawWeapons" "ThrowAwayTorch" "GetLaraHandStatus" "GetLaraWeaponType" "SetLaraWeaponType" "AnimFromObject" * Small fix for documentation comments * fixed formatting errors * fixed Obj active check with AttachObjCamera * Simplify MoveObjCamera code a bit Co-authored-by: Lwmte <3331699+Lwmte@users.noreply.github.com>
This commit is contained in:
parent
458092db6e
commit
1201bfa92a
9 changed files with 292 additions and 2 deletions
|
@ -59,6 +59,7 @@ GameVector LookCamPosition;
|
||||||
GameVector LookCamTarget;
|
GameVector LookCamTarget;
|
||||||
Vector3i CamOldPos;
|
Vector3i CamOldPos;
|
||||||
CAMERA_INFO Camera;
|
CAMERA_INFO Camera;
|
||||||
|
OBJ_CAMERA_INFO ItemCamera;
|
||||||
GameVector ForcedFixedCamera;
|
GameVector ForcedFixedCamera;
|
||||||
int UseForcedFixedCamera;
|
int UseForcedFixedCamera;
|
||||||
|
|
||||||
|
@ -324,6 +325,99 @@ void MoveCamera(GameVector* ideal, int speed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ObjCamera(ItemInfo* camSlotId, int camMeshId, ItemInfo* targetItem, int targetMeshId, bool cond)
|
||||||
|
{
|
||||||
|
//camSlotId and targetItem stay the same object until I know how to expand targetItem to another object.
|
||||||
|
//activates code below -> void CalculateCamera().
|
||||||
|
ItemCamera.ItemCameraOn = cond;
|
||||||
|
|
||||||
|
UpdateCameraElevation();
|
||||||
|
|
||||||
|
//get mesh 0 coordinates.
|
||||||
|
auto pos = GetJointPosition(camSlotId, 0, Vector3i::Zero);
|
||||||
|
auto dest = Vector3(pos.x, pos.y, pos.z);
|
||||||
|
|
||||||
|
GameVector from = GameVector(dest, camSlotId->RoomNumber);
|
||||||
|
Camera.fixedCamera = true;
|
||||||
|
|
||||||
|
MoveObjCamera(&from, camSlotId, camMeshId, targetItem, targetMeshId);
|
||||||
|
Camera.timer = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void MoveObjCamera(GameVector* ideal, ItemInfo* camSlotId, int camMeshId, ItemInfo* targetItem, int targetMeshId)
|
||||||
|
{
|
||||||
|
int speed = 1;
|
||||||
|
//Get mesh1 to attach camera to
|
||||||
|
//Vector3i pos = Vector3i::Zero;
|
||||||
|
auto pos = GetJointPosition(camSlotId, camMeshId, Vector3i::Zero);
|
||||||
|
//Get mesh2 to attach target to
|
||||||
|
//Vector3i pos2 = Vector3i::Zero;
|
||||||
|
auto pos2 = GetJointPosition(targetItem, targetMeshId, Vector3i::Zero);
|
||||||
|
|
||||||
|
if (OldCam.pos.Position != pos ||
|
||||||
|
OldCam.targetDistance != Camera.targetDistance ||
|
||||||
|
OldCam.targetElevation != Camera.targetElevation ||
|
||||||
|
OldCam.actualElevation != Camera.actualElevation ||
|
||||||
|
OldCam.actualAngle != Camera.actualAngle ||
|
||||||
|
OldCam.target != Camera.target.ToVector3i() ||
|
||||||
|
Camera.oldType != Camera.type ||
|
||||||
|
BinocularOn)
|
||||||
|
{
|
||||||
|
OldCam.pos.Position = pos;
|
||||||
|
OldCam.targetDistance = Camera.targetDistance;
|
||||||
|
OldCam.targetElevation = Camera.targetElevation;
|
||||||
|
OldCam.actualElevation = Camera.actualElevation;
|
||||||
|
OldCam.actualAngle = Camera.actualAngle;
|
||||||
|
OldCam.target = Camera.target.ToVector3i();
|
||||||
|
LastIdeal = pos;
|
||||||
|
LastIdeal.RoomNumber = ideal->RoomNumber;
|
||||||
|
LastTarget = pos2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pos = LastIdeal.ToVector3i();
|
||||||
|
pos2 = LastTarget.ToVector3i();
|
||||||
|
ideal->RoomNumber = LastIdeal.RoomNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
Camera.pos += (ideal->ToVector3i() - Camera.pos.ToVector3i()) / speed;
|
||||||
|
Camera.pos.RoomNumber = GetCollision(Camera.pos.x, Camera.pos.y, Camera.pos.z, Camera.pos.RoomNumber).RoomNumber;
|
||||||
|
LookAt(&Camera, 0);
|
||||||
|
|
||||||
|
auto angle = Camera.target.ToVector3i() - Camera.pos.ToVector3i();
|
||||||
|
auto position = Vector3i(Camera.target.ToVector3i() - Camera.pos.ToVector3i());
|
||||||
|
|
||||||
|
// write last frame camera angle to LastAngle to compare if next frame camera angle has a bigger step than 100.
|
||||||
|
// To make camera movement smoother a speed of 2 is used.
|
||||||
|
// While for big camera angle steps (cuts) -
|
||||||
|
// the speed is set to 1 to make the cut immediatelly.
|
||||||
|
constexpr int angleThresholdDegrees = 100;
|
||||||
|
|
||||||
|
if (LastTarget.x - Camera.target.x > angleThresholdDegrees ||
|
||||||
|
LastTarget.y - Camera.target.y > angleThresholdDegrees ||
|
||||||
|
LastTarget.z - Camera.target.z > angleThresholdDegrees)
|
||||||
|
{
|
||||||
|
speed = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
speed = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
//actual movement of the target.
|
||||||
|
Camera.target.x += (pos2.x - Camera.target.x) / speed;
|
||||||
|
Camera.target.y += (pos2.y - Camera.target.y) / speed;
|
||||||
|
Camera.target.z += (pos2.z - Camera.target.z) / speed;
|
||||||
|
|
||||||
|
if (ItemCamera.LastAngle != position)
|
||||||
|
{
|
||||||
|
ItemCamera.LastAngle = Vector3i(ItemCamera.LastAngle.x = angle.x,
|
||||||
|
ItemCamera.LastAngle.y = angle.y,
|
||||||
|
ItemCamera.LastAngle.z = angle.z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ChaseCamera(ItemInfo* item)
|
void ChaseCamera(ItemInfo* item)
|
||||||
{
|
{
|
||||||
if (!Camera.targetElevation)
|
if (!Camera.targetElevation)
|
||||||
|
@ -1262,6 +1356,11 @@ void CalculateCamera()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ItemCamera.ItemCameraOn)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (UseForcedFixedCamera != 0)
|
if (UseForcedFixedCamera != 0)
|
||||||
{
|
{
|
||||||
Camera.type = CameraType::Fixed;
|
Camera.type = CameraType::Fixed;
|
||||||
|
|
|
@ -8,7 +8,8 @@ enum class CameraType
|
||||||
Fixed,
|
Fixed,
|
||||||
Look,
|
Look,
|
||||||
Combat,
|
Combat,
|
||||||
Heavy
|
Heavy,
|
||||||
|
Object
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CAMERA_INFO
|
struct CAMERA_INFO
|
||||||
|
@ -41,6 +42,12 @@ struct CAMERA_INFO
|
||||||
Vector3i mikePos; // size=12, offset=108
|
Vector3i mikePos; // size=12, offset=108
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct OBJ_CAMERA_INFO
|
||||||
|
{
|
||||||
|
GameVector LastAngle;
|
||||||
|
bool ItemCameraOn;
|
||||||
|
};
|
||||||
|
|
||||||
enum CAMERA_FLAGS
|
enum CAMERA_FLAGS
|
||||||
{
|
{
|
||||||
CF_NONE = 0,
|
CF_NONE = 0,
|
||||||
|
@ -93,6 +100,8 @@ void RumbleScreen();
|
||||||
bool TestBoundsCollideCamera(const GameBoundingBox& bounds, const Pose& pose, short radius);
|
bool TestBoundsCollideCamera(const GameBoundingBox& bounds, const Pose& pose, short radius);
|
||||||
void ItemPushCamera(GameBoundingBox* bounds, Pose* pos, short radius);
|
void ItemPushCamera(GameBoundingBox* bounds, Pose* pos, short radius);
|
||||||
void ItemsCollideCamera();
|
void ItemsCollideCamera();
|
||||||
|
void ObjCamera(ItemInfo* camSlotId, int camMeshID, ItemInfo* targetItem, int targetMeshID, bool cond);
|
||||||
|
void MoveObjCamera(GameVector* ideal, ItemInfo* camSlotId, int camMeshID, ItemInfo* targetItem, int targetMeshID);
|
||||||
|
|
||||||
void SetScreenFadeOut(float speed);
|
void SetScreenFadeOut(float speed);
|
||||||
void SetScreenFadeIn(float speed);
|
void SetScreenFadeIn(float speed);
|
||||||
|
|
|
@ -102,6 +102,8 @@ static constexpr char ScriptReserved_SetOnCollidedWithObject[] = "SetOnCollidedW
|
||||||
static constexpr char ScriptReserved_GetOnCollidedWithRoom[] = "GetOnCollidedWithRoom";
|
static constexpr char ScriptReserved_GetOnCollidedWithRoom[] = "GetOnCollidedWithRoom";
|
||||||
static constexpr char ScriptReserved_SetOnCollidedWithRoom[] = "SetOnCollidedWithRoom";
|
static constexpr char ScriptReserved_SetOnCollidedWithRoom[] = "SetOnCollidedWithRoom";
|
||||||
static constexpr char ScriptReserved_ToLength[] = "ToLength";
|
static constexpr char ScriptReserved_ToLength[] = "ToLength";
|
||||||
|
static constexpr char ScriptReserved_AttachObjCamera[] = "AttachObjCamera";
|
||||||
|
static constexpr char ScriptReserved_AnimFromObject[] = "AnimFromObject";
|
||||||
|
|
||||||
// Flow Functions
|
// Flow Functions
|
||||||
static constexpr char ScriptReserved_AddLevel[] = "AddLevel";
|
static constexpr char ScriptReserved_AddLevel[] = "AddLevel";
|
||||||
|
@ -131,6 +133,8 @@ static constexpr char ScriptReserved_RotationAxis[] = "RotationAxis";
|
||||||
static constexpr char ScriptReserved_ItemAction[] = "ItemAction";
|
static constexpr char ScriptReserved_ItemAction[] = "ItemAction";
|
||||||
static constexpr char ScriptReserved_ErrorMode[] = "ErrorMode";
|
static constexpr char ScriptReserved_ErrorMode[] = "ErrorMode";
|
||||||
static constexpr char ScriptReserved_InventoryItem[] = "InventoryItem";
|
static constexpr char ScriptReserved_InventoryItem[] = "InventoryItem";
|
||||||
|
static constexpr char ScriptReserved_LaraWeaponType[] = "LaraWeaponType";
|
||||||
|
static constexpr char ScriptReserved_HandStatus[] = "HandStatus";
|
||||||
|
|
||||||
// Functions
|
// Functions
|
||||||
static constexpr char ScriptReserved_ShowString[] = "ShowString";
|
static constexpr char ScriptReserved_ShowString[] = "ShowString";
|
||||||
|
@ -186,6 +190,13 @@ static constexpr char ScriptReserved_KeyClear[] = "KeyClear";
|
||||||
static constexpr char ScriptReserved_FlipMap[] = "FlipMap";
|
static constexpr char ScriptReserved_FlipMap[] = "FlipMap";
|
||||||
static constexpr char ScriptReserved_PlayFlyBy[] = "PlayFlyBy";
|
static constexpr char ScriptReserved_PlayFlyBy[] = "PlayFlyBy";
|
||||||
|
|
||||||
|
static constexpr char ScriptReserved_ResetObjCamera[] = "ResetObjCamera";
|
||||||
|
static constexpr char ScriptReserved_UndrawWeapons[] = "UndrawWeapons";
|
||||||
|
static constexpr char ScriptReserved_GetHandStatus[] = "GetHandStatus";
|
||||||
|
static constexpr char ScriptReserved_GetWeaponType[] = "GetWeaponType";
|
||||||
|
static constexpr char ScriptReserved_ThrowAwayTorch[] = "ThrowAwayTorch";
|
||||||
|
static constexpr char ScriptReserved_SetWeaponType[] = "SetWeaponType";
|
||||||
|
|
||||||
// Enums
|
// Enums
|
||||||
static constexpr char ScriptReserved_ObjID[] = "ObjID";
|
static constexpr char ScriptReserved_ObjID[] = "ObjID";
|
||||||
static constexpr char ScriptReserved_BlendID[] = "BlendID";
|
static constexpr char ScriptReserved_BlendID[] = "BlendID";
|
||||||
|
|
|
@ -6,12 +6,14 @@
|
||||||
#include "Game/effects/explosion.h"
|
#include "Game/effects/explosion.h"
|
||||||
#include "Game/effects/tomb4fx.h"
|
#include "Game/effects/tomb4fx.h"
|
||||||
#include "Game/effects/weather.h"
|
#include "Game/effects/weather.h"
|
||||||
|
#include "Game/Lara/lara.h"
|
||||||
#include "Game/room.h"
|
#include "Game/room.h"
|
||||||
#include "Game/spotcam.h"
|
#include "Game/spotcam.h"
|
||||||
#include "ReservedScriptNames.h"
|
#include "ReservedScriptNames.h"
|
||||||
#include "ScriptUtil.h"
|
#include "ScriptUtil.h"
|
||||||
#include "Sound/sound.h"
|
#include "Sound/sound.h"
|
||||||
#include "Specific/configuration.h"
|
#include "Specific/configuration.h"
|
||||||
|
#include "Specific/level.h"
|
||||||
#include "Specific/Input/Input.h"
|
#include "Specific/Input/Input.h"
|
||||||
#include "Vec3/Vec3.h"
|
#include "Vec3/Vec3.h"
|
||||||
#include "ScriptAssert.h"
|
#include "ScriptAssert.h"
|
||||||
|
@ -286,6 +288,13 @@ namespace Misc
|
||||||
return std::make_tuple(resX, resY);
|
return std::make_tuple(resX, resY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Reset object camera back to Lara and deactivate object camera.
|
||||||
|
//@function ResetObjCamera
|
||||||
|
static void ResetObjCamera()
|
||||||
|
{
|
||||||
|
ObjCamera(LaraItem, 0, LaraItem, 0, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Register(sol::state * state, sol::table & parent) {
|
void Register(sol::state * state, sol::table & parent) {
|
||||||
sol::table table_misc{ state->lua_state(), sol::create };
|
sol::table table_misc{ state->lua_state(), sol::create };
|
||||||
|
@ -346,5 +355,6 @@ namespace Misc
|
||||||
|
|
||||||
table_misc.set_function(ScriptReserved_PlayFlyBy, &PlayFlyBy);
|
table_misc.set_function(ScriptReserved_PlayFlyBy, &PlayFlyBy);
|
||||||
|
|
||||||
|
table_misc.set_function(ScriptReserved_ResetObjCamera, &ResetObjCamera);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
#include "framework.h"
|
#include "framework.h"
|
||||||
#include "LaraObject.h"
|
#include "LaraObject.h"
|
||||||
|
|
||||||
|
#include "Game/camera.h"
|
||||||
#include "Game/Lara/lara.h"
|
#include "Game/Lara/lara.h"
|
||||||
#include "Game/Lara/lara_helpers.h"
|
#include "Game/Lara/lara_helpers.h"
|
||||||
#include "Game/Lara/lara_struct.h"
|
#include "Game/Lara/lara_struct.h"
|
||||||
|
#include "Objects/Generic/Object/burning_torch.h"
|
||||||
#include "Game/effects/lara_fx.h"
|
#include "Game/effects/lara_fx.h"
|
||||||
#include "ReservedScriptNames.h"
|
#include "ReservedScriptNames.h"
|
||||||
|
|
||||||
|
@ -18,6 +20,7 @@ In addition, LaraObject inherits all the functions of @{Objects.Moveable|Moveabl
|
||||||
*/
|
*/
|
||||||
|
|
||||||
constexpr auto LUA_CLASS_NAME{ ScriptReserved_LaraObject };
|
constexpr auto LUA_CLASS_NAME{ ScriptReserved_LaraObject };
|
||||||
|
using namespace TEN::Entities::Generic;
|
||||||
|
|
||||||
/// Set Lara on fire
|
/// Set Lara on fire
|
||||||
// @function LaraObject:SetOnFire
|
// @function LaraObject:SetOnFire
|
||||||
|
@ -98,6 +101,93 @@ int LaraObject::GetAir() const
|
||||||
return lara->Air;
|
return lara->Air;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Lara will undraw her weapons if they are drawn, throw away flare if she helds one in her hand.
|
||||||
|
// @function LaraObject:UndrawWeapons
|
||||||
|
// @usage
|
||||||
|
// Lara:UndrawWeapons()
|
||||||
|
void LaraObject::UndrawWeapons()
|
||||||
|
{
|
||||||
|
auto* lara = GetLaraInfo(m_item);
|
||||||
|
|
||||||
|
if (lara->Control.HandStatus != HandStatus::Free ||
|
||||||
|
lara->Control.Weapon.GunType == LaraWeaponType::Flare)
|
||||||
|
{
|
||||||
|
lara->Control.HandStatus = HandStatus::WeaponUndraw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Lara will throw away the torch if she helds one in her hand.
|
||||||
|
// @function LaraObject:ThrowAwayTorch
|
||||||
|
// @usage
|
||||||
|
// Lara:ThrowAwayTorch()
|
||||||
|
void LaraObject::ThrowAwayTorch()
|
||||||
|
{
|
||||||
|
auto* lara = GetLaraInfo(m_item);
|
||||||
|
|
||||||
|
if (lara->Control.Weapon.GunType == LaraWeaponType::Torch)
|
||||||
|
{
|
||||||
|
Lara.Torch.State = TorchState::Dropping;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Get actual hand status of Lara
|
||||||
|
// @function LaraObject:GetHandStatus
|
||||||
|
// @usage
|
||||||
|
// Lara:GetHandStatus()
|
||||||
|
// @treturn 0=HandsFree, 1=Busy(climbing,etc), 2=WeaponDraw, 3=WeaponUndraw, 4=WeaponInHand.
|
||||||
|
HandStatus LaraObject::GetHandStatus() const
|
||||||
|
{
|
||||||
|
auto* lara = GetLaraInfo(m_item);
|
||||||
|
return HandStatus{ lara->Control.HandStatus };
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Get actual weapon type of Lara
|
||||||
|
// @function LaraObject:GetWeaponType
|
||||||
|
// @usage
|
||||||
|
// Lara:GetWeaponType()
|
||||||
|
// @treturn 0=None, 1=Pistols, 2=Revolver, 3=Uzi, 4=Shotgun, 5=HK, 6=Crossbow, 7=Flare, 8=Torch, 9=GrenadeLauncher, 10=Harpoon, 11=RocketLauncher.
|
||||||
|
LaraWeaponType LaraObject::GetWeaponType() const
|
||||||
|
{
|
||||||
|
auto* lara = GetLaraInfo(m_item);
|
||||||
|
return LaraWeaponType{ lara->Control.Weapon.GunType };
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Set Lara weapon type
|
||||||
|
// @function LaraObject:SetWeaponType
|
||||||
|
// @usage
|
||||||
|
// Lara:SetWeaponType(LaraWeaponType.WEAPONNAME, true/false)
|
||||||
|
// @tparam LaraWeaponType NONE, PISTOLS, REVOLVER, UZI, SHOTGUN, HK, CROSSBOW, FLARE, TORCH, GRENADELAUNCHER, HARPOONGUN, ROCKETLAUNCHER.
|
||||||
|
// @tparam bool activate true = let her also draw the weapons, set torch lit. false = let Laras new weapons holstered until you draw them, set torch unlit.
|
||||||
|
void LaraObject::SetWeaponType(LaraWeaponType weaponType, bool activate)
|
||||||
|
{
|
||||||
|
auto* lara = GetLaraInfo(m_item);
|
||||||
|
|
||||||
|
switch (weaponType)
|
||||||
|
{
|
||||||
|
case LaraWeaponType::Flare:
|
||||||
|
lara->Control.Weapon.RequestGunType = LaraWeaponType::Flare;
|
||||||
|
break;
|
||||||
|
case LaraWeaponType::Torch:
|
||||||
|
if (activate == false)
|
||||||
|
{
|
||||||
|
GetFlameTorch();
|
||||||
|
lara->Torch.IsLit = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GetFlameTorch();
|
||||||
|
lara->Torch.IsLit = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if (activate == false)
|
||||||
|
lara->Control.Weapon.LastGunType = weaponType;
|
||||||
|
else
|
||||||
|
lara->Control.Weapon.RequestGunType = weaponType;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void LaraObject::Register(sol::table& parent)
|
void LaraObject::Register(sol::table& parent)
|
||||||
{
|
{
|
||||||
parent.new_usertype<LaraObject>(LUA_CLASS_NAME,
|
parent.new_usertype<LaraObject>(LUA_CLASS_NAME,
|
||||||
|
@ -107,6 +197,11 @@ void LaraObject::Register(sol::table& parent)
|
||||||
ScriptReserved_GetPoison, &LaraObject::GetPoison,
|
ScriptReserved_GetPoison, &LaraObject::GetPoison,
|
||||||
ScriptReserved_SetAir, &LaraObject::SetAir,
|
ScriptReserved_SetAir, &LaraObject::SetAir,
|
||||||
ScriptReserved_GetAir, &LaraObject::GetAir,
|
ScriptReserved_GetAir, &LaraObject::GetAir,
|
||||||
|
ScriptReserved_UndrawWeapons, &LaraObject::UndrawWeapons,
|
||||||
|
ScriptReserved_ThrowAwayTorch, &LaraObject::ThrowAwayTorch,
|
||||||
|
ScriptReserved_GetHandStatus, &LaraObject::GetHandStatus,
|
||||||
|
ScriptReserved_GetWeaponType, &LaraObject::GetWeaponType,
|
||||||
|
ScriptReserved_SetWeaponType, &LaraObject::SetWeaponType,
|
||||||
sol::base_classes, sol::bases<Moveable>()
|
sol::base_classes, sol::bases<Moveable>()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,36 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
#include "Game/Lara/lara_struct.h"
|
||||||
#include "Objects/Moveable/MoveableObject.h"
|
#include "Objects/Moveable/MoveableObject.h"
|
||||||
|
|
||||||
|
static const std::unordered_map<std::string, LaraWeaponType> LaraWeaponTypeMap
|
||||||
|
{
|
||||||
|
{"NONE", LaraWeaponType::None},
|
||||||
|
{"PISTOLS", LaraWeaponType::Pistol},
|
||||||
|
{"REVOLVER", LaraWeaponType::Revolver},
|
||||||
|
{"UZI", LaraWeaponType::Uzi},
|
||||||
|
{"SHOTGUN", LaraWeaponType::Shotgun},
|
||||||
|
{"HK", LaraWeaponType::HK},
|
||||||
|
{"CROSSBOW", LaraWeaponType::Crossbow},
|
||||||
|
{"FLARE", LaraWeaponType::Flare},
|
||||||
|
{"TORCH", LaraWeaponType::Torch},
|
||||||
|
{"GRENADELAUNCHER", LaraWeaponType::GrenadeLauncher},
|
||||||
|
{"HARPOONGUN", LaraWeaponType::HarpoonGun},
|
||||||
|
{"ROCKETLAUNCHER", LaraWeaponType::RocketLauncher},
|
||||||
|
{"SNOWMOBILE", LaraWeaponType::Snowmobile},
|
||||||
|
{"NUMWEAPONS", LaraWeaponType::NumWeapons}
|
||||||
|
};
|
||||||
|
|
||||||
|
static const std::unordered_map<std::string, HandStatus> HandStatusMap
|
||||||
|
{
|
||||||
|
{"FREE", HandStatus::Free},
|
||||||
|
{"BUSY", HandStatus::Busy},
|
||||||
|
{"WEAPONDRAW", HandStatus::WeaponDraw},
|
||||||
|
{"WEAPONUNDRAW", HandStatus::WeaponUndraw},
|
||||||
|
{"WEAPONREADY", HandStatus::WeaponReady},
|
||||||
|
{"SPECIAL", HandStatus::Special},
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
class LaraObject : public Moveable
|
class LaraObject : public Moveable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -10,6 +40,11 @@ public:
|
||||||
int GetPoison() const;
|
int GetPoison() const;
|
||||||
void SetAir(sol::optional<int> air);
|
void SetAir(sol::optional<int> air);
|
||||||
int GetAir() const;
|
int GetAir() const;
|
||||||
|
void UndrawWeapons();
|
||||||
|
void ThrowAwayTorch();
|
||||||
|
HandStatus GetHandStatus() const;
|
||||||
|
LaraWeaponType GetWeaponType() const;
|
||||||
|
void SetWeaponType(LaraWeaponType weaponType, bool activate);
|
||||||
static void Register(sol::table & parent);
|
static void Register(sol::table & parent);
|
||||||
using Moveable::Moveable;
|
using Moveable::Moveable;
|
||||||
};
|
};
|
||||||
|
|
|
@ -434,7 +434,15 @@ ScriptReserved_GetSlotHP, & Moveable::GetSlotHP,
|
||||||
|
|
||||||
/// Destroy the moveable. This will mean it can no longer be used, except to re-initialise it with another object.
|
/// Destroy the moveable. This will mean it can no longer be used, except to re-initialise it with another object.
|
||||||
// @function Moveable:Destroy
|
// @function Moveable:Destroy
|
||||||
ScriptReserved_Destroy, &Moveable::Destroy);
|
ScriptReserved_Destroy, &Moveable::Destroy,
|
||||||
|
|
||||||
|
/// Attach camera to an object.
|
||||||
|
// @function Moveable:mesh 1 for camera, mesh 2 for target
|
||||||
|
ScriptReserved_AttachObjCamera, & Moveable::AttachObjCamera,
|
||||||
|
|
||||||
|
/// Borrow animation from an object
|
||||||
|
// @function GAME_OBJECT_ID ObjectID to take animation and stateID from, int animationnumber from object, int stateID from object
|
||||||
|
ScriptReserved_AnimFromObject, & Moveable::AnimFromObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -996,3 +1004,21 @@ bool Moveable::MeshExists(int index) const
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Attach camera and camera target to a mesh of an object.
|
||||||
|
void Moveable::AttachObjCamera(short camMeshId, Moveable& mov, short targetMeshId)
|
||||||
|
{
|
||||||
|
if ((m_item->Active || m_item->IsLara()) && (mov.m_item->Active || mov.m_item->IsLara()))
|
||||||
|
{
|
||||||
|
ObjCamera(m_item, camMeshId, mov.m_item, targetMeshId, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Borrow an animtaion and state id from an object.
|
||||||
|
void Moveable::AnimFromObject(GAME_OBJECT_ID object, int animNumber, int stateID)
|
||||||
|
{
|
||||||
|
m_item->Animation.AnimNumber = Objects[object].animIndex + animNumber;
|
||||||
|
m_item->Animation.ActiveState = stateID;
|
||||||
|
m_item->Animation.FrameNumber = g_Level.Anims[m_item->Animation.AnimNumber].frameBase;
|
||||||
|
AnimateItem(m_item);
|
||||||
|
}
|
||||||
|
|
|
@ -96,6 +96,9 @@ public:
|
||||||
[[nodiscard]] short GetRoom() const;
|
[[nodiscard]] short GetRoom() const;
|
||||||
void SetRoom(short room);
|
void SetRoom(short room);
|
||||||
|
|
||||||
|
void AttachObjCamera(short camMeshId, Moveable& mov, short targetMeshId);
|
||||||
|
void AnimFromObject(GAME_OBJECT_ID object, int animNumber, int stateID);
|
||||||
|
|
||||||
void EnableItem();
|
void EnableItem();
|
||||||
void DisableItem();
|
void DisableItem();
|
||||||
void MakeInvisible();
|
void MakeInvisible();
|
||||||
|
|
|
@ -127,6 +127,8 @@ ObjectsHandler::ObjectsHandler(sol::state* lua, sol::table & parent) :
|
||||||
);
|
);
|
||||||
|
|
||||||
m_handler.MakeReadOnlyTable(m_table_objects, ScriptReserved_ObjID, kObjIDs);
|
m_handler.MakeReadOnlyTable(m_table_objects, ScriptReserved_ObjID, kObjIDs);
|
||||||
|
m_handler.MakeReadOnlyTable(m_table_objects, ScriptReserved_LaraWeaponType, LaraWeaponTypeMap);
|
||||||
|
m_handler.MakeReadOnlyTable(m_table_objects, ScriptReserved_HandStatus, HandStatusMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ObjectsHandler::TestCollidingObjects()
|
void ObjectsHandler::TestCollidingObjects()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue