Anton Tarasenko
2 years ago
4 changed files with 263 additions and 0 deletions
@ -0,0 +1,57 @@
|
||||
/** |
||||
* Interface for a *Pawn* - base class for any entity that can be |
||||
* controlled by player or AI. To avoid purity for the sake of itself, in |
||||
* Acedia it will also be bundled with such typical components as health, |
||||
* collision, etc. |
||||
* Copyright 2022 Anton Tarasenko |
||||
*------------------------------------------------------------------------------ |
||||
* This file is part of Acedia. |
||||
* |
||||
* Acedia is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, version 3 of the License, or |
||||
* (at your option) any later version. |
||||
* |
||||
* Acedia is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU General Public License |
||||
* along with Acedia. If not, see <https://www.gnu.org/licenses/>. |
||||
*/ |
||||
class EPawn extends EPlaceable |
||||
abstract; |
||||
|
||||
/** |
||||
* Returns current amount of health caller `EPawn`'s referred entity has, |
||||
* assuming that entity has a health component. |
||||
* |
||||
* @return Current amount of health caller `EPawn`'s entity has. |
||||
* If entity that caller `EPawn` refers to doesn't have health component - |
||||
* returns `0`. |
||||
*/ |
||||
public function int GetHealth() |
||||
{ |
||||
return 0; |
||||
} |
||||
|
||||
/** |
||||
* Returns current maximum amount of health caller `EPawn`'s referred entity can |
||||
* have, assuming that entity has a health component. |
||||
* |
||||
* @return Current maximum amount of health caller `EPawn`'s entity can have. |
||||
* If entity that caller `EPawn` refers to doesn't have health component - |
||||
* returns `0`. |
||||
*/ |
||||
public function int GetMaxHealth(); |
||||
|
||||
/** |
||||
* Produces a suicide event for caller `EPawn`, making it drain its health and |
||||
* change its state into dead, whatever it means for the caller `EPawn`. |
||||
*/ |
||||
public function Suicide(); |
||||
|
||||
defaultproperties |
||||
{ |
||||
} |
@ -0,0 +1,31 @@
|
||||
/** |
||||
* Interface for any entity that can be placed into the game world. |
||||
* Copyright 2022 Anton Tarasenko |
||||
*------------------------------------------------------------------------------ |
||||
* This file is part of Acedia. |
||||
* |
||||
* Acedia is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, version 3 of the License, or |
||||
* (at your option) any later version. |
||||
* |
||||
* Acedia is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU General Public License |
||||
* along with Acedia. If not, see <https://www.gnu.org/licenses/>. |
||||
*/ |
||||
class EPlaceable extends EInterface; |
||||
|
||||
/** |
||||
* Returns position of the caller `EPlaceable` |
||||
* |
||||
* @return Vector that describes position of the caller `EPlaceable`. |
||||
*/ |
||||
public function Vector GetLocation(); |
||||
|
||||
defaultproperties |
||||
{ |
||||
} |
@ -0,0 +1,154 @@
|
||||
/** |
||||
* Implementation of `EPawn` for classic Killing Floor weapons that changes |
||||
* as little as possible and only on request from another mod, otherwise not |
||||
* altering gameplay at all. |
||||
* Copyright 2022 Anton Tarasenko |
||||
*------------------------------------------------------------------------------ |
||||
* This file is part of Acedia. |
||||
* |
||||
* Acedia is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, version 3 of the License, or |
||||
* (at your option) any later version. |
||||
* |
||||
* Acedia is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU General Public License |
||||
* along with Acedia. If not, see <https://www.gnu.org/licenses/>. |
||||
*/ |
||||
class EKFPawn extends EPawn; |
||||
|
||||
var private NativeActorRef pawnReference; |
||||
|
||||
protected function Finalizer() |
||||
{ |
||||
_.memory.Free(pawnReference); |
||||
pawnReference = none; |
||||
} |
||||
|
||||
/** |
||||
* Creates new `EKFPawn` that refers to the `pawnInstance` weapon. |
||||
* |
||||
* @param pawnInstance Native pawn class that new `EKFPawn` will represent. |
||||
* @return New `EKFPawn` that represents given `pawnInstance`. |
||||
*/ |
||||
public final static /*unreal*/ function EKFPawn Wrap(Pawn pawnInstance) |
||||
{ |
||||
local EKFPawn newReference; |
||||
|
||||
if (pawnInstance == none) { |
||||
return none; |
||||
} |
||||
newReference = EKFPawn(__().memory.Allocate(class'EKFPawn')); |
||||
newReference.pawnReference = __().unreal.ActorRef(pawnInstance); |
||||
return newReference; |
||||
} |
||||
|
||||
public function EInterface Copy() |
||||
{ |
||||
local Pawn pawnInstance; |
||||
|
||||
pawnInstance = GetNativeInstance(); |
||||
return Wrap(pawnInstance); |
||||
} |
||||
|
||||
public function bool Supports(class<EInterface> newInterfaceClass) |
||||
{ |
||||
if (newInterfaceClass == none) return false; |
||||
if (newInterfaceClass == class'EPlaceable') return true; |
||||
if (newInterfaceClass == class'EKFPawn') return true; |
||||
|
||||
return false; |
||||
} |
||||
|
||||
public function EInterface As(class<EInterface> newInterfaceClass) |
||||
{ |
||||
if (!IsExistent()) { |
||||
return none; |
||||
} |
||||
if ( newInterfaceClass == class'EPlaceable' |
||||
|| newInterfaceClass == class'EKFPawn') |
||||
{ |
||||
return Copy(); |
||||
} |
||||
return none; |
||||
} |
||||
|
||||
public function bool IsExistent() |
||||
{ |
||||
return (GetNativeInstance() != none); |
||||
} |
||||
|
||||
public function bool SameAs(EInterface other) |
||||
{ |
||||
local EKFPawn otherPawn; |
||||
|
||||
otherPawn = EKFPawn(other); |
||||
if (otherPawn == none) { |
||||
return false; |
||||
} |
||||
return (GetNativeInstance() == otherPawn.GetNativeInstance()); |
||||
} |
||||
|
||||
/** |
||||
* Returns `Pawn` instance represented by the caller `EKFPawn`. |
||||
* |
||||
* @return `Pawn` instance represented by the caller `EKFPawn`. |
||||
*/ |
||||
public final /*unreal*/ function Pawn GetNativeInstance() |
||||
{ |
||||
if (pawnReference != none) { |
||||
return Pawn(pawnReference.Get()); |
||||
} |
||||
return none; |
||||
} |
||||
|
||||
public function Vector GetLocation() |
||||
{ |
||||
local Pawn pawnInstance; |
||||
|
||||
pawnInstance = GetNativeInstance(); |
||||
if (pawnInstance != none) { |
||||
return pawnInstance.location; |
||||
} |
||||
return Vect(0.0, 0.0, 0.0); |
||||
} |
||||
|
||||
public function int GetHealth() |
||||
{ |
||||
local Pawn pawnInstance; |
||||
|
||||
pawnInstance = GetNativeInstance(); |
||||
if (pawnInstance != none) { |
||||
return pawnInstance.health; |
||||
} |
||||
return 0; |
||||
} |
||||
|
||||
public function int GetMaxHealth() |
||||
{ |
||||
local Pawn pawnInstance; |
||||
|
||||
pawnInstance = GetNativeInstance(); |
||||
if (pawnInstance != none) { |
||||
return int(pawnInstance.healthMax); |
||||
} |
||||
return 0; |
||||
} |
||||
|
||||
public function Suicide() |
||||
{ |
||||
local Pawn pawnInstance; |
||||
|
||||
pawnInstance = GetNativeInstance(); |
||||
if (pawnInstance != none) { |
||||
pawnInstance.Suicide(); |
||||
} |
||||
} |
||||
|
||||
defaultproperties |
||||
{ |
||||
} |
Loading…
Reference in new issue