update render

This commit is contained in:
2025-10-23 15:10:41 -05:00
parent 923b5bc3d6
commit ef7b492984
6 changed files with 134 additions and 8 deletions

6
.gitignore vendored
View File

@@ -21,3 +21,9 @@ steam/
subprojects/*/
build_dbg/
modules/
sdk/
artifacts/
discord_social_sdk/
discord_partner_sdk/
steam_api64.dll
subprojects/.wraplock

View File

@@ -23,6 +23,7 @@
- **Comments**: Focus on "why", keep lines to ~100 columns
### Cell Language Style (JavaScript-like)
- **Language**: Cell resembles JavaScript but has key differences - equality operators (`==`, `!=`) perform strict comparisons (equivalent to `===`, `!==` in JavaScript, no type coercion)
- **Indentation**: 2 spaces
- **Declarations**: `def` for constants, `var` for block-scoped variables (like `let`)
- **Equality**: Use `==` only (strict equality, no coercion)

View File

@@ -1,7 +1,6 @@
debug: FORCE
meson setup build_dbg -Dbuildtype=debugoptimized
meson install --only-changed -C build_dbg
cp build_dbg/cell . && chmod +x cell
fast: FORCE
meson setup build_fast

View File

@@ -83,14 +83,11 @@ function mode_rect(src,dst,mode = "stretch")
return out;
}
// If camera viewport is defined, will draw to the screen
// If target is defined, will render to a target, too
cam.make = function()
{
var c = Object.create(basecam)
c.transform = new transform
c.transform.unit()
c.zoom = 1
c.size = [640,360]
c.mode = 'keep'
c.viewport = {x:0,y:0,width:1,height:1}

View File

@@ -26,10 +26,18 @@ function make_camera_pblob(camera) {
def cw = camera.surface ? camera.surface.width : win_size.width;
def ch = camera.surface ? camera.surface.height : win_size.height;
def zoom = camera.zoom || ch
var world_w, world_h;
def world_h = zoom;
def world_w = zoom * cw / ch;
if (camera.width && camera.aspect_ratio) {
// Use direct world dimensions if specified
world_w = camera.width;
world_h = camera.width / camera.aspect_ratio;
} else {
// Fallback to zoom-based calculation
def zoom = camera.zoom || ch;
world_h = zoom;
world_w = zoom * cw / ch;
}
def l = camera.pos[0] - camera.anchor[0] * world_w;
def b = camera.pos[1] - camera.anchor[1] * world_h;

115
tests/steam.ce Normal file
View File

@@ -0,0 +1,115 @@
var steam = use('steam')
// Test Steam functionality
if (steam && steam.user) {
var isLoggedOn = steam.user.logged_on()
log.console("Steam user logged on:", isLoggedOn)
if (isLoggedOn) {
var userName = steam.friends.name()
var steamId = steam.user.steam_id()
var appId = steam.app.id()
log.console("Steam user name: '" + userName + "'")
log.console("Steam user ID: '" + steamId.toString() + "'")
log.console("Steam app ID: " + appId.toString())
// Request user stats for achievements
steam.stats.request()
// Display online friends
log.console("\n=== ONLINE FRIENDS ===")
var friendCount = steam.friends.count(1) // EFriendFlagImmediate = 1
if (friendCount > 0) {
for (var i = 0; i < friendCount; i++) {
var friend = steam.friends.get_friend(i, 1)
if (friend) {
var friendName = steam.friends.get_friend_persona_name(friend)
var friendState = steam.friends.get_friend_persona_state(friend)
// Only show online friends (state > 0)
if (friendState > 0) {
var stateNames = ["Offline", "Online", "Busy", "Away", "Snooze", "Looking to Trade", "Looking to Play"]
var stateName = stateNames[friendState] || "Unknown"
log.console(" " + friendName + " - " + stateName)
// Check if friend is playing a game
var gameInfo = steam.friends.get_friend_game_played(friend)
if (gameInfo && gameInfo.game_id) {
var gameName = steam.friends.get_friend_rich_presence(friend, "steam_display")
if (gameName) {
log.console(" Playing: " + gameName)
} else {
log.console(" Playing game ID: " + gameInfo.game_id)
}
}
}
}
}
} else {
log.console(" No friends found or friends list not loaded yet")
}
// Display achievement information
log.console("\n=== ACHIEVEMENTS ===")
var achievementCount = steam.achievement.count()
if (achievementCount > 0) {
log.console("Total achievements: " + achievementCount)
for (var i = 0; i < achievementCount; i++) {
var achName = steam.achievement.name(i)
if (achName) {
var achieved = steam.achievement.get(achName)
var displayName = steam.achievement.get_display_attribute(achName, "name")
var description = steam.achievement.get_display_attribute(achName, "desc")
if (achieved) {
var unlockInfo = steam.achievement.get_and_unlock_time(achName)
if (unlockInfo) {
var unlockDate = new Date(unlockInfo.unlock_time * 1000)
log.console(" ✓ " + (displayName || achName) + " - Unlocked " + unlockDate.toLocaleDateString())
} else {
log.console(" ✓ " + (displayName || achName) + " - Unlocked")
}
} else {
// Check for progress on this achievement
var progressInt = steam.achievement.get_progress_limits_int(achName)
var progressFloat = steam.achievement.get_progress_limits_float(achName)
var progressText = ""
if (progressInt && progressInt.max_progress > 0) {
progressText = " (Progress: " + progressInt.min_progress + "/" + progressInt.max_progress + ")"
} else if (progressFloat && progressFloat.max_progress > 0) {
progressText = " (Progress: " + progressFloat.min_progress.toFixed(1) + "/" + progressFloat.max_progress.toFixed(1) + ")"
}
log.console(" ✗ " + (displayName || achName) + progressText)
if (description) {
log.console(" " + description)
}
}
}
}
// Show global achievement stats if available
steam.stats.request_global_achievement_percentages()
// Get most achieved achievement info
var mostAchieved = steam.achievement.get_most_achieved_info()
if (mostAchieved) {
log.console("\nMost achieved: " + mostAchieved.name + " (" + mostAchieved.percent.toFixed(1) + "% of players)")
}
} else {
log.console("No achievements found for this game")
}
// Display user phone/security status
log.console("\n=== ACCOUNT SECURITY ===")
log.console("Phone verified: " + steam.user.is_phone_verified())
log.console("Two-factor enabled: " + steam.user.is_two_factor_enabled())
log.console("Behind NAT: " + steam.user.is_behind_nat())
// Display user level and badge info if available
var userLevel = steam.user.level()
if (userLevel > 0) {
log.console("Steam level: " + userLevel)
}
}
}