Compare commits
13
Commits
main
...
88a19279d3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
88a19279d3 | ||
|
|
ddc2b8df73 | ||
|
|
ef6c2d3dd0 | ||
|
|
7a4421e722 | ||
|
|
85c71fdf0b | ||
|
|
8eeeb10b5d | ||
|
|
2de96ca23d | ||
|
|
7f41ccf7b5 | ||
|
|
43ee0c1562 | ||
|
|
3b060c446c | ||
|
|
9795b47ce4 | ||
|
|
d880c5c616 | ||
|
|
01cef05115 |
@@ -0,0 +1,387 @@
|
||||
<mxfile host="app.diagrams.net">
|
||||
<diagram name="Page-1" id="S8xx0SNJsf2MUWKB9l3i">
|
||||
<mxGraphModel dx="2732" dy="1763" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" background="light-dark(#ffffff, #000000)" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-25" parent="1" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=40;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" value="Item<div>"abstract"</div>" vertex="1">
|
||||
<mxGeometry height="126" width="160" x="-130" y="518.75" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-26" parent="Kkar4GxZ3Pt5WynWM7sy-25" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" value="- Name : string" vertex="1">
|
||||
<mxGeometry height="26" width="160" y="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-205" parent="Kkar4GxZ3Pt5WynWM7sy-25" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" value="+ Owner : Entity" vertex="1">
|
||||
<mxGeometry height="26" width="160" y="66" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-27" parent="Kkar4GxZ3Pt5WynWM7sy-25" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" value="" vertex="1">
|
||||
<mxGeometry height="8" width="160" y="92" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-28" parent="Kkar4GxZ3Pt5WynWM7sy-25" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" value="+ GetName() : String" vertex="1">
|
||||
<mxGeometry height="26" width="160" y="100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-29" parent="1" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" value="SellableItem" vertex="1">
|
||||
<mxGeometry height="90" width="160" x="-280" y="720" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-30" parent="Kkar4GxZ3Pt5WynWM7sy-29" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" value="- Price : int" vertex="1">
|
||||
<mxGeometry height="26" width="160" y="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-31" parent="Kkar4GxZ3Pt5WynWM7sy-29" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" value="" vertex="1">
|
||||
<mxGeometry height="8" width="160" y="56" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-32" parent="Kkar4GxZ3Pt5WynWM7sy-29" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" value="+ GetPrice() : int" vertex="1">
|
||||
<mxGeometry height="26" width="160" y="64" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-34" parent="1" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=56;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" value="KeyItem" vertex="1">
|
||||
<mxGeometry height="30" width="160" x="20" y="720" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-38" parent="1" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>IAttachable</b></p><p style="margin:0px;margin-top:4px;text-align:center;"><i>"Interface"</i><br></p><hr size="1" style="border-style:solid;"><p style="margin:0px;margin-left:4px;">+ AttachTo(entity: Entity): Void</p><p style="margin:0px;margin-left:4px;">+ DeAttachFrom(entity: Entity): void</p>" vertex="1">
|
||||
<mxGeometry height="85" width="220" x="-660" y="650" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-46" edge="1" parent="1" source="Kkar4GxZ3Pt5WynWM7sy-39" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;endArrow=block;endFill=0;startSize=16;endSize=15;dashed=1;dashPattern=8 8;" target="Kkar4GxZ3Pt5WynWM7sy-43">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-39" parent="1" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=40;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" value="Accessory<div>"abstract"</div>" vertex="1">
|
||||
<mxGeometry height="100" width="160" x="-480" y="880" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-40" parent="Kkar4GxZ3Pt5WynWM7sy-39" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" value="- Health : int" vertex="1">
|
||||
<mxGeometry height="26" width="160" y="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-41" parent="Kkar4GxZ3Pt5WynWM7sy-39" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" value="" vertex="1">
|
||||
<mxGeometry height="8" width="160" y="66" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-42" parent="Kkar4GxZ3Pt5WynWM7sy-39" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" value="+ GetHealth() : int" vertex="1">
|
||||
<mxGeometry height="26" width="160" y="74" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-43" parent="1" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;spacingTop=0;spacingBottom=0;" value="<div style="line-height: 160%;"><p style="margin:0px;margin-top:4px;text-align:center;"><b>IDamageable</b></p><p style="margin:0px;margin-top:4px;text-align:center;"><i>"Interface"</i><br></p><hr size="1" style="border-style:solid;"><p style="margin:0px;margin-left:4px;">+ TakeDamage(int amount) : void</p><p style="margin:0px;margin-left:4px;">+ HandleZeroHealth() : void</p><p style="margin:0px;margin-left:4px;">+ IsDestroyed() : boolean</p></div>" vertex="1">
|
||||
<mxGeometry height="120" width="320" x="-490" y="480" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-45" parent="1" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;spacingTop=0;spacingBottom=0;" value="<div style="line-height: 160%;"><p style="margin: 4px 0px 0px; text-align: center;"><b>IDamager</b></p><p style="margin: 4px 0px 0px; text-align: center;"><i>"Interface"</i><br></p><hr size="1" style="border-style: solid;"><p style="margin: 0px 0px 0px 4px;">+ Damage(target: IDamageable) : void&nbsp;</p><p style="margin: 0px 0px 0px 4px;">+ GetUtils() : IDamager[]</p><p style="margin: 0px 0px 0px 4px;">+ GetDamage() : int</p></div>" vertex="1">
|
||||
<mxGeometry height="115" width="330" x="-1220" y="515" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-49" edge="1" parent="1" source="Kkar4GxZ3Pt5WynWM7sy-29" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.496;entryY=0.974;entryDx=0;entryDy=0;endArrow=block;endFill=0;startSize=16;endSize=15;entryPerimeter=0;" target="Kkar4GxZ3Pt5WynWM7sy-28">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="-95" y="800" as="sourcePoint" />
|
||||
<mxPoint x="-5" y="620" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-50" edge="1" parent="1" source="Kkar4GxZ3Pt5WynWM7sy-34" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;endArrow=block;endFill=0;startSize=16;endSize=15;entryX=0.493;entryY=1.001;entryDx=0;entryDy=0;entryPerimeter=0;" target="Kkar4GxZ3Pt5WynWM7sy-28">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="-10" y="841" as="sourcePoint" />
|
||||
<mxPoint x="-50" y="650" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-52" edge="1" parent="1" source="Kkar4GxZ3Pt5WynWM7sy-39" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.25;exitDx=0;exitDy=0;entryX=0.492;entryY=1;entryDx=0;entryDy=0;endArrow=block;endFill=0;startSize=16;endSize=15;entryPerimeter=0;" target="Kkar4GxZ3Pt5WynWM7sy-32">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="-250" y="941" as="sourcePoint" />
|
||||
<mxPoint x="-101" y="870" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-53" parent="1" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" value="Weapon" vertex="1">
|
||||
<mxGeometry height="56" width="160" x="-670" y="1030" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-54" parent="Kkar4GxZ3Pt5WynWM7sy-53" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" value="<div>- Damage : int</div>" vertex="1">
|
||||
<mxGeometry height="26" width="160" y="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-61" parent="1" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" value="Shield" vertex="1">
|
||||
<mxGeometry height="56" width="160" x="-270" y="1030" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-62" parent="Kkar4GxZ3Pt5WynWM7sy-61" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" value="<div>- Defense : int</div>" vertex="1">
|
||||
<mxGeometry height="26" width="160" y="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-65" parent="1" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" value="Costum" vertex="1">
|
||||
<mxGeometry height="56" width="160" x="-480" y="1030" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-66" parent="Kkar4GxZ3Pt5WynWM7sy-65" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" value="<div>- Defense : int</div>" vertex="1">
|
||||
<mxGeometry height="26" width="160" y="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-69" parent="1" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;spacingTop=0;spacingBottom=0;" value="<div style="line-height: 160%;"><p style="margin:0px;margin-top:4px;text-align:center;"><b>IDefender</b></p><p style="margin:0px;margin-top:4px;text-align:center;"><i>"Interface"</i><br></p><hr size="1" style="border-style:solid;"><p style="margin:0px;margin-left:4px;">+ Apply(int damage) : int</p><p style="margin:0px;margin-left:4px;">+ GetDefense() : int</p></div>" vertex="1">
|
||||
<mxGeometry height="100" width="190" x="-80" y="900" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-70" edge="1" parent="1" source="Kkar4GxZ3Pt5WynWM7sy-65" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.25;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;endArrow=block;endFill=0;startSize=16;endSize=15;dashed=1;dashPattern=8 8;" target="Kkar4GxZ3Pt5WynWM7sy-69">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="-300" y="1053" />
|
||||
<mxPoint x="-300" y="1020" />
|
||||
<mxPoint x="15" y="1020" />
|
||||
</Array>
|
||||
<mxPoint x="-240" y="1250" as="sourcePoint" />
|
||||
<mxPoint x="-155" y="990" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-71" edge="1" parent="1" source="Kkar4GxZ3Pt5WynWM7sy-61" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=0;startSize=16;endSize=15;dashed=1;dashPattern=8 8;exitX=1;exitY=0.25;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" target="Kkar4GxZ3Pt5WynWM7sy-69">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="15" y="1053" />
|
||||
</Array>
|
||||
<mxPoint x="150" y="920" as="sourcePoint" />
|
||||
<mxPoint x="20" y="1000" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-72" edge="1" parent="1" source="Kkar4GxZ3Pt5WynWM7sy-53" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.477;entryY=1.035;entryDx=0;entryDy=0;endArrow=block;endFill=0;startSize=16;endSize=15;entryPerimeter=0;" target="Kkar4GxZ3Pt5WynWM7sy-42">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="-530" y="933" as="sourcePoint" />
|
||||
<mxPoint x="-411" y="840" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-73" edge="1" parent="1" source="Kkar4GxZ3Pt5WynWM7sy-61" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.48;entryY=1.035;entryDx=0;entryDy=0;endArrow=block;endFill=0;startSize=16;endSize=15;entryPerimeter=0;" target="Kkar4GxZ3Pt5WynWM7sy-42">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="-260" y="973" as="sourcePoint" />
|
||||
<mxPoint x="-141" y="880" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-74" edge="1" parent="1" source="Kkar4GxZ3Pt5WynWM7sy-65" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.477;entryY=1.035;entryDx=0;entryDy=0;endArrow=block;endFill=0;startSize=16;endSize=15;entryPerimeter=0;" target="Kkar4GxZ3Pt5WynWM7sy-42">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="-280" y="970" as="sourcePoint" />
|
||||
<mxPoint x="-161" y="877" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-76" edge="1" parent="1" source="Kkar4GxZ3Pt5WynWM7sy-105" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;endFill=0;endSize=18;startSize=18;startArrow=diamondThin;startFill=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" target="Kkar4GxZ3Pt5WynWM7sy-205">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="150" y="290" as="sourcePoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-85" edge="1" parent="1" source="Kkar4GxZ3Pt5WynWM7sy-96" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;endArrow=block;endFill=0;startSize=16;endSize=15;dashed=1;dashPattern=8 8;exitX=0;exitY=0;exitDx=0;exitDy=0;" target="Kkar4GxZ3Pt5WynWM7sy-43">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="260" y="130" as="sourcePoint" />
|
||||
<mxPoint x="-210" y="220" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-86" parent="1" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;spacingTop=0;spacingBottom=0;" value="<div style="line-height: 160%;"><p style="margin:0px;margin-top:4px;text-align:center;"><b>IHealable</b></p><p style="margin:0px;margin-top:4px;text-align:center;"><i>"Interface"</i><br></p><hr size="1" style="border-style:solid;"><p style="margin:0px;margin-left:4px;">+ Heal(int amount) : void</p></div>" vertex="1">
|
||||
<mxGeometry height="82.5" width="320" x="-840" y="518.75" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-87" edge="1" parent="1" source="Kkar4GxZ3Pt5WynWM7sy-96" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;endArrow=block;endFill=0;startSize=16;endSize=15;dashed=1;dashPattern=8 8;exitX=0;exitY=0;exitDx=0;exitDy=0;" target="Kkar4GxZ3Pt5WynWM7sy-86">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="240" y="170" as="sourcePoint" />
|
||||
<mxPoint x="-320" y="510" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-96" parent="1" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=40;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" value="<span style="font-weight: 400;">Entity</span><div style="font-weight: 400;">"abstract"</div>" vertex="1">
|
||||
<mxGeometry height="528" width="280" x="220" y="340" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-100" parent="Kkar4GxZ3Pt5WynWM7sy-96" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="+ MaxHealth : int" vertex="1">
|
||||
<mxGeometry height="30" width="280" y="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-208" parent="Kkar4GxZ3Pt5WynWM7sy-96" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="+ Health : int" vertex="1">
|
||||
<mxGeometry height="30" width="280" y="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-109" parent="Kkar4GxZ3Pt5WynWM7sy-96" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="+ Costum : Custom" vertex="1">
|
||||
<mxGeometry height="30" width="280" y="100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-108" parent="Kkar4GxZ3Pt5WynWM7sy-96" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="+ Weapon : Weapon" vertex="1">
|
||||
<mxGeometry height="30" width="280" y="130" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-107" parent="Kkar4GxZ3Pt5WynWM7sy-96" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="+ Shield : Sheild" vertex="1">
|
||||
<mxGeometry height="30" width="280" y="160" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-106" parent="Kkar4GxZ3Pt5WynWM7sy-96" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="+ Money : long" vertex="1">
|
||||
<mxGeometry height="30" width="280" y="190" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-105" parent="Kkar4GxZ3Pt5WynWM7sy-96" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="+ Inverntory : ArrayList&lt;Item&gt;" vertex="1">
|
||||
<mxGeometry height="30" width="280" y="220" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-104" parent="Kkar4GxZ3Pt5WynWM7sy-96" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="+ State : EntityState" vertex="1">
|
||||
<mxGeometry height="30" width="280" y="250" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-103" parent="Kkar4GxZ3Pt5WynWM7sy-96" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="+ BaseDamage : int" vertex="1">
|
||||
<mxGeometry height="30" width="280" y="280" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-98" parent="Kkar4GxZ3Pt5WynWM7sy-96" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" value="" vertex="1">
|
||||
<mxGeometry height="8" width="280" y="310" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-112" parent="Kkar4GxZ3Pt5WynWM7sy-96" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="+ ModifyMoney(amount: long, dir: boolean) : void" vertex="1">
|
||||
<mxGeometry height="30" width="280" y="318" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-113" parent="Kkar4GxZ3Pt5WynWM7sy-96" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="+ GetInventory() : Item[]" vertex="1">
|
||||
<mxGeometry height="30" width="280" y="348" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-118" parent="Kkar4GxZ3Pt5WynWM7sy-96" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="+ GetInventoryByClass(class: ItemClass) : Item[]" vertex="1">
|
||||
<mxGeometry height="30" width="280" y="378" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-115" parent="Kkar4GxZ3Pt5WynWM7sy-96" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="+ sellItem(item: Item) : void" vertex="1">
|
||||
<mxGeometry height="30" width="280" y="408" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-116" parent="Kkar4GxZ3Pt5WynWM7sy-96" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="+ SellUnnecesarry() : void" vertex="1">
|
||||
<mxGeometry height="30" width="280" y="438" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-117" parent="Kkar4GxZ3Pt5WynWM7sy-96" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="+ SellSellable() : void" vertex="1">
|
||||
<mxGeometry height="30" width="280" y="468" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-119" parent="Kkar4GxZ3Pt5WynWM7sy-96" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="+ AddToInventory(item: Item) : void" vertex="1">
|
||||
<mxGeometry height="30" width="280" y="498" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-120" parent="1" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=40;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" value="<span style="font-weight: 400;">Player</span><br><div style="font-weight: 400;">"abstract"</div>" vertex="1">
|
||||
<mxGeometry height="408" width="270" x="-165" y="-120" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-129" parent="Kkar4GxZ3Pt5WynWM7sy-120" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="+ MaxStamina : int" vertex="1">
|
||||
<mxGeometry height="30" width="270" y="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-130" parent="Kkar4GxZ3Pt5WynWM7sy-120" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="+ Stamina : int" vertex="1">
|
||||
<mxGeometry height="30" width="270" y="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-141" parent="Kkar4GxZ3Pt5WynWM7sy-120" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="<div>+ Level : int</div>" vertex="1">
|
||||
<mxGeometry height="30" width="270" y="100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-142" parent="Kkar4GxZ3Pt5WynWM7sy-120" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="<div>+ CurLevelProcess: int</div>" vertex="1">
|
||||
<mxGeometry height="30" width="270" y="130" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-131" parent="Kkar4GxZ3Pt5WynWM7sy-120" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" value="" vertex="1">
|
||||
<mxGeometry height="8" width="270" y="160" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-132" parent="Kkar4GxZ3Pt5WynWM7sy-120" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="+ AddLevelProcess(int amount) : void" vertex="1">
|
||||
<mxGeometry height="30" width="270" y="168" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-133" parent="Kkar4GxZ3Pt5WynWM7sy-120" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="+ UpgradeLevel() : void" vertex="1">
|
||||
<mxGeometry height="30" width="270" y="198" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-145" parent="Kkar4GxZ3Pt5WynWM7sy-120" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="+ lightAttack() : void" vertex="1">
|
||||
<mxGeometry height="30" width="270" y="228" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-146" parent="Kkar4GxZ3Pt5WynWM7sy-120" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="+ heavyAttack() : void" vertex="1">
|
||||
<mxGeometry height="30" width="270" y="258" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-147" parent="Kkar4GxZ3Pt5WynWM7sy-120" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="+ defend() : void" vertex="1">
|
||||
<mxGeometry height="30" width="270" y="288" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-148" parent="Kkar4GxZ3Pt5WynWM7sy-120" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="+ heal() : void" vertex="1">
|
||||
<mxGeometry height="30" width="270" y="318" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-114" parent="Kkar4GxZ3Pt5WynWM7sy-120" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="+ ModifyStamina(amount: int, dir: boolean) : void" vertex="1">
|
||||
<mxGeometry height="30" width="270" y="348" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-149" parent="Kkar4GxZ3Pt5WynWM7sy-120" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="+ abstract specialAbility() : void" vertex="1">
|
||||
<mxGeometry height="30" width="270" y="378" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-143" edge="1" parent="1" source="Kkar4GxZ3Pt5WynWM7sy-120" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.996;exitY=0.039;exitDx=0;exitDy=0;endArrow=block;endFill=0;startSize=16;endSize=15;exitPerimeter=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" target="Kkar4GxZ3Pt5WynWM7sy-96">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="490" y="120" as="sourcePoint" />
|
||||
<mxPoint x="340" y="50" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-144" edge="1" parent="1" source="Kkar4GxZ3Pt5WynWM7sy-120" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;endArrow=block;endFill=0;startSize=16;endSize=15;dashed=1;dashPattern=8 8;exitX=0.025;exitY=0.054;exitDx=0;exitDy=0;exitPerimeter=0;" target="Kkar4GxZ3Pt5WynWM7sy-45">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="-370" y="40" as="sourcePoint" />
|
||||
<mxPoint x="-530" y="349" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-152" parent="1" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=40;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" value="<span style="font-weight: 400;">Enemy</span><br><div style="font-weight: 400;">"abstract"</div>" vertex="1">
|
||||
<mxGeometry height="138" width="270" x="505" y="-100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-167" parent="Kkar4GxZ3Pt5WynWM7sy-152" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="+ Key: KeyItem" vertex="1">
|
||||
<mxGeometry height="30" width="270" y="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-157" parent="Kkar4GxZ3Pt5WynWM7sy-152" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" value="" vertex="1">
|
||||
<mxGeometry height="8" width="270" y="70" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-158" parent="Kkar4GxZ3Pt5WynWM7sy-152" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="+ DropLoot(player: Player) : void" vertex="1">
|
||||
<mxGeometry height="30" width="270" y="78" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-184" parent="Kkar4GxZ3Pt5WynWM7sy-152" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;container=0;" value="+ abstract AttackPlayer(player: Player) : void" vertex="1">
|
||||
<mxGeometry height="30" width="270" y="108" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-165" edge="1" parent="1" source="Kkar4GxZ3Pt5WynWM7sy-152" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=0;startSize=16;endSize=15;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0;exitY=0.25;exitDx=0;exitDy=0;" target="Kkar4GxZ3Pt5WynWM7sy-96">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="510" y="-150" as="sourcePoint" />
|
||||
<mxPoint x="466" y="585" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-168" parent="1" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" value="<span style="font-weight: 400;">Dragon</span>" vertex="1">
|
||||
<mxGeometry height="38" width="270" x="295" y="-310" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-170" parent="Kkar4GxZ3Pt5WynWM7sy-168" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" value="" vertex="1">
|
||||
<mxGeometry height="8" width="270" y="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-180" parent="1" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" value="<span style="font-weight: 400;">Goblin</span>" vertex="1">
|
||||
<mxGeometry height="38" width="270" x="695" y="-310" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-182" parent="Kkar4GxZ3Pt5WynWM7sy-180" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" value="" vertex="1">
|
||||
<mxGeometry height="8" width="270" y="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-185" parent="1" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" value="<span style="font-weight: 400;">Skeleton</span>" vertex="1">
|
||||
<mxGeometry height="38" width="270" x="295" y="-220" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-186" parent="Kkar4GxZ3Pt5WynWM7sy-185" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" value="" vertex="1">
|
||||
<mxGeometry height="8" width="270" y="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-187" parent="1" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" value="<span style="font-weight: 400;">Vampire</span>" vertex="1">
|
||||
<mxGeometry height="38" width="270" x="695" y="-220" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-188" parent="Kkar4GxZ3Pt5WynWM7sy-187" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" value="" vertex="1">
|
||||
<mxGeometry height="8" width="270" y="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-190" edge="1" parent="1" source="Kkar4GxZ3Pt5WynWM7sy-185" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=0;startSize=16;endSize=15;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" target="Kkar4GxZ3Pt5WynWM7sy-152">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="1140" y="-20" as="sourcePoint" />
|
||||
<mxPoint x="995" y="495" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-193" edge="1" parent="1" source="Kkar4GxZ3Pt5WynWM7sy-168" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=0;startSize=16;endSize=15;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" target="Kkar4GxZ3Pt5WynWM7sy-152">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="1005" y="-10" as="sourcePoint" />
|
||||
<mxPoint x="1080" y="91" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-194" edge="1" parent="1" source="Kkar4GxZ3Pt5WynWM7sy-187" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=0;startSize=16;endSize=15;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" target="Kkar4GxZ3Pt5WynWM7sy-152">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="975" y="20" as="sourcePoint" />
|
||||
<mxPoint x="1050" y="211" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-195" edge="1" parent="1" source="Kkar4GxZ3Pt5WynWM7sy-180" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=0;startSize=16;endSize=15;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" target="Kkar4GxZ3Pt5WynWM7sy-152">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="1010" y="-10" as="sourcePoint" />
|
||||
<mxPoint x="955" y="91" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-196" parent="1" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" value="<span style="font-weight: 400;">Wisard</span>" vertex="1">
|
||||
<mxGeometry height="38" width="270" x="-330" y="-220" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-197" parent="Kkar4GxZ3Pt5WynWM7sy-196" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" value="" vertex="1">
|
||||
<mxGeometry height="8" width="270" y="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-198" parent="1" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" value="<span style="font-weight: 400;">Assasin</span>" vertex="1">
|
||||
<mxGeometry height="38" width="270" x="-165" y="-340" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-199" parent="Kkar4GxZ3Pt5WynWM7sy-198" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" value="" vertex="1">
|
||||
<mxGeometry height="8" width="270" y="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-200" parent="1" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" value="<span style="font-weight: 400;">Knight</span>" vertex="1">
|
||||
<mxGeometry height="38" width="270" x="5" y="-220" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-201" parent="Kkar4GxZ3Pt5WynWM7sy-200" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" value="" vertex="1">
|
||||
<mxGeometry height="8" width="270" y="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-202" edge="1" parent="1" source="Kkar4GxZ3Pt5WynWM7sy-200" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=0;startSize=16;endSize=15;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" target="Kkar4GxZ3Pt5WynWM7sy-120">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="290" y="-410" as="sourcePoint" />
|
||||
<mxPoint x="235" y="-219" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-203" edge="1" parent="1" source="Kkar4GxZ3Pt5WynWM7sy-196" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=0;startSize=16;endSize=15;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" target="Kkar4GxZ3Pt5WynWM7sy-120">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="200" y="-360" as="sourcePoint" />
|
||||
<mxPoint x="165" y="-249" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-204" edge="1" parent="1" source="Kkar4GxZ3Pt5WynWM7sy-198" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=block;endFill=0;startSize=16;endSize=15;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" target="Kkar4GxZ3Pt5WynWM7sy-120">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="165" y="-410" as="sourcePoint" />
|
||||
<mxPoint x="195" y="-299" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-206" edge="1" parent="1" source="Kkar4GxZ3Pt5WynWM7sy-39" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;endArrow=block;endFill=0;startSize=16;endSize=15;dashed=1;dashPattern=8 8;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" target="Kkar4GxZ3Pt5WynWM7sy-38">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="-400" y="820" />
|
||||
<mxPoint x="-550" y="820" />
|
||||
</Array>
|
||||
<mxPoint x="-390" y="1190" as="sourcePoint" />
|
||||
<mxPoint x="-169" y="1380" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="Kkar4GxZ3Pt5WynWM7sy-207" parent="1" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;spacingTop=0;spacingBottom=0;" value="<div style="line-height: 160%;"><p style="margin:0px;margin-top:4px;text-align:center;"><b>IDefendable</b></p><p style="margin:0px;margin-top:4px;text-align:center;"><i>"Interface"</i><br></p><hr size="1" style="border-style:solid;"><p style="margin:0px;margin-left:4px;"><span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">+ GetDefenders() : IDefender[]</span></p></div>" vertex="1">
|
||||
<mxGeometry height="90" width="320" x="-1000" y="180" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 212 KiB |
@@ -0,0 +1,8 @@
|
||||
package org.project.Interface;
|
||||
|
||||
import org.project.entity.Entity;
|
||||
|
||||
public interface IAttachable {
|
||||
public void AttachTo(Entity entity);
|
||||
public void DeattachFrom(Entity entity);
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package org.project.Interface;
|
||||
|
||||
public interface IDamageUtil {
|
||||
public int GetDamage();
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package org.project.Interface;
|
||||
|
||||
import org.project.constants.gameConstant.AttackPowerUp;
|
||||
|
||||
public interface IDamageable {
|
||||
public void TakeDamage(int amount, AttackPowerUp[] powerUps);
|
||||
public boolean IsDestroyed();
|
||||
public void HandleZeroHealth();
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package org.project.Interface;
|
||||
|
||||
import org.project.constants.gameConstant.AttackPowerUp;
|
||||
|
||||
public interface IDamager {
|
||||
public void Damage(IDamageable target, int amount, AttackPowerUp[] powerUps);
|
||||
public IDamageUtil[] GetDamageUtils();
|
||||
public int GetDamage();
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package org.project.Interface;
|
||||
|
||||
public interface IDefendable {
|
||||
public IDefender[] GetDefenders();
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package org.project.Interface;
|
||||
|
||||
import org.project.constants.gameConstant.AttackPowerUp;
|
||||
|
||||
public interface IDefender {
|
||||
public int Apply(int damage, AttackPowerUp[] powerUps);
|
||||
public int GetDefense();
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package org.project.Interface;
|
||||
|
||||
import org.project.constants.gameConstant.FightMoves;
|
||||
import org.project.entity.Entity;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public interface IFighter {
|
||||
public void LightAttack(IDamageable target);
|
||||
public void HeavyAttack(IDamageable target);
|
||||
public void defend();
|
||||
public void HealMove();
|
||||
public void SpecialAbility(Entity entity);
|
||||
public ArrayList<FightMoves> GetAvailableMoves();
|
||||
|
||||
public String GetSpecialAbilityDescription(Entity entity);
|
||||
|
||||
public String GetSpecialAbilityResultDescription(Entity entity);
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package org.project.Interface;
|
||||
|
||||
public interface IHealable {
|
||||
public void Heal(int amount);
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package org.project.constants.gameConstant;
|
||||
|
||||
public enum AttackPowerUp {
|
||||
ANTI_SHIELD,
|
||||
ANTI_CUSTOM,
|
||||
NO_DEFENSE,
|
||||
INEVITABLE,
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package org.project.constants.gameConstant;
|
||||
|
||||
public enum DefencePowerUp {
|
||||
INVISIBLE,
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package org.project.constants.gameConstant;
|
||||
|
||||
public enum EntityState {
|
||||
ALIVE,
|
||||
DEAD,
|
||||
FROZEN
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package org.project.constants.gameConstant;
|
||||
|
||||
public enum FightMoves {
|
||||
LIGHT_ATTACK,
|
||||
HEAVY_ATTACK,
|
||||
HEAL,
|
||||
DEFEND,
|
||||
SPECIAL
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package org.project.constants.gameConstant;
|
||||
|
||||
public enum ItemClass {
|
||||
KEY,
|
||||
SELLABLE,
|
||||
UNNECESSARY,
|
||||
ACCESSORY,
|
||||
SHIELD,
|
||||
WEAPON,
|
||||
COSTUME,
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package org.project.constants.gameConstant;
|
||||
|
||||
import org.project.item.Accessory.Accessory;
|
||||
import org.project.item.Accessory.Costume;
|
||||
import org.project.item.Accessory.Shield;
|
||||
import org.project.item.Accessory.Weapon;
|
||||
import org.project.item.KeyItem;
|
||||
import org.project.item.SellableItem;
|
||||
|
||||
public final class ItemClassExt {
|
||||
private ItemClassExt() {}
|
||||
|
||||
public static boolean Matches(ItemClass itemClass, Object subject) {
|
||||
return switch (itemClass) {
|
||||
case KEY -> subject instanceof KeyItem;
|
||||
case SELLABLE -> subject instanceof SellableItem;
|
||||
case UNNECESSARY -> subject.getClass() == SellableItem.class;
|
||||
case ACCESSORY -> subject instanceof Accessory;
|
||||
case WEAPON -> subject instanceof Weapon;
|
||||
case COSTUME -> subject instanceof Costume;
|
||||
case SHIELD -> subject instanceof Shield;
|
||||
case null, default -> false;
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -1,21 +1,251 @@
|
||||
package org.project.entity;
|
||||
|
||||
public interface Entity {
|
||||
void attack(Entity target);
|
||||
import org.project.Interface.*;
|
||||
import org.project.constants.gameConstant.*;
|
||||
import org.project.item.Accessory.Costume;
|
||||
import org.project.item.Accessory.Shield;
|
||||
import org.project.item.Accessory.Weapon;
|
||||
import org.project.item.Item;
|
||||
import org.project.item.SellableItem;
|
||||
|
||||
void defend();
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
|
||||
void heal(int health);
|
||||
public abstract class Entity implements IDamageable, IHealable, IDefendable, IFighter, IDamager {
|
||||
|
||||
void fillMana(int mana);
|
||||
public String Name;
|
||||
public int MaxHealth;
|
||||
public int Health;
|
||||
private int Stamina;
|
||||
protected int MaxStamina;
|
||||
private long Money;
|
||||
protected int BaseDamage;
|
||||
private EntityState State;
|
||||
public Weapon Weapon;
|
||||
public Shield Shield;
|
||||
public Costume Costume;
|
||||
public ArrayList<Item> Inventory;
|
||||
protected int DefenseBonus;
|
||||
public boolean IsDefending;
|
||||
public ArrayList<DefencePowerUp> defencePowerUps;
|
||||
protected int HealAmount;
|
||||
protected int HeavyAttackStamina;
|
||||
protected int SpecialAbilityStamina;
|
||||
|
||||
void takeDamage(int damage);
|
||||
public Entity(String name, int maxHealth, int health, int stamina, int maxStamina, long money, int baseDamage, EntityState state, Weapon weapon,
|
||||
Shield shield, Costume costume, ArrayList<Item> inventory, int defenseBonus, boolean isDefending, int healAmount) {
|
||||
|
||||
int getMaxHP();
|
||||
Name = name;
|
||||
MaxHealth = maxHealth;
|
||||
Health = health;
|
||||
Stamina = stamina;
|
||||
MaxStamina = maxStamina;
|
||||
Money = money;
|
||||
BaseDamage = baseDamage;
|
||||
State = state;
|
||||
Weapon = weapon;
|
||||
Shield = shield;
|
||||
Costume = costume;
|
||||
Inventory = inventory;
|
||||
DefenseBonus = defenseBonus;
|
||||
IsDefending = isDefending;
|
||||
HealAmount = healAmount;
|
||||
HeavyAttackStamina = 50;
|
||||
SpecialAbilityStamina = 100;
|
||||
}
|
||||
|
||||
int getMaxMP();
|
||||
protected Entity() {}
|
||||
|
||||
/*
|
||||
TODO: ADD OTHER REQUIRED AND BONUS METHODS
|
||||
*/
|
||||
public int GetStamina() { return Stamina; }
|
||||
|
||||
public void ResetStamina() { Stamina = MaxStamina; }
|
||||
|
||||
public void ModifyStamina(int amount, boolean dir) {
|
||||
if (dir) {
|
||||
Stamina += amount;
|
||||
|
||||
if (Stamina > MaxStamina) {
|
||||
Stamina = MaxStamina;
|
||||
}
|
||||
}
|
||||
|
||||
Stamina -= amount;
|
||||
if (Stamina < 0) {
|
||||
Stamina = 0;
|
||||
}
|
||||
}
|
||||
|
||||
public EntityState GetState() { return State; }
|
||||
|
||||
@Override
|
||||
public int GetDamage() {
|
||||
int damage = BaseDamage;
|
||||
IDamageUtil[] utils = GetDamageUtils();
|
||||
|
||||
for (IDamageUtil util : utils) {
|
||||
if (util != null) {
|
||||
damage += util.GetDamage();
|
||||
}
|
||||
}
|
||||
|
||||
return damage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IDamageUtil[] GetDamageUtils() {
|
||||
return new IDamageUtil[] {Weapon};
|
||||
}
|
||||
|
||||
@Override
|
||||
public void Damage(IDamageable target, int amount, AttackPowerUp[] powerUps) {
|
||||
target.TakeDamage(amount, powerUps);
|
||||
}
|
||||
|
||||
public long GetMoney() { return Money; }
|
||||
|
||||
public ArrayList<Item> GetInventory() { return Inventory; }
|
||||
|
||||
public ArrayList<Item> GetInventoryByClass(ItemClass itemClass) {
|
||||
ArrayList<Item> result = new ArrayList<>();
|
||||
|
||||
for (Item item : Inventory) {
|
||||
if (ItemClassExt.Matches(itemClass, item)) {
|
||||
result.add(item);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public void SetState(EntityState state) {
|
||||
State = state;
|
||||
}
|
||||
|
||||
public void ModifyMoney(long amount, boolean dir) {
|
||||
if (dir) {
|
||||
Money += amount;
|
||||
}
|
||||
Money -= amount;
|
||||
}
|
||||
|
||||
public void RestoreHealth() { Health = MaxHealth; }
|
||||
|
||||
@Override
|
||||
public void Heal(int amount) {
|
||||
Health += amount;
|
||||
|
||||
if (Health > MaxHealth) {
|
||||
Health = MaxHealth;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public IDefender[] GetDefenders() {
|
||||
return new IDefender[]{Shield, Costume};
|
||||
}
|
||||
|
||||
@Override
|
||||
public void TakeDamage(int amount, AttackPowerUp[] powerUps) {
|
||||
if (!defencePowerUps.contains(DefencePowerUp.INVISIBLE)) return;
|
||||
|
||||
IDefender[] defenders = GetDefenders();
|
||||
|
||||
if (Arrays.binarySearch(powerUps, AttackPowerUp.INEVITABLE) < 0) {
|
||||
for (IDefender defender : defenders) {
|
||||
if (defender != null) {
|
||||
amount = defender.Apply(amount, powerUps);
|
||||
}
|
||||
}
|
||||
|
||||
if (IsDefending) {
|
||||
if (Arrays.binarySearch(powerUps, AttackPowerUp.INEVITABLE) < 0) {
|
||||
amount -= DefenseBonus;
|
||||
}
|
||||
IsDefending = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (amount > 0) {
|
||||
Health -= amount;
|
||||
}
|
||||
|
||||
if (IsDestroyed()) {
|
||||
HandleZeroHealth();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean IsDestroyed() {
|
||||
return Health <= 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void HandleZeroHealth() {
|
||||
this.State = EntityState.DEAD;
|
||||
}
|
||||
|
||||
public void SellItem(SellableItem item) {
|
||||
int price = item.GetPrice();
|
||||
RemoveFromInventory(item);
|
||||
|
||||
Money += price;
|
||||
}
|
||||
|
||||
public void SellByClass(ItemClass itemClass) {
|
||||
ArrayList<Item> items = GetInventoryByClass(itemClass);
|
||||
|
||||
for (Item item : items) {
|
||||
SellItem((SellableItem) item);
|
||||
}
|
||||
}
|
||||
|
||||
public void AddToInventory(Item item) {
|
||||
Inventory.add(item);
|
||||
}
|
||||
|
||||
public void RemoveFromInventory(Item item) {
|
||||
Inventory.remove(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public abstract void LightAttack(IDamageable target);
|
||||
@Override
|
||||
public abstract void HeavyAttack(IDamageable target);
|
||||
@Override
|
||||
public void defend() {
|
||||
IsDefending = true;
|
||||
}
|
||||
@Override
|
||||
public void HealMove() {
|
||||
Heal(HealAmount);
|
||||
}
|
||||
@Override
|
||||
public abstract void SpecialAbility(Entity entity);
|
||||
@Override
|
||||
public abstract String GetSpecialAbilityDescription(Entity entity);
|
||||
@Override
|
||||
public abstract String GetSpecialAbilityResultDescription(Entity entity);
|
||||
|
||||
@Override
|
||||
public ArrayList<FightMoves> GetAvailableMoves() {
|
||||
if (GetState() == EntityState.FROZEN) return new ArrayList<>(){};
|
||||
|
||||
ArrayList<FightMoves> result = new ArrayList<>();
|
||||
result.add(FightMoves.DEFEND);
|
||||
result.add(FightMoves.LIGHT_ATTACK);
|
||||
|
||||
if (Health < MaxHealth) {
|
||||
result.add(FightMoves.HEAL);
|
||||
}
|
||||
|
||||
if (Stamina > MaxStamina / 2) {
|
||||
result.add(FightMoves.SPECIAL);
|
||||
}
|
||||
|
||||
if (Stamina > MaxStamina / 4) {
|
||||
result.add(FightMoves.HEAVY_ATTACK);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
package org.project.entity.enemies;
|
||||
|
||||
import org.project.constants.gameConstant.AttackPowerUp;
|
||||
import org.project.constants.gameConstant.EntityState;
|
||||
import org.project.entity.Entity;
|
||||
import org.project.entity.players.Player;
|
||||
import org.project.item.Accessory.Costume;
|
||||
import org.project.item.Accessory.Shield;
|
||||
import org.project.item.Accessory.Weapon;
|
||||
import org.project.item.Item;
|
||||
import org.project.item.KeyItem;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class Dragon extends Enemy {
|
||||
public Dragon (String name, int maxHealth, int health, long money, int baseDamage, EntityState state, Weapon weapon,
|
||||
Shield shield, Costume costume, ArrayList<Item> inventory, int defenseBonus, boolean isDefending,
|
||||
int healAmount, int stamina, int maxStamina) {
|
||||
|
||||
super(name, maxHealth, health, money, baseDamage, state, weapon, shield, costume, inventory, defenseBonus, isDefending, healAmount, stamina, maxStamina);
|
||||
|
||||
this.Key = new KeyItem("Dragon Key", this);
|
||||
}
|
||||
|
||||
public Dragon() {
|
||||
this("Dragon", 5000, 5000, 0, 100, EntityState.ALIVE, null, null, null, new ArrayList<>(){}, 50, false, 50, 500, 500);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void DropLoot(Player player) {
|
||||
Key.Owner = player;
|
||||
player.AddToInventory(Key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void SpecialAbility(Entity entity) {
|
||||
int curHealth = entity.Health;
|
||||
ModifyStamina(SpecialAbilityStamina, false);
|
||||
Damage(entity, GetDamage(), new AttackPowerUp[]{AttackPowerUp.INEVITABLE});
|
||||
Heal(curHealth - entity.Health);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String GetSpecialAbilityDescription(Entity entity) {
|
||||
return "Vampire will suck the blood out of " + entity.Name + " and heal themselves while hurting the enemy";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String GetSpecialAbilityResultDescription(Entity entity) {
|
||||
return "Vampire attacked " + entity.Name + " and sucked his blood out of his veins. He seems more powerful";
|
||||
}
|
||||
}
|
||||
@@ -1,34 +1,103 @@
|
||||
package org.project.entity.enemies;
|
||||
|
||||
import org.project.item.weapons.Weapon;
|
||||
import org.project.Interface.IDamageable;
|
||||
import org.project.constants.gameConstant.AttackPowerUp;
|
||||
import org.project.constants.gameConstant.EntityState;
|
||||
import org.project.constants.gameConstant.FightMoves;
|
||||
import org.project.constants.gameConstant.ItemClass;
|
||||
import org.project.entity.Entity;
|
||||
import org.project.entity.players.Player;
|
||||
import org.project.item.Accessory.Costume;
|
||||
import org.project.item.Accessory.Shield;
|
||||
import org.project.item.Accessory.Weapon;
|
||||
import org.project.item.Item;
|
||||
import org.project.item.KeyItem;
|
||||
|
||||
// TODO: UPDATE IMPLEMENTATION
|
||||
public abstract class Enemy {
|
||||
Weapon weapon;
|
||||
private int hp;
|
||||
private int mp;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Objects;
|
||||
import java.util.Random;
|
||||
|
||||
public Enemy(int hp, int mp, Weapon weapon) {
|
||||
this.hp = hp;
|
||||
this.mp = mp;
|
||||
public abstract class Enemy extends Entity {
|
||||
protected KeyItem Key;
|
||||
|
||||
this.weapon = weapon;
|
||||
public Enemy (String name, int maxHealth, int health, long money, int baseDamage, EntityState state, Weapon weapon,
|
||||
Shield shield, Costume costume, ArrayList<Item> inventory, int defenseBonus, boolean isDefending,
|
||||
int healAmount, int stamina, int maxStamina) {
|
||||
|
||||
super(name, maxHealth, health, stamina, maxStamina, money, baseDamage, state, weapon, shield, costume, inventory, defenseBonus, isDefending, healAmount);
|
||||
|
||||
Key = new KeyItem(null, this);
|
||||
}
|
||||
|
||||
protected Enemy() {
|
||||
super();
|
||||
}
|
||||
|
||||
public void DropLoot(Player player) {
|
||||
Random random = new Random();
|
||||
|
||||
for (Item item : Inventory) {
|
||||
int change = random.nextInt(2);
|
||||
|
||||
if (change == 0) {
|
||||
player.AddToInventory(item);
|
||||
}
|
||||
}
|
||||
|
||||
ArrayList<Item> keys = player.GetInventoryByClass(ItemClass.KEY);
|
||||
if (keys.stream().noneMatch(obj -> Objects.equals(obj.getName(), Key.getName()))) {
|
||||
int chance = random.nextInt(5);
|
||||
|
||||
if (chance == 0) {
|
||||
Key.Owner = player;
|
||||
player.AddToInventory(Key);
|
||||
}
|
||||
}
|
||||
|
||||
player.ModifyMoney(GetMoney(), true);
|
||||
}
|
||||
|
||||
public void PlayRound(Player player) {
|
||||
ArrayList<FightMoves> moves = GetAvailableMoves();
|
||||
Random random = new Random();
|
||||
int change = random.nextInt(4);
|
||||
|
||||
if (change == 0 && moves.contains(FightMoves.HEAL)) HealMove();
|
||||
else if (change == 1 && moves.contains(FightMoves.DEFEND)) defend();
|
||||
else if (moves.contains(FightMoves.SPECIAL)) SpecialAbility(player);
|
||||
else if (moves.contains(FightMoves.HEAVY_ATTACK)) HeavyAttack(player);
|
||||
else LightAttack(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void takeDamage(int damage) {
|
||||
hp -= damage;
|
||||
public void LightAttack(IDamageable target) {
|
||||
int damage = GetDamage();
|
||||
|
||||
Damage(target, (int)(damage * 0.4), new AttackPowerUp[]{});
|
||||
ModifyStamina(MaxStamina/8, true);
|
||||
}
|
||||
|
||||
public int getHp() {
|
||||
return hp;
|
||||
@Override
|
||||
public void HeavyAttack(IDamageable target) {
|
||||
int damage = GetDamage();
|
||||
ModifyStamina(HeavyAttackStamina, false);
|
||||
|
||||
Damage(target, (int)(damage * 0.9), new AttackPowerUp[]{});
|
||||
}
|
||||
|
||||
public int getMp() {
|
||||
return mp;
|
||||
@Override
|
||||
public void HealMove() {
|
||||
super.HealMove();
|
||||
ModifyStamina(MaxStamina/4, true);
|
||||
}
|
||||
|
||||
public Weapon getWeapon() {
|
||||
return weapon;
|
||||
}
|
||||
@Override
|
||||
public abstract void SpecialAbility(Entity entity);
|
||||
|
||||
@Override
|
||||
public abstract String GetSpecialAbilityDescription(Entity entity);
|
||||
|
||||
@Override
|
||||
public abstract String GetSpecialAbilityResultDescription(Entity entity);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
package org.project.entity.enemies;
|
||||
|
||||
public class Goblin extends Enemy {
|
||||
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
package org.project.entity.enemies;
|
||||
|
||||
// TODO: UPDATE IMPLEMENTATION
|
||||
public class Skeleton {
|
||||
// TODO: DESIGN ENEMY AND IMPLEMENT THE CONSTRUCTOR
|
||||
public class Skeleton extends Enemy {
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
package org.project.entity.enemies;
|
||||
|
||||
import org.project.constants.gameConstant.AttackPowerUp;
|
||||
import org.project.constants.gameConstant.EntityState;
|
||||
import org.project.entity.Entity;
|
||||
import org.project.item.Accessory.Costume;
|
||||
import org.project.item.Accessory.Shield;
|
||||
import org.project.item.Accessory.Weapon;
|
||||
import org.project.item.Item;
|
||||
import org.project.item.KeyItem;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class Vampire extends Enemy {
|
||||
public Vampire (String name, int maxHealth, int health, long money, int baseDamage, EntityState state, Weapon weapon,
|
||||
Shield shield, Costume costume, ArrayList<Item> inventory, int defenseBonus, boolean isDefending,
|
||||
int healAmount, int stamina, int maxStamina) {
|
||||
|
||||
super(name, maxHealth, health, money, baseDamage, state, weapon, shield, costume, inventory, defenseBonus, isDefending, healAmount, stamina, maxStamina);
|
||||
|
||||
this.Key = new KeyItem("Vampire Key", this);
|
||||
}
|
||||
|
||||
public Vampire() {
|
||||
this("Vampire", 150, 150, 100, 20, EntityState.ALIVE, null, null, null, new ArrayList<>(), 8, false, 30, 100, 100);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void SpecialAbility(Entity entity) {
|
||||
int curHealth = entity.Health;
|
||||
ModifyStamina(SpecialAbilityStamina, false);
|
||||
Damage(entity, GetDamage(), new AttackPowerUp[]{AttackPowerUp.INEVITABLE});
|
||||
Heal(curHealth - entity.Health);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String GetSpecialAbilityDescription(Entity entity) {
|
||||
return "Vampire will suck the blood out of " + entity.Name + " and heal themselves while hurting the enemy";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String GetSpecialAbilityResultDescription(Entity entity) {
|
||||
return "Vampire attacked " + entity.Name + " and sucked his blood out of his veins. He seems more powerful";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package org.project.entity.players;
|
||||
|
||||
import org.project.constants.gameConstant.AttackPowerUp;
|
||||
import org.project.constants.gameConstant.EntityState;
|
||||
import org.project.entity.Entity;
|
||||
import org.project.item.Accessory.Costume;
|
||||
import org.project.item.Accessory.Shield;
|
||||
import org.project.item.Accessory.Weapon;
|
||||
import org.project.item.Item;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class Assassin extends Player {
|
||||
public Assassin(String name, int maxHealth, int health, long money, int baseDamage, EntityState state, Weapon weapon,
|
||||
Shield shield, Costume costume, ArrayList<Item> inventory, int defenseBonus, boolean isDefending,
|
||||
int healAmount, int stamina, int maxStamina, int level, int levelProgress) {
|
||||
|
||||
super(name, maxHealth, health, money, baseDamage, state, weapon, shield, costume, inventory, defenseBonus, isDefending, healAmount, stamina, maxStamina, level, levelProgress);
|
||||
}
|
||||
|
||||
public Assassin(String name, int level) {
|
||||
this(name);
|
||||
LevelUpTo(level);
|
||||
}
|
||||
|
||||
public Assassin(String name) {
|
||||
this(name, 125, 125, 100, 15, EntityState.ALIVE, null, null, null, new ArrayList<>(), 5, false, 35, 100, 100, 1, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void SpecialAbility(Entity entity) {
|
||||
ModifyStamina(SpecialAbilityStamina, false);
|
||||
entity.SetState(EntityState.FROZEN);
|
||||
Damage(entity, GetDamage() * 3, new AttackPowerUp[]{AttackPowerUp.NO_DEFENSE});
|
||||
Heal(MaxHealth/4);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String GetSpecialAbilityDescription(Entity entity) {
|
||||
return "Turn invisible and cause a critical damage to " + entity.Name + ". Your enemy cannot defend your attack \n";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String GetSpecialAbilityResultDescription(Entity entity) {
|
||||
if (entity.IsDefending) {
|
||||
return entity.Name + " Holds their guard up, but you strike them from another direction";
|
||||
}
|
||||
return "\"Show Yourself coward\" Says " + entity.Name + " As they helplessly try to hit you. But their eyes cannot find you no matter how hard they try";
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,50 @@
|
||||
package org.project.entity.players;
|
||||
|
||||
// TODO: UPDATE IMPLEMENTATION
|
||||
public class Knight {
|
||||
// TODO: DESIGN KNIGHT'S WEAPON AND ARMOR AND IMPLEMENT THE CONSTRUCTOR
|
||||
import org.project.constants.gameConstant.AttackPowerUp;
|
||||
import org.project.constants.gameConstant.EntityState;
|
||||
import org.project.entity.Entity;
|
||||
import org.project.item.Accessory.Costume;
|
||||
import org.project.item.Accessory.Shield;
|
||||
import org.project.item.Accessory.Weapon;
|
||||
import org.project.item.Item;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class Knight extends Player {
|
||||
public Knight(String name, int maxHealth, int health, long money, int baseDamage, EntityState state, Weapon weapon,
|
||||
Shield shield, Costume costume, ArrayList<Item> inventory, int defenseBonus, boolean isDefending,
|
||||
int healAmount, int stamina, int maxStamina, int level, int levelProgress) {
|
||||
|
||||
super(name, maxHealth, health, money, baseDamage, state, weapon, shield, costume, inventory, defenseBonus, isDefending, healAmount, stamina, maxStamina, level, levelProgress);
|
||||
}
|
||||
|
||||
public Knight(String name, int level) {
|
||||
this(name);
|
||||
LevelUpTo(level);
|
||||
}
|
||||
|
||||
public Knight(String name) {
|
||||
this(name, 150, 150, 100, 20, EntityState.ALIVE, null, null, null, new ArrayList<>(), 8, false, 30, 100, 100, 1, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void SpecialAbility(Entity entity) {
|
||||
ModifyStamina(SpecialAbilityStamina, false);
|
||||
Damage(entity, GetDamage(), new AttackPowerUp[]{});
|
||||
entity.SetState(EntityState.FROZEN);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String GetSpecialAbilityDescription(Entity entity) {
|
||||
return "Slam " + entity.Name + "with your unstoppable strength and stun them for the next turn";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String GetSpecialAbilityResultDescription(Entity entity) {
|
||||
if (entity.IsDefending) {
|
||||
return "You slammed " + entity.Name + ", they try to defend, but they were thrown to the ground";
|
||||
}
|
||||
|
||||
return "You slammed " + entity.Name + ", your enemy seems deezy";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,89 +1,90 @@
|
||||
package org.project.entity.players;
|
||||
|
||||
import org.project.Interface.IDamageable;
|
||||
import org.project.constants.gameConstant.AttackPowerUp;
|
||||
import org.project.constants.gameConstant.EntityState;
|
||||
import org.project.entity.Entity;
|
||||
import org.project.item.armors.Armor;
|
||||
import org.project.item.weapons.Weapon;
|
||||
import org.project.item.Accessory.Costume;
|
||||
import org.project.item.Accessory.Shield;
|
||||
import org.project.item.Accessory.Weapon;
|
||||
import org.project.item.Item;
|
||||
|
||||
// TODO: UPDATE IMPLEMENTATION
|
||||
public abstract class Player {
|
||||
protected String name;
|
||||
Weapon weapon;
|
||||
Armor armor;
|
||||
private int hp;
|
||||
private int maxHP;
|
||||
private int mp;
|
||||
private int maxMP;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public Player(String name, int hp, int mp, Weapon weapon, Armor armor) {
|
||||
this.name = name;
|
||||
this.hp = hp;
|
||||
this.mp = mp;
|
||||
public abstract class Player extends Entity {
|
||||
public int Level;
|
||||
private int LevelProgress;
|
||||
|
||||
this.weapon = weapon;
|
||||
this.armor = armor;
|
||||
public Player (String name, int maxHealth, int health, long money, int baseDamage, EntityState state, Weapon weapon,
|
||||
Shield shield, Costume costume, ArrayList<Item> inventory, int defenseBonus, boolean isDefending,
|
||||
int healAmount, int stamina, int maxStamina, int level, int levelProgress) {
|
||||
|
||||
super(name, maxHealth, health, stamina, maxStamina, money, baseDamage, state, weapon, shield, costume, inventory, defenseBonus, isDefending, healAmount);
|
||||
|
||||
Level = level;
|
||||
LevelProgress = levelProgress;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void attack(Entity target) {
|
||||
target.takeDamage(weapon.getDamage());
|
||||
protected Player() {
|
||||
super();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void defend() {
|
||||
// TODO
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void takeDamage(int damage) {
|
||||
hp -= damage - armor.getDefense();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void heal(int health) {
|
||||
hp += health;
|
||||
if (hp > maxHP) {
|
||||
hp = maxHP;
|
||||
public void LevelUpTo(int level) {
|
||||
while (Level < level) {
|
||||
LevelUp();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fillMana(int mana) {
|
||||
mp += mana;
|
||||
if (mp > maxMP) {
|
||||
mp = maxMP;
|
||||
public void AddLevelProgress(int amount) {
|
||||
LevelProgress += amount;
|
||||
|
||||
if (LevelProgress >= 100) {
|
||||
LevelUp();
|
||||
}
|
||||
}
|
||||
|
||||
public void LevelUp() {
|
||||
Level++;
|
||||
double upgradeRatio = (1.1 + ((double) Level * 0.02));
|
||||
int gift = Level * 10;
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public int getHp() {
|
||||
return hp;
|
||||
LevelProgress -= 100;
|
||||
MaxStamina = (int) (MaxStamina * upgradeRatio);
|
||||
MaxHealth = (int) (MaxHealth * upgradeRatio);
|
||||
BaseDamage = (int) (BaseDamage * upgradeRatio);
|
||||
DefenseBonus = (int) (DefenseBonus * upgradeRatio);
|
||||
HealAmount = (int) (HealAmount * upgradeRatio);
|
||||
ModifyMoney(gift, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxHP() {
|
||||
return maxHP;
|
||||
}
|
||||
public void LightAttack(IDamageable target) {
|
||||
int damage = GetDamage();
|
||||
|
||||
public int getMp() {
|
||||
return mp;
|
||||
Damage(target, (int)(damage * 0.5), new AttackPowerUp[]{});
|
||||
ModifyStamina(MaxStamina/8, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxMP() {
|
||||
return maxMP;
|
||||
public void HeavyAttack(IDamageable target) {
|
||||
int damage = GetDamage();
|
||||
ModifyStamina(HeavyAttackStamina, false);
|
||||
|
||||
Damage(target, damage, new AttackPowerUp[]{});
|
||||
}
|
||||
|
||||
public Weapon getWeapon() {
|
||||
return weapon;
|
||||
@Override
|
||||
public void HealMove() {
|
||||
super.HealMove();
|
||||
ModifyStamina(MaxStamina/4, true);
|
||||
}
|
||||
|
||||
public Armor getArmor() {
|
||||
return armor;
|
||||
}
|
||||
@Override
|
||||
public abstract void SpecialAbility(Entity entity);
|
||||
|
||||
@Override
|
||||
public abstract String GetSpecialAbilityDescription(Entity entity);
|
||||
|
||||
@Override
|
||||
public abstract String GetSpecialAbilityResultDescription(Entity entity);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
package org.project.entity.players;
|
||||
|
||||
import org.project.constants.gameConstant.AttackPowerUp;
|
||||
import org.project.constants.gameConstant.EntityState;
|
||||
import org.project.entity.Entity;
|
||||
import org.project.item.Accessory.Costume;
|
||||
import org.project.item.Accessory.Shield;
|
||||
import org.project.item.Accessory.Weapon;
|
||||
import org.project.item.Item;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class Wizard extends Player {
|
||||
public Wizard(String name, int maxHealth, int health, long money, int baseDamage, EntityState state, Weapon weapon,
|
||||
Shield shield, Costume costume, ArrayList<Item> inventory, int defenseBonus, boolean isDefending,
|
||||
int healAmount, int stamina, int maxStamina, int level, int levelProgress) {
|
||||
|
||||
super(name, maxHealth, health, money, baseDamage, state, weapon, shield, costume, inventory, defenseBonus, isDefending, healAmount, stamina, maxStamina, level, levelProgress);
|
||||
}
|
||||
|
||||
public Wizard(String name, int level) {
|
||||
this(name);
|
||||
LevelUpTo(level);
|
||||
}
|
||||
|
||||
public Wizard(String name) {
|
||||
this(name, 100, 100, 100, 15, EntityState.ALIVE, null, null, null, new ArrayList<>(), 5, false, 40, 100, 100, 1, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void SpecialAbility(Entity entity) {
|
||||
ModifyStamina(SpecialAbilityStamina, false);
|
||||
Damage(entity, GetDamage() * 3, new AttackPowerUp[]{AttackPowerUp.INEVITABLE});
|
||||
Heal(MaxHealth/4);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String GetSpecialAbilityDescription(Entity entity) {
|
||||
return "Cast a spell to damage " + entity.Name + "and heal yourself. Your spell will pass enemy's defences";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String GetSpecialAbilityResultDescription(Entity entity) {
|
||||
return "You cased the spell, enemy cannot do anything but to look at you with fear";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
package org.project.item.Accessory;
|
||||
|
||||
import org.project.Interface.IAttachable;
|
||||
import org.project.Interface.IDamageable;
|
||||
import org.project.constants.gameConstant.AttackPowerUp;
|
||||
import org.project.entity.Entity;
|
||||
import org.project.item.SellableItem;
|
||||
|
||||
public abstract class Accessory extends SellableItem implements IDamageable, IAttachable {
|
||||
private int Health;
|
||||
private final int MaxHealth;
|
||||
|
||||
public Accessory (String name, Entity owner, int price, int health, int maxHealth) {
|
||||
super(name, owner, price);
|
||||
this.Health = health;
|
||||
this.MaxHealth = maxHealth;
|
||||
}
|
||||
|
||||
public int GetHealth() {
|
||||
return Health;
|
||||
}
|
||||
|
||||
public int GetMaxHealth() { return MaxHealth; }
|
||||
|
||||
@Override
|
||||
public int GetPrice() {
|
||||
int basePrice = super.GetPrice();
|
||||
|
||||
return basePrice * (Health/MaxHealth);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void TakeDamage(int amount, AttackPowerUp[] powerUps) {
|
||||
Health -= amount;
|
||||
|
||||
if (IsDestroyed()) {
|
||||
HandleZeroHealth();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean IsDestroyed() {
|
||||
return Health < 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void HandleZeroHealth() {
|
||||
this.DeattachFrom(this.Owner);
|
||||
this.Owner.Inventory.remove(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public abstract void AttachTo(Entity entity);
|
||||
|
||||
@Override
|
||||
public abstract void DeattachFrom(Entity entity);
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package org.project.item.Accessory;
|
||||
|
||||
import org.project.Interface.IDefender;
|
||||
import org.project.constants.gameConstant.AttackPowerUp;
|
||||
import org.project.entity.Entity;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
public class Costume extends Accessory implements IDefender {
|
||||
private final int Defense;
|
||||
|
||||
public Costume(String name, Entity owner, int price, int health, int maxHealth, int defense) {
|
||||
super(name, owner, price, health, maxHealth);
|
||||
this.Defense = defense;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int GetDefense() {
|
||||
return Defense;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int Apply(int damage, AttackPowerUp[] powerUps) {
|
||||
if (Arrays.binarySearch(powerUps, AttackPowerUp.ANTI_CUSTOM) < 0) {
|
||||
return damage;
|
||||
}
|
||||
|
||||
if (damage <= Defense) {
|
||||
this.TakeDamage(damage, null);
|
||||
return 0;
|
||||
}
|
||||
|
||||
this.TakeDamage(Defense, null);
|
||||
return damage - Defense;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void AttachTo(Entity entity) {
|
||||
entity.RemoveFromInventory(this);
|
||||
entity.Costume = this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void DeattachFrom(Entity entity) {
|
||||
entity.Costume = null;
|
||||
entity.AddToInventory(this);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package org.project.item.Accessory;
|
||||
|
||||
import org.project.Interface.IDefender;
|
||||
import org.project.constants.gameConstant.AttackPowerUp;
|
||||
import org.project.entity.Entity;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
public class Shield extends Accessory implements IDefender {
|
||||
private final int Defense;
|
||||
|
||||
public Shield (String name, Entity owner, int price, int health, int maxHealth, int defense) {
|
||||
super(name, owner, price, health, maxHealth);
|
||||
this.Defense = defense;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int GetDefense() {
|
||||
return Defense;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int Apply(int damage, AttackPowerUp[] powerUps) {
|
||||
if (Arrays.binarySearch(powerUps, AttackPowerUp.ANTI_SHIELD) < 0) {
|
||||
return damage;
|
||||
}
|
||||
|
||||
if (damage <= Defense) {
|
||||
this.TakeDamage(damage, null);
|
||||
return 0;
|
||||
}
|
||||
|
||||
this.TakeDamage(Defense, null);
|
||||
return damage - Defense;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void AttachTo(Entity entity) {
|
||||
entity.RemoveFromInventory(this);
|
||||
entity.Shield = this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void DeattachFrom(Entity entity) {
|
||||
entity.Shield = null;
|
||||
entity.AddToInventory(this);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package org.project.item.Accessory;
|
||||
|
||||
import org.project.Interface.IDamageUtil;
|
||||
import org.project.entity.Entity;
|
||||
|
||||
public class Weapon extends Accessory implements IDamageUtil {
|
||||
private final int Damage;
|
||||
|
||||
public Weapon (String name, Entity owner, int price, int health, int maxHealth, int damage) {
|
||||
super(name, owner, price, health, maxHealth);
|
||||
this.Damage = damage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int GetDamage() {
|
||||
return Damage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void AttachTo(Entity entity) {
|
||||
entity.RemoveFromInventory(this);
|
||||
entity.Weapon = this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void DeattachFrom(Entity entity) {
|
||||
entity.Weapon = null;
|
||||
entity.AddToInventory(this);
|
||||
}
|
||||
}
|
||||
@@ -2,10 +2,16 @@ package org.project.item;
|
||||
|
||||
import org.project.entity.Entity;
|
||||
|
||||
public interface Item {
|
||||
void use(Entity target);
|
||||
public abstract class Item {
|
||||
private final String Name;
|
||||
public Entity Owner;
|
||||
|
||||
/*
|
||||
TODO: ADD OTHER REQUIRED AND BONUS METHODS
|
||||
*/
|
||||
public Item (String name, Entity owner) {
|
||||
this.Name = name;
|
||||
this.Owner = owner;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return Name;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package org.project.item;
|
||||
|
||||
import org.project.entity.Entity;
|
||||
|
||||
public class KeyItem extends Item {
|
||||
public KeyItem (String name, Entity owner) {
|
||||
super(name, owner);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package org.project.item;
|
||||
|
||||
import org.project.entity.Entity;
|
||||
|
||||
public class SellableItem extends Item{
|
||||
private final int Price;
|
||||
|
||||
public SellableItem (String name, Entity owner, int price) {
|
||||
super(name, owner);
|
||||
this.Price = price;
|
||||
}
|
||||
|
||||
public int GetPrice() {
|
||||
return Price;
|
||||
}
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
package org.project.item.armors;
|
||||
|
||||
// TODO: UPDATE IMPLEMENTATION
|
||||
public abstract class Armor {
|
||||
private int defense;
|
||||
private int maxDefense;
|
||||
private int durability;
|
||||
private int maxDurability;
|
||||
|
||||
private boolean isBroke;
|
||||
|
||||
public Armor(int defense, int durability) {
|
||||
this.defense = defense;
|
||||
this.durability = durability;
|
||||
}
|
||||
|
||||
public void checkBreak() {
|
||||
if (durability <= 0) {
|
||||
isBroke = true;
|
||||
defense = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: (BONUS) UPDATE THE REPAIR METHOD
|
||||
public void repair() {
|
||||
isBroke = false;
|
||||
defense = maxDefense;
|
||||
durability = maxDurability;
|
||||
}
|
||||
|
||||
public int getDefense() {
|
||||
return defense;
|
||||
}
|
||||
|
||||
public int getDurability() {
|
||||
return durability;
|
||||
}
|
||||
|
||||
public boolean isBroke() {
|
||||
return isBroke;
|
||||
}
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
package org.project.item.armors;
|
||||
|
||||
// TODO: UPDATE IMPLEMENTATION
|
||||
public class KnightArmor {
|
||||
// TODO: DESIGN ARMOR'S ATTRIBUTES IMPLEMENT THE CONSTRUCTOR
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
package org.project.item.consumables;
|
||||
|
||||
// TODO: UPDATE IMPLEMENTATION
|
||||
public abstract class Consumable {
|
||||
/*
|
||||
TODO: ADD OTHER REQUIRED AND BONUS METHODS
|
||||
*/
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
package org.project.item.consumables;
|
||||
|
||||
import org.project.entity.Entity;
|
||||
|
||||
// TODO: UPDATE IMPLEMENTATION
|
||||
public class Flask {
|
||||
/*
|
||||
THIS IS AN EXAMPLE OF A CONSUMABLE DESIGN.
|
||||
*/
|
||||
|
||||
// TODO: UPDATE USE METHOD
|
||||
@Override
|
||||
public void use(Entity target) {
|
||||
target.heal(target.getMaxHP() / 10);
|
||||
}
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
package org.project.item.weapons;
|
||||
|
||||
import org.project.entity.Entity;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
// TODO: UPDATE IMPLEMENTATION
|
||||
public class Sword {
|
||||
/*
|
||||
THIS IS AN EXAMPLE OF A WEAPON DESIGN.
|
||||
*/
|
||||
|
||||
int abilityCharge;
|
||||
|
||||
public Sword() {
|
||||
// TODO: DESIGN SWORD'S ATTRIBUTES IMPLEMENT THE CONSTRUCTOR
|
||||
}
|
||||
|
||||
// TODO: (BONUS) UPDATE THE UNIQUE ABILITY
|
||||
public void uniqueAbility(ArrayList<Entity> targets) {
|
||||
abilityCharge += 2;
|
||||
for (Entity target : targets) {
|
||||
target.takeDamage(getDamage());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
package org.project.item.weapons;
|
||||
|
||||
import org.project.entity.Entity;
|
||||
|
||||
// TODO: UPDATE IMPLEMENTATION
|
||||
public abstract class Weapon {
|
||||
private int damage;
|
||||
private int manaCost;
|
||||
|
||||
/*
|
||||
TODO: ADD OTHER REQUIRED AND BONUS ATTRIBUTES
|
||||
*/
|
||||
|
||||
public Weapon(int damage, int manaCost) {
|
||||
this.damage = damage;
|
||||
this.manaCost = manaCost;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void use(Entity target) {
|
||||
target.takeDamage(damage);
|
||||
}
|
||||
|
||||
public int getDamage() {
|
||||
return damage;
|
||||
}
|
||||
|
||||
public int getManaCost() {
|
||||
return manaCost;
|
||||
}
|
||||
|
||||
/*
|
||||
TODO: ADD OTHER REQUIRED AND BONUS METHODS
|
||||
*/
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
package org.project.util;
|
||||
|
||||
public class DisplayItem {
|
||||
}
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.3 MiB |
Binary file not shown.
|
Before Width: | Height: | Size: 67 KiB |
Reference in New Issue
Block a user