Initial commit

This commit is contained in:
2020-10-26 00:50:16 -04:00
commit e3358f6dd1
707 changed files with 12028 additions and 0 deletions

26
scripts/Creature.cs Normal file
View File

@ -0,0 +1,26 @@
using Godot;
using System;
public class Creature : KinematicBody2D
{
[Export]
public String creatureName = "UNKNOWN";
public Health health = new Health();
private Vector2 worldPosition = Vector2.Zero;
private TileMap map {
get {
return GetParent().GetChild<TileMap>(0);
}}
protected void Move(Vector2 movement)
{
// Generate new position in world and check
// if location is a valid location to move to.
Vector2 new_pos = worldPosition + movement;
if (map.IsValidMapPosition(new_pos))
{
Position = map.MapToWorld(worldPosition); // Update position based on tile location
worldPosition = new_pos; // Save new location
}
}
}

7
scripts/Enemy.cs Normal file
View File

@ -0,0 +1,7 @@
using Godot;
using System;
public class Enemy : Creature
{
}

View File

@ -0,0 +1,16 @@
using Godot;
namespace Godot
{
public static class TilemapExtensions
{
/// <summary>method <c>IsValidMapPosition</c> returns a bool of whether a location in a tilemap has no colliders.</summary>
public static bool IsValidMapPosition(this TileMap tileMap, Vector2 position)
{
int tile_id = tileMap.GetCell((int)position.x, (int)position.y);
if(tile_id >= 0)
return tileMap.TileSet.TileGetShapeCount(tile_id) == 0;
return true;
}
}
}

38
scripts/InputHandler.cs Normal file
View File

@ -0,0 +1,38 @@
using Godot;
/// <summary>Class <c>InputHandler</c> holds static methods
/// for handling player input.</summary>
public static class InputHandler
{
/// <summary>method <c>MovementInput</c> returns a Vector2 based on player input.</summary>
public static Vector2 MovementInput()
{
Vector2 movement = new Vector2();
if(Input.IsActionJustPressed("move_up"))
{
movement.y -= 1;
}
if(Input.IsActionJustPressed("move_down"))
{
movement.y += 1;
}
if(Input.IsActionJustPressed("move_right"))
{
movement.x += 1;
}
if(Input.IsActionJustPressed("move_left"))
{
movement.x -= 1;
}
return movement;
}
/// <summary>method <c>DebugKeyInput</c> returns bool when debug key is pressed in a debug build.</summary>
public static bool DebugKeyInput()
{
if(OS.IsDebugBuild())
return Input.IsActionJustPressed("debug_general");
return false;
}
}

View File

@ -0,0 +1,13 @@
using System;
using Godot;
public delegate void StatUpdatedHandler(int newValue);
interface IStat
{
int value {get;}
int max {get;}
int min {get;}
event StatUpdatedHandler statUpdated;
}

33
scripts/Player.cs Normal file
View File

@ -0,0 +1,33 @@
using Godot;
using System;
public class Player : Creature
{
[Signal]
public delegate void UpdatePlayerGuiHandler(Player player);
public override void _Ready()
{
// Update GUI on stat changes
health.statUpdated += UpdateGui;
}
public override void _Process(float delta)
{
ProcessMovement();
}
protected void ProcessMovement()
{
Move(InputHandler.MovementInput());
}
protected void UpdateGui(int newValue = -1)
{
EmitSignal(nameof(UpdatePlayerGuiHandler), this);
}
}

24
scripts/PlayerGui.cs Normal file
View File

@ -0,0 +1,24 @@
using Godot;
using System;
public class PlayerGui : CanvasLayer
{
ProgressBar healtbar;
public override void _Ready()
{
healtbar = GetNode<ProgressBar>("Control/HealthBar");
}
public void OnUpdatePlayerGui(Player player)
{
// Update healthbar
if(healtbar != null)
{
healtbar.MaxValue = player.health.max;
healtbar.MinValue = player.health.min;
healtbar.Value = player.health.value;
} else { GD.Print("WARNING: Healtbar not set!"); }
}
}

38
scripts/Stats/Health.cs Normal file
View File

@ -0,0 +1,38 @@
using System;
public class Health : IStat
{
public int value { get { return hp; }}
public int max { get { return 100; }}
public int min { get {return 0; }}
private int hp = 100;
public event StatUpdatedHandler statUpdated;
public void Heal(int heal_amount)
{
int new_val = hp - heal_amount;
if(new_val > max)
hp = max;
else
hp = new_val;
}
public void Damage(int damange_amount)
{
int new_val = hp - damange_amount;
if(new_val < min)
hp = min;
else
hp = new_val;
OnStatUpdated();
}
protected void OnStatUpdated()
{
if(statUpdated != null)
statUpdated(hp);
}
}