123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- import AsyncLoader from 'Assets/Library/AsyncLoader';
- import * as RE from 'rogue-engine';
- import * as THREE from 'three'
- import CannonBody from '../../rogue_packages/rogue-cannon/Components/CannonBody.re'
- export default class Game extends RE.Component {
- loader = new AsyncLoader()
- @RE.Prop("Prefab") asteroid
- // @RE.Prop("Prefab") player
- start() {
- console.log("calling start", new Date().getTime())
- const expectedComponents = [
- "top-left", "top-middle", "top-right", "left-side", "right-side", "bottom-left", "bottom-middle", "bottom-right",
- ]
- this.loader.loadStaticText("space_hud.html").then(html => {
- // RE.Runtime.uiContainer.innerHTML = html
- expectedComponents.forEach(componentId => {
- let component = document.getElementById(componentId)
- let setupFunctionName = this.formatComponentName(componentId)
- if(this[setupFunctionName]) {
- //this[setupFunctionName](component)
- }
- })
- }, error => RE.Debug.logError(error))
- RE.Runtime.rogueDOMContainer.addEventListener('contextmenu', event => { event.preventDefault() })
- window.addEventListener('resize', this.onResize.bind(this))
- let field = RE.App.currentScene.getObjectByName("asteroidField")
- this.loader.loadStaticText("Data/level1.json").then(levelstring => {
- this.asteroids = []
- let objectData = JSON.parse(levelstring)
- for(let i = 0; i < objectData.length; i++) {
- let obj = objectData[i]
- if(obj[0] == "asteroid") {
- let asteroid = this.asteroid.instantiate(field)
- asteroid.position.copy(new THREE.Vector3(obj[1] ,1, obj[2]))
- asteroid.rotation.set(Math.PI * Math.random(), Math.PI * Math.random(), Math.PI * Math.random())
- // let size = (obj[1] % 3) + 1
- // asteroid.scale.set(size, size, size)
- // let body = RE.getComponent(CannonBody, asteroid).body
- // console.log(body)
- // setTimeout(() => {
- // body.shapes[0].radius = size / 2
- // body.mass = size
- // body.shapes[0].computeBoundingSphereRadius();
- // body.computeAABB();
- // body.updateMassProperties();
- // },0)
- // setTimeout(() => {
- // body.mass = size 10
- // let bodyShape = body.shapes[0]
- // body.removeShape(bodyShape)
- // bodyShape.updateBoundingSphereRadius(size / 2)
- // body.addShape(bodyShape)
- // bodyShape.updateConvexPolyhedronRepresentation();
- // bodyShape.computeBoundingSphereRadius();
- // body.computeAABB();
- // body.updateMassProperties();
- // }, 0)
- // body.body.shapes[0].boundingSphereRadius = size / 2
- // body.body.mass = size
- }
- }
- }, error => RE.Debug.logError(error))
- //random asteroids
- // let field = RE.App.currentScene.getObjectByName("asteroidField")
- // this.asteroids = []
- // for(let i = 0; i < 300; i++) {
- // let asteroid = this.asteroid.instantiate(field)
- // asteroid.position.copy(new THREE.Vector3(Math.floor(500 * Math.random() - 250) ,1 , Math.floor(500 * Math.random() - 250)))
- // }
- // let field = RE.App.currentScene.getObjectByName("asteroidField")
- // let objectData = levelData
- // for(let i = 0; i < objectData.length; i++) {
- // let obj = objectData[i]
- // if(obj[0] == "asteroid") {
- // let asteroid = this.asteroid.instantiate(field)
- // asteroid.position.copy(new THREE.Vector3(obj[1] ,1 , obj[2]))
- // }
- // }
- // this.player.instantiate()
- }
- onResize(event) {
- }
- formatComponentName(componentId) {
- return `setup` + componentId.split('-').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join('')
- }
-
- setupTopMiddle(element) {
- this.armorInfo = document.createElement('div')
- this.armorInfo.className = "header-info"
- this.armorInfo.innerHTML = "Armor: 50"
- element.appendChild(this.armorInfo)
- this.shieldsInfo = document.createElement('div')
- this.shieldsInfo.className = "header-info"
- this.shieldsInfo.innerHTML = "Shields: 100"
- element.appendChild(this.shieldsInfo)
- this.moneyInfo = document.createElement('div')
- this.moneyInfo.className = "header-info"
- this.moneyInfo.innerHTML = "₩: 140,000"
- element.appendChild(this.moneyInfo)
- }
- setupBottomLeft(element) {
- let info = document.createElement('div')
- info.innerHTML = "Mission: Retrieve the lost crystal alloy from the nearby asteroid field"
- element.appendChild(info)
- }
- setupBottomRight(element) {
- let minimap = document.createElement('canvas')
- minimap.width = Math.max(element.offsetWidth, 160)
- minimap.height = Math.max(element.offsetHeight, 160)
- let ctx = minimap.getContext('2d')
- ctx.strokeStyle = `rgba(40, 240, 40, 0.8)`
- ctx.beginPath()
- ctx.arc(minimap.width / 2, minimap.height / 2, Math.min(minimap.width / 2, minimap.height / 2), 0, 2 * Math.PI)
- ctx.stroke()
- ctx.beginPath()
- ctx.arc(minimap.width / 2, minimap.height / 2, Math.min(3 *minimap.width / 8, 3 * minimap.height / 8), 0, 2 * Math.PI)
- ctx.stroke()
- ctx.beginPath()
- ctx.arc(minimap.width / 2, minimap.height / 2, Math.min(1 *minimap.width / 4, 1 * minimap.height / 4), 0, 2 * Math.PI)
- ctx.stroke()
- ctx.beginPath()
- ctx.arc(minimap.width / 2, minimap.height / 2, Math.min(1 * minimap.width / 8, 1 * minimap.height / 8), 0, 2 * Math.PI)
- ctx.stroke()
- ctx.beginPath()
- ctx.moveTo(minimap.width / 2, minimap.height / 2)
- ctx.lineTo(2 * Math.min(minimap.width / 2, minimap.height / 2), minimap.height / 2)
- ctx.stroke()
- element.appendChild(minimap)
- }
- }
- RE.registerComponent(Game);
|