Commit 32c784f9 authored by Julian Gerlach's avatar Julian Gerlach
Browse files

Merge branch 'master' of https://gitlab.hasi.it/hasi-gamejam-2021/pando into main-menu

parents 78eae551 4de1478e
[gd_scene load_steps=4 format=2]
[ext_resource path="res://TileMap.cs" type="Script" id=1]
[ext_resource path="res://scripts/TileMap.cs" type="Script" id=1]
[ext_resource path="res://tileset.tres" type="TileSet" id=2]
[ext_resource path="res://tiles/WWT-08.png" type="Texture" id=3]
[ext_resource path="res://tiles/WWT-13.png" type="Texture" id=3]
[node name="Map" type="Node2D"]
......
......@@ -8,6 +8,8 @@ public class TileMap : Godot.TileMap
// private int a = 2;
// private string b = "text";
private map mapInstance = new map();
// Called when the node enters the scene tree for the first time.
public override void _Ready()
{
......@@ -18,17 +20,21 @@ public class TileMap : Godot.TileMap
public override void _Process(float delta)
{
if(Input.IsActionPressed("game_select"))
{
Vector2 vector = WorldToMap(GetGlobalMousePosition());
SetCellv(vector, 8);
}
if(Input.IsActionPressed("game_rightclick"))
{
Vector2 vector = WorldToMap(GetGlobalMousePosition());
SetCellv(vector, 0);
}
{
Vector2 vector = WorldToMap(GetGlobalMousePosition());
SetCellv(vector, 8);
mapInstance.stellDunger(0, vector);
}
if(Input.IsActionPressed("game_rightclick"))
{
Vector2 vector = WorldToMap(GetGlobalMousePosition());
SetCellv(vector, 13);
mapInstance.stellBarriere(vector);
}
}
String mode = "none";
public override void _UnhandledInput(InputEvent ev)
{
if(ev is InputEventMouseMotion move)
......@@ -37,5 +43,9 @@ public class TileMap : Godot.TileMap
Sprite sp = (Sprite) GetNode("Sprite");
sp.Position = MapToWorld(vector);
}
if (ev is InputEventKey key && key.Pressed) {
//eventKey.Pressed && eventKey.Scancode == (int)KeyList.Escape
Print("test: "+ key.Scancode);
}
}
}
using Godot;
using System;
enum PowerupType {
WachstumSprung, // mehr Wachstum budget einmalig
Fressen, // kann den Gegner fressen
}
class Powerup {
Vector2 platz;
PowerupType type;
}
class Brushable : BitMap {
public void stempeln(BitMap brush, Vector2 platz) {
Vector2 limit = brush.GetSize();
for (int x = (int)platz.x; x < Math.Min(platz.x + limit.x, GetSize().x); x++) {
for (int y = (int)platz.y; y < Math.Min(platz.y + limit.y, GetSize().y); y++) {
Vector2 pxpos = new Vector2(x, y);
bool brush_bit = brush.GetBit(pxpos - platz);
bool bild_bit = GetBit(pxpos);
SetBit(pxpos, brush_bit | bild_bit);
}
}
}
public void stempelnMitte(BitMap brush, Vector2 platz) {
Vector2 limit = brush.GetSize();
Vector2 mitte = limit / 2;
platz = platz + mitte;
stempeln(brush, platz);
}
}
class Bitwise : Brushable {
public Bitwise and(BitMap other) {
Vector2 size = GetSize();
Bitwise b = new Bitwise();
b.Create(size);
for (int x = 0; x < size.x; x++) {
for (int y = 0; y < size.y; y++) {
Vector2 pxpos = new Vector2(x, y);
bool brush_bit = other.GetBit(pxpos);
bool bild_bit = GetBit(pxpos);
SetBit(pxpos, brush_bit & bild_bit);
}
}
return b;
}
public Bitwise or(BitMap other) {
Vector2 size = GetSize();
Bitwise b = new Bitwise();
b.Create(size);
for (int x = 0; x < size.x; x++) {
for (int y = 0; y < size.y; y++) {
Vector2 pxpos = new Vector2(x, y);
bool brush_bit = other.GetBit(pxpos);
bool bild_bit = GetBit(pxpos);
SetBit(pxpos, brush_bit | bild_bit);
}
}
return b;
}
public Bitwise sub(BitMap other) {
Vector2 size = GetSize();
Bitwise b = new Bitwise();
b.Create(size);
for (int x = 0; x < size.x; x++) {
for (int y = 0; y < size.y; y++) {
Vector2 pxpos = new Vector2(x, y);
bool sub_bit = other.GetBit(pxpos);
bool bit = GetBit(pxpos);
SetBit(pxpos, !sub_bit & bit);
}
}
return b;
}
public Bitwise neg() {
Vector2 size = GetSize();
Bitwise b = new Bitwise();
b.Create(size);
for (int x = 0; x < size.x; x++) {
for (int y = 0; y < size.y; y++) {
Vector2 pxpos = new Vector2(x, y);
bool bit = GetBit(pxpos);
SetBit(pxpos, !bit);
}
}
return b;
}
}
public class map : Node2D
{
private Bitwise[] spieler = new Bitwise[] { new Bitwise(), new Bitwise() };
private Bitwise[] dunger = new Bitwise[] { new Bitwise(), new Bitwise() };
private Bitwise barrieren = new Bitwise(); // wasser?
private void reset(Vector2 grosse) {
spieler[0].Create(grosse);
spieler[1].Create(grosse);
dunger[0].Create(grosse);
dunger[1].Create(grosse);
barrieren.Create(grosse);
}
private static BitMap kvadrat() {
BitMap b = new BitMap();
b.Create(new Vector2(3, 3));
// bin faul, super einfach gemacht
b.SetBitRect(new Rect2(0, 0, 3, 3), true);
return b;
}
private static BitMap punkt() {
BitMap b = new BitMap();
b.Create(new Vector2(1, 1));
b.SetBit(new Vector2(1, 1), true);
return b;
}
private static BitMap spielerStart() {
return kvadrat();
}
private static BitMap dungerBrush() {
return punkt();
}
private static BitMap barriereBrush() {
return punkt();
}
public void resetBrett(Vector2 grosse, Vector2[] spielerStartPunkte) {
reset(grosse);
spieler[0].stempelnMitte(spielerStart(), spielerStartPunkte[0]);
spieler[1].stempelnMitte(spielerStart(), spielerStartPunkte[1]);
// FIXME: neben dem Rabnd vom Bild wird es nich so geil
}
// platz = offset, nicht Mitte
public void stellDunger(int spielerIdx, Vector2 platz) {
spieler[spielerIdx].stempelnMitte(dungerBrush(), platz);
}
public void stellBarriere(Vector2 platz) {
barrieren.stempelnMitte(barriereBrush(), platz);
}
public void verbreitenSpieler(int spielerIdx) {
int wachsengeschwindigkeit = 3;
int wachstumbudget = 13;
Vector2 n = new Vector2(0, 0);
Vector2 m = spieler[spielerIdx].GetSize();
Bitwise erlaubt = dunger[spielerIdx].or(spieler[spielerIdx]);
Bitwise neu_stand = (Bitwise)spieler[spielerIdx].Duplicate(true);
while (wachstumbudget > 0) {
neu_stand.GrowMask(wachsengeschwindigkeit, new Rect2(n, m));
Bitwise wachstum = neu_stand.and(erlaubt);
for (int i = 0; i < wachstum.GetTrueBitCount() - wachstumbudget; i++) {
// zufallig einen von wachstum von 1 zu 0 stellen
}
wachstumbudget -= wachstum.GetTrueBitCount();
}
spieler[spielerIdx] = neu_stand;
}
public bool istFertig() {
Vector2 alle = spieler[0].GetSize();
return spieler[0].GetTrueBitCount() +
spieler[1].GetTrueBitCount() +
barrieren.GetTrueBitCount() >= alle.x * alle.y;
}
public int punktenAnzahl(int spielerIdx) {
return spieler[spielerIdx].GetTrueBitCount();
}
public int punktenAnzahlAlternativ(int spielerIdx) {
int randEntfernung = 3;
Bitwise ohne_rand = spieler[spielerIdx].neg();
Vector2 n = new Vector2(0, 0);
Vector2 m = spieler[spielerIdx].GetSize();
ohne_rand.GrowMask(randEntfernung, new Rect2(n, m));
ohne_rand = ohne_rand.neg();
return ohne_rand.GetTrueBitCount();
}
public Vector2 grosse() {
return spieler[0].GetSize();
}
public bool hat_dunger(int spielerIdx, Vector2 platz) {
return dunger[spielerIdx].GetBit(platz);
}
public bool hat_spieler(int spielerIdx, Vector2 platz) {
return spieler[spielerIdx].GetBit(platz);
}
public bool hat_barriere(int spielerIdx, Vector2 platz) {
return barrieren.GetBit(platz);
}
// Declare member variables here. Examples:
// private int a = 2;
// private string b = "text";
// Called when the node enters the scene tree for the first time.
public override void _Ready()
{
}
// // Called every frame. 'delta' is the elapsed time since the previous frame.
// public override void _Process(float delta)
// {
//
// }
}
tiles/WWT-07.png

20.1 KB | W: | H:

tiles/WWT-07.png

15.6 KB | W: | H:

tiles/WWT-07.png
tiles/WWT-07.png
tiles/WWT-07.png
tiles/WWT-07.png
  • 2-up
  • Swipe
  • Onion skin
tiles/WWT-13.png

17.9 KB | W: | H:

tiles/WWT-13.png

18.1 KB | W: | H:

tiles/WWT-13.png
tiles/WWT-13.png
tiles/WWT-13.png
tiles/WWT-13.png
  • 2-up
  • Swipe
  • Onion skin
tiles/WWT-14.png

18.5 KB | W: | H:

tiles/WWT-14.png

29.9 KB | W: | H:

tiles/WWT-14.png
tiles/WWT-14.png
tiles/WWT-14.png
tiles/WWT-14.png
  • 2-up
  • Swipe
  • Onion skin
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment