Compare commits
No commits in common. 'foo' and 'master' have entirely different histories.
@ -1,28 +1,78 @@
|
|||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
const MotionLib = preload("res://scenes/Global/MotionLib.gd")
|
class Motion:
|
||||||
|
pass
|
||||||
|
|
||||||
|
class Recover extends Motion:
|
||||||
|
''' Animation '''
|
||||||
|
pass
|
||||||
|
|
||||||
|
class Action extends Motion:
|
||||||
|
pass
|
||||||
|
|
||||||
|
class ActionOnSelf extends Action:
|
||||||
|
pass
|
||||||
|
|
||||||
|
class Wait extends ActionOnSelf:
|
||||||
|
''' Animation '''
|
||||||
|
pass
|
||||||
|
|
||||||
class Skill:
|
class Buff extends ActionOnSelf:
|
||||||
|
''' Animation '''
|
||||||
pass
|
pass
|
||||||
|
|
||||||
class Action extends Skill:
|
class ActionOnOpponent extends Action:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
class Reaction extends Skill:
|
class Attack extends ActionOnOpponent:
|
||||||
|
''' Animation '''
|
||||||
|
func get_damage() -> int:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
class Debuff extends ActionOnOpponent:
|
||||||
|
''' Animation '''
|
||||||
|
pass
|
||||||
|
|
||||||
|
class Reaction extends Motion:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
class Passive extends Skill:
|
class Counter extends Reaction:
|
||||||
|
''' Animation '''
|
||||||
pass
|
pass
|
||||||
|
|
||||||
class Stats:
|
class Defense extends Reaction:
|
||||||
var strength : int
|
func was_successful() -> bool:
|
||||||
var constituion : int
|
return true
|
||||||
var agility : int
|
|
||||||
var chi : int
|
class Block extends Defense:
|
||||||
|
''' Animation '''
|
||||||
|
pass
|
||||||
|
|
||||||
|
class Evade extends Defense:
|
||||||
|
''' Animation '''
|
||||||
|
pass
|
||||||
|
|
||||||
|
class Round:
|
||||||
|
pass
|
||||||
|
|
||||||
class CharacterLineup:
|
var actions = ["Attack", "Block", "Evade"]
|
||||||
var stats : Stats
|
|
||||||
var skills : Array[Skill]
|
|
||||||
|
|
||||||
func calculateFight(player1 : CharacterLineup, player2 : CharacterLineup) -> MotionLib.MotionReport:
|
var rounds : Array[Round] = [
|
||||||
return MotionLib.MotionReport.new()
|
Round.new(),
|
||||||
|
Round.new(),
|
||||||
|
Round.new(),
|
||||||
|
Round.new(),
|
||||||
|
Round.new(),
|
||||||
|
Round.new(),
|
||||||
|
Round.new(),
|
||||||
|
Round.new(),
|
||||||
|
Round.new(),
|
||||||
|
Round.new(),
|
||||||
|
Round.new(),
|
||||||
|
Round.new(),
|
||||||
|
Round.new(),
|
||||||
|
Round.new(),
|
||||||
|
Round.new(),
|
||||||
|
Round.new(),
|
||||||
|
Round.new(),
|
||||||
|
]
|
||||||
|
@ -1 +1 @@
|
|||||||
uid://wkn5qvs3fw82
|
uid://btq7nf3fo58d3
|
||||||
|
@ -1,108 +0,0 @@
|
|||||||
extends Node
|
|
||||||
|
|
||||||
|
|
||||||
class Someone extends Object:
|
|
||||||
var name : String
|
|
||||||
|
|
||||||
func _init(name : String) -> void:
|
|
||||||
self.name = name
|
|
||||||
|
|
||||||
class Motion extends Object:
|
|
||||||
var originator : Someone
|
|
||||||
var animation : String
|
|
||||||
var stamina_change : float
|
|
||||||
|
|
||||||
func _init(originator : Someone, animation : String, stamina_change : float = 0) -> void:
|
|
||||||
self.originator = originator
|
|
||||||
self.animation = animation
|
|
||||||
self.stamina_change = stamina_change
|
|
||||||
|
|
||||||
class Recover extends Motion:
|
|
||||||
''' Animation '''
|
|
||||||
pass
|
|
||||||
|
|
||||||
class Reaction extends Motion:
|
|
||||||
var hp_change : float
|
|
||||||
|
|
||||||
func _init(originator : Someone, animation: String, stamina_costs: float, hp_change : float):
|
|
||||||
super._init(originator, animation, -stamina_costs)
|
|
||||||
self.hp_change = hp_change
|
|
||||||
|
|
||||||
class Counter extends Reaction:
|
|
||||||
var damage : float
|
|
||||||
|
|
||||||
func _init(originator : Someone, animation: String, stamina_costs: float, damage : float):
|
|
||||||
super._init(originator, animation, -stamina_costs, 0)
|
|
||||||
self.damage = damage
|
|
||||||
|
|
||||||
class Defense extends Reaction:
|
|
||||||
var successful : bool
|
|
||||||
|
|
||||||
func _init(originator : Someone, animation: String, stamina_costs: float, hp_change : float):
|
|
||||||
super._init(originator, animation, -stamina_costs, hp_change)
|
|
||||||
self.successful = hp_change == 0.0
|
|
||||||
|
|
||||||
class Block extends Defense:
|
|
||||||
func _init(originator : Someone, animation : String, stamina_costs: float, hp_change : float):
|
|
||||||
super._init(originator, animation, stamina_costs, hp_change)
|
|
||||||
|
|
||||||
class Evade extends Defense:
|
|
||||||
''' Successfully, evaded? '''
|
|
||||||
|
|
||||||
func _init(originator : Someone, animation : String, stamina_costs: float, hp_change : float):
|
|
||||||
super._init(originator, animation, stamina_costs, hp_change)
|
|
||||||
|
|
||||||
class Absorb extends Reaction:
|
|
||||||
''' Actually, accept being hit '''
|
|
||||||
|
|
||||||
func _init(originator : Someone, animation: String, stamina_costs: float, hp_change : float):
|
|
||||||
super._init(originator, animation, -stamina_costs, hp_change)
|
|
||||||
|
|
||||||
|
|
||||||
class Action extends Motion:
|
|
||||||
pass
|
|
||||||
|
|
||||||
class ActionOnSelf extends Action:
|
|
||||||
pass
|
|
||||||
|
|
||||||
class Wait extends ActionOnSelf:
|
|
||||||
func _init(originator : Someone, animation : String, stamina_gain : float):
|
|
||||||
super._init(originator, animation, stamina_gain)
|
|
||||||
|
|
||||||
class Buff extends ActionOnSelf:
|
|
||||||
func _init(originator : Someone, animation : String) -> void:
|
|
||||||
super._init(originator, animation, 1.0)
|
|
||||||
|
|
||||||
class ActionOnOpponent extends Action:
|
|
||||||
var opponent : Someone
|
|
||||||
var reaction : Reaction
|
|
||||||
|
|
||||||
func _init(originator : Someone, animation : String, opponent : Someone, stamina_costs : float, reaction : Reaction) -> void:
|
|
||||||
super._init(originator, animation, -stamina_costs)
|
|
||||||
self.opponent = opponent
|
|
||||||
self.reaction = reaction
|
|
||||||
|
|
||||||
class Attack extends ActionOnOpponent:
|
|
||||||
var damage : float
|
|
||||||
|
|
||||||
func _init(originator : Someone, animation : String, opponent : Someone, stamina_costs : float, reaction : Reaction) -> void:
|
|
||||||
super._init(originator, animation, opponent, stamina_costs, reaction)
|
|
||||||
|
|
||||||
class Debuff extends ActionOnOpponent:
|
|
||||||
func _init(originator : Someone, animation : String, opponent : Someone, stamina_costs : float, reaction : Reaction) -> void:
|
|
||||||
super._init(originator, animation, opponent, stamina_costs, reaction)
|
|
||||||
|
|
||||||
class MotionReport:
|
|
||||||
var player1 : Someone
|
|
||||||
var player2 : Someone
|
|
||||||
var motions : Array[Motion]
|
|
||||||
|
|
||||||
func _init():
|
|
||||||
self.player1 = Someone.new("John")
|
|
||||||
self.player2 = Someone.new("Joe")
|
|
||||||
self.motions = [
|
|
||||||
Attack.new(player1, "Kick", player2, 1.0, Absorb.new(player2, "Hit", 1, 12.0)),
|
|
||||||
Buff.new(player2, "SSJ"),
|
|
||||||
Attack.new(player1, "Punch", player2, 2.0, Block.new(player2, "Block", 1.0, true)),
|
|
||||||
Wait.new(player2, "Wait", 5.0)
|
|
||||||
]
|
|
@ -1 +0,0 @@
|
|||||||
uid://btq7nf3fo58d3
|
|
@ -1,52 +0,0 @@
|
|||||||
extends Node
|
|
||||||
|
|
||||||
const MotionLib = preload("res://scenes/Global/MotionLib.gd")
|
|
||||||
|
|
||||||
class PlayerAnimation extends Object:
|
|
||||||
var animation : String
|
|
||||||
var hp_change : float
|
|
||||||
var stamina_change : float
|
|
||||||
|
|
||||||
class Round extends Object:
|
|
||||||
var action: int
|
|
||||||
var animations : Array[PlayerAnimation]
|
|
||||||
|
|
||||||
class RenderReport:
|
|
||||||
var rounds: Array[Round]
|
|
||||||
|
|
||||||
func _init(report : MotionLib.MotionReport):
|
|
||||||
self.rounds = []
|
|
||||||
for motion in report.motions:
|
|
||||||
self.rounds.push_back(self.convertMotion2Round(report.player1, report.player2, motion))
|
|
||||||
|
|
||||||
func convertReaction2PlayerAnimation(reaction : MotionLib.Reaction) -> PlayerAnimation:
|
|
||||||
if reaction == null:
|
|
||||||
return null
|
|
||||||
var a = PlayerAnimation.new()
|
|
||||||
a.animation = reaction.animation
|
|
||||||
a.hp_change = -reaction.hp_change
|
|
||||||
return a
|
|
||||||
|
|
||||||
func getReaction(motion : MotionLib.Motion) -> MotionLib.Reaction:
|
|
||||||
if motion is MotionLib.ActionOnOpponent:
|
|
||||||
return motion.reaction
|
|
||||||
return null
|
|
||||||
|
|
||||||
func convertMotion2PlayerAnimation(motion : MotionLib.Motion) -> PlayerAnimation:
|
|
||||||
var a = PlayerAnimation.new()
|
|
||||||
a.animation = motion.animation
|
|
||||||
a.stamina_change = motion.stamina_change
|
|
||||||
return a
|
|
||||||
|
|
||||||
func convertMotion2Round(lhs : MotionLib.Someone, rhs : MotionLib.Someone, motion : MotionLib.Motion) -> Round:
|
|
||||||
var round = Round.new()
|
|
||||||
|
|
||||||
round.action = 0 if motion.originator == lhs else 1
|
|
||||||
round.animations.append(self.convertMotion2PlayerAnimation(motion))
|
|
||||||
var reaction = self.getReaction(motion)
|
|
||||||
round.animations.append(self.convertReaction2PlayerAnimation(reaction))
|
|
||||||
|
|
||||||
if reaction is MotionLib.Counter:
|
|
||||||
round.animations[0].hp_change = -reaction.damage
|
|
||||||
|
|
||||||
return round
|
|
@ -1 +0,0 @@
|
|||||||
uid://dad5bt8oak0ii
|
|
@ -1,6 +0,0 @@
|
|||||||
[gd_scene load_steps=2 format=3 uid="uid://bmid6fvrq22bj"]
|
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://bwchifcb7bh05" path="res://scenes/Main/fight_setup.gd" id="1_l4m47"]
|
|
||||||
|
|
||||||
[node name="FightSetup" type="Node2D"]
|
|
||||||
script = ExtResource("1_l4m47")
|
|
@ -1,23 +0,0 @@
|
|||||||
extends Node2D
|
|
||||||
|
|
||||||
const MotionLib = preload("res://scenes/Global/MotionLib.gd")
|
|
||||||
const RenderLib = preload("res://scenes/Global/RenderLib.gd")
|
|
||||||
const FightLib = preload("res://scenes/Global/FightLib.gd")
|
|
||||||
|
|
||||||
# Called when the node enters the scene tree for the first time.
|
|
||||||
func _ready():
|
|
||||||
var player1 = FightLib.CharacterLineup.new()
|
|
||||||
var player2 = FightLib.CharacterLineup.new()
|
|
||||||
|
|
||||||
var m : MotionLib.MotionReport = FightLib.new().calculateFight(player1, player2)
|
|
||||||
var r : RenderLib.RenderReport = RenderLib.RenderReport.new(m)
|
|
||||||
|
|
||||||
for round in r.rounds:
|
|
||||||
var activeIndex = round.action
|
|
||||||
var reactiveIndex = 0 if round.action == 1 else 0
|
|
||||||
var orientation = "Left" if round.action == 1 else "Right"
|
|
||||||
|
|
||||||
print("%s Player {'Animation': '%s', 'hp_change': %f, 'stamina_change': %f}" % [orientation, round.animations[0].animation, round.animations[0].hp_change, round.animations[0].stamina_change])
|
|
||||||
if round.animations[1] != null:
|
|
||||||
print("Other Player {'Animation': '%s', 'hp_change': %f, 'stamina_change': %f}" % [round.animations[1].animation, round.animations[1].hp_change, round.animations[1].stamina_change])
|
|
||||||
print()
|
|
@ -1 +0,0 @@
|
|||||||
uid://bwchifcb7bh05
|
|
Loading…
Reference in new issue