Gameplay-Edit
This commit is contained in:
142
Assets/Scripts/Level/LayoutCell.cs
Normal file
142
Assets/Scripts/Level/LayoutCell.cs
Normal file
@@ -0,0 +1,142 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using Objects;
|
||||
|
||||
namespace Level
|
||||
{
|
||||
public class LayoutCell
|
||||
{
|
||||
[System.Serializable]
|
||||
public struct LayoutCellData
|
||||
{
|
||||
public enum CellContent
|
||||
{
|
||||
None,
|
||||
Block,
|
||||
Player,
|
||||
Crate
|
||||
}
|
||||
public CellContent cellContent;
|
||||
public bool isTarget;
|
||||
|
||||
public Vector3Int cellPos;
|
||||
}
|
||||
|
||||
// Public
|
||||
public LayoutCellData cellData;
|
||||
public Vector3 worldPos;
|
||||
public Crate crate;
|
||||
public Vector2Int layoutPosition;
|
||||
|
||||
// Private
|
||||
private SpriteRenderer bgSpriteRenderer;
|
||||
private SpriteRenderer envSpriteRenderer;
|
||||
|
||||
// Properties
|
||||
public bool IsFree
|
||||
{
|
||||
get
|
||||
{
|
||||
return cellData.cellContent == LayoutCellData.CellContent.None;
|
||||
}
|
||||
}
|
||||
|
||||
private Grid grid => LevelBuilder.Instance.grid;
|
||||
private Sprite blockSprite => LevelBuilder.Instance.blockSprite;
|
||||
private Sprite environmentSprite => LevelBuilder.Instance.environmentSprite;
|
||||
private Sprite groundSprite => LevelBuilder.Instance.groundSprite;
|
||||
private GameObject spritePrefab => LevelBuilder.Instance.spritePrefab;
|
||||
private GameObject cratePrefab => LevelBuilder.Instance.cratePrefab;
|
||||
|
||||
|
||||
public LayoutCell(Vector3Int cellPos, Vector2Int layoutPos)
|
||||
{
|
||||
layoutPosition = layoutPos;
|
||||
|
||||
// Init data
|
||||
cellData = new LayoutCellData
|
||||
{
|
||||
cellContent = LayoutCellData.CellContent.None,
|
||||
isTarget = false,
|
||||
cellPos = cellPos
|
||||
};
|
||||
|
||||
worldPos = grid.GetCellCenterWorld(cellPos);
|
||||
|
||||
// Init sprite objects
|
||||
GameObject bgObject = GameObject.Instantiate(spritePrefab, worldPos, Quaternion.identity);
|
||||
bgSpriteRenderer = bgObject.GetComponent<SpriteRenderer>();
|
||||
bgSpriteRenderer.sprite = groundSprite;
|
||||
|
||||
GameObject envObject = GameObject.Instantiate(spritePrefab, worldPos, Quaternion.identity);
|
||||
envSpriteRenderer = envObject.GetComponent<SpriteRenderer>();
|
||||
envSpriteRenderer.sortingOrder = 1;
|
||||
|
||||
// Subscribe to destroy event
|
||||
LevelBuilder.Instance.LevelDestroyed += Destroy;
|
||||
}
|
||||
|
||||
|
||||
public void ChangeEnv(LevelBuilderButtons.PlacementOption placementOption)
|
||||
{
|
||||
// Clean previous contents
|
||||
cellData.cellContent = LayoutCellData.CellContent.None;
|
||||
cellData.isTarget = false;
|
||||
|
||||
if (crate)
|
||||
{
|
||||
GameObject.Destroy(crate.gameObject);
|
||||
}
|
||||
|
||||
// Place new object
|
||||
if (placementOption == LevelBuilderButtons.PlacementOption.Block)
|
||||
{
|
||||
cellData.cellContent = LayoutCellData.CellContent.Block;
|
||||
}
|
||||
else if (placementOption == LevelBuilderButtons.PlacementOption.Environment)
|
||||
{
|
||||
cellData.isTarget = true;
|
||||
}
|
||||
else if (placementOption == LevelBuilderButtons.PlacementOption.Crate)
|
||||
{
|
||||
cellData.cellContent = LayoutCellData.CellContent.Crate;
|
||||
|
||||
GameObject crateObject = GameObject.Instantiate(cratePrefab, worldPos, Quaternion.identity);
|
||||
crate = crateObject.GetComponent<Crate>();
|
||||
crate.layoutPosition = layoutPosition;
|
||||
}
|
||||
else if (placementOption == LevelBuilderButtons.PlacementOption.Player)
|
||||
{
|
||||
Player.Instance.Teleport(this);
|
||||
}
|
||||
|
||||
UpdateSprites();
|
||||
}
|
||||
|
||||
|
||||
public void UpdateSprites()
|
||||
{
|
||||
if (cellData.cellContent == LayoutCellData.CellContent.Block)
|
||||
{
|
||||
envSpriteRenderer.sprite = blockSprite;
|
||||
}
|
||||
else if (cellData.isTarget)
|
||||
{
|
||||
envSpriteRenderer.sprite = environmentSprite;
|
||||
}
|
||||
else
|
||||
{
|
||||
envSpriteRenderer.sprite = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void Destroy()
|
||||
{
|
||||
GameObject.Destroy(bgSpriteRenderer.gameObject);
|
||||
GameObject.Destroy(envSpriteRenderer.gameObject);
|
||||
LevelBuilder.Instance.LevelDestroyed -= Destroy;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user